admin管理员组文章数量:1033040
JavaWeb后端入门9—JSP、MVC
1. JSP的脚本和注释
1.1 脚本
<%java代码%>
内部的代码翻译到service方法的内部
<%
int i=1;
System.out.print(i);
%>
-
<%=java变量或表达式%>
会在前台页面输出,被翻译成service方法内部的out.write( )
<%=i %>
<%=1+1 %>
-
<%!java代码或类方法%>
会被翻译成Servlet的成员内容
<%!
String str = "你好中国";
%>
<%=str %>
1.2 jsp注释
不同的注释可见范围不同
- html注释可见范围:jsp源码、翻译后的Servlet、前台html
<!-- 这是html 注释-->
- java注释可见范围:jsp源码、翻译后的Servlet
//单行注释
/*多行注释*/
/**可写入javadoc的注释*/
- jsp注释可见范围:只在jsp源码
<%-- 这是JSP注释 --%>
1.3 设置web应用的全局错误页面
代码语言:javascript代码运行次数:0运行复制打开web.xml
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
2. 运行原理
JSP的本质是Servlet。
3. JSP指令
3.1 page指令
- page指令:属性最多的一个指令,根据不同的属性,指导整个页面特性
格式:
代码语言:javascript代码运行次数:0运行复制<%@ page 属性名1= "属性值1" 属性名2= "属性值2" ...%>
常用属性:
代码语言:javascript代码运行次数:0运行复制language:jsp脚本中可以嵌入的语言种类,但是只能填写java
pageEncoding:当前jsp文件的本身编码---内部可以包含contentType
contentType:response.setContentType(text/html;charset=UTF-8)
session:是否jsp在翻译时自动创建session
import:导入java的包
errorPage:当当前页面出错后跳转到哪个页面
isErrorPage:当前页面是一个处理错误的页面
3.2 include指令
- include指令:页面包含指令,可以将一个jsp包含到另一个jsp中
<%@ include file="被包含的文件地址"%>
作用:代码复现,可以单独写header.jsp
、footer.jsp
,写其他页面时直接引入
静态包含注意点:
- 被包含的页面结构应该去掉(比如head标签等),只保存需要引入的html代码。
- 在被包含的页面中定义变量,在包含的页面中还可以使用。
3.3 taglib指令
- taglib指令:在jsp引入标签库(jstl标签库、struts2标签库)
<%@ taglib uri="标签库地址" prefix="前缀"%>
- uri:引入的标签库的路径
- prefix:引入的标签库的别名(前缀)
4. JSP的9个内置(隐式)对象
名称 | 类型 | 描述 |
---|---|---|
out | javax.servlet.jsp.JspWriter | 用于页面输出 |
request | javax.servlet.http.HttpServletRequest | 得到用户请求信息, |
response | javax.servlet.http.HttpServletResponse | 服务器向客户端的回应信息 |
config | javax.servlet.ServletConfig | 服务器配置,可以取得初始化参数 |
session | javax.servlet.http.HttpSession | 用来保存用户的信息 |
application | javax.servlet.ServletContext | 所有用户的共享信息 |
page | java.lang.Object | 指当前页面转换后的Servlet类的实例 |
pageContext | javax.servlet.jsp.PageContext | JSP的页面容器 |
exception | java.lang.Throwable | 表示JSP页面所发生的异常,在错误页中才起作用 |
5. pageContext对象的概述
5.1 简介
pageContext翻译为“页面上下文”对象,代表的是当前页面运行的一些属性
5.2 作用
- 提供了page范围的数据存取对象
向page范围中存入数据:setAttribute()
向page范围中获取数据:getAttribute()
向page范围中删除数据:removeAttribute()
查找属性的方法:findAttribute()
- 通过这个对象获得其他的8个内置对象
getException()
getPage()
getRequest()
getResponse()
getServletConfig()
getServletContext()
getSession()
getOut()
5.3 pageContext对象向四个域范围存取数据
代码语言:javascript代码运行次数:0运行复制1、向request中存数据
pageContext.setAttribute("name", "张三", pageContext.REQUEST_SCOPE);
这句相当于
request.setAttribute("name", "张三");
session、application同理
2、取数据用getAttribute("name",pageContext.REQUEST_SCOPE);
其余同理
5.4 findAttribute方法
先根据小范围的名称进行查找,如果找到了就返回,找不到就去更大范围的那里去找。
代码语言:javascript代码运行次数:0运行复制PageContext.findAttribute("name");
如果pageContext里面没有,就去requestContext找,没有就去SessionContext找,没有就去applicationContext找,找不到就返回null
6. JSP的四个作用范围
6.1 概述
- PageScope:页面范围
- 在当前的页面内有效,离开这个页面,用PageContext保存的数据无效
- RequestScope:请求范围
- 从客户端向服务器发送一次请求,服务器对这次请求作出相应之后,用reuqest保存的数据无效
- SessionScope:会话范围
- 每个浏览器向服务器发送请求(多次请求)。会话结束后(关闭浏览器或手动删除Session),数据无效。
- ApplicationScope:应用范围
- 整个应用中任意的地方都可以获取。
6.2 代码演示
demo1.jsp
的body:
<h1>JSP四个作用范围演示</h1>
<%
//page范围(PageContext)
pageContext.setAttribute("name", "张三");
//request范围
request.setAttribute("name", "李四");
//Session范围
session.setAttribute("name", "王五");
//application范围
application.setAttribute("name", "冰冰");
%>
<h1>当前页面获取值</h1>
<%=pageContext.getAttribute("name") %>
<%=request.getAttribute("name") %>
<%=session.getAttribute("name") %>
<%=application.getAttribute("name") %>
<%
//转发到另外一个页面
//request.getRequestDispatcher("./demo2.jsp").forward(request, response);
%>
<a href="./demo2.jsp">demo2.jsp</a>
demo2.jsp
的body:
<h1>demo2页面获取值</h1>
<%=pageContext.getAttribute("name") %>
<%=request.getAttribute("name") %>
<%=session.getAttribute("name") %>
<%=application.getAttribute("name") %>
分析:
- 直接打开
demo1.jsp
:- 四个都有
demo1.jsp
请求转发至demo2.jsp
- 张三没了
demo1.jsp
通过a标签
跳转至demo2.jsp
- 张三、李四没了
demo1.jsp
重定向至demo2.jsp
- 张三、李四没了
- 换个浏览器直接打开
demo2.jsp
- 只有冰冰
7. JSP的动作标签
JSP的动作标签用于在JSP页面中提供业务逻辑功能,避免在JSP页面中直接编写Java代码造成jsp页面难以维护。
7.1 常用的动作标签
- <jsp:forward page=""/>:请求转发
- 相当于
request.getRequestDispatcher("").forward(request, response);
- 相当于
- <jsp:include/>:动态包含
- <jsp:param/>:传递参数(不用了),用request.setAttribute()实现
7.2 动态包含的原理
JavaWeb后端入门9—JSP、MVC
1. JSP的脚本和注释
1.1 脚本
<%java代码%>
内部的代码翻译到service方法的内部
<%
int i=1;
System.out.print(i);
%>
-
<%=java变量或表达式%>
会在前台页面输出,被翻译成service方法内部的out.write( )
<%=i %>
<%=1+1 %>
-
<%!java代码或类方法%>
会被翻译成Servlet的成员内容
<%!
String str = "你好中国";
%>
<%=str %>
1.2 jsp注释
不同的注释可见范围不同
- html注释可见范围:jsp源码、翻译后的Servlet、前台html
<!-- 这是html 注释-->
- java注释可见范围:jsp源码、翻译后的Servlet
//单行注释
/*多行注释*/
/**可写入javadoc的注释*/
- jsp注释可见范围:只在jsp源码
<%-- 这是JSP注释 --%>
1.3 设置web应用的全局错误页面
代码语言:javascript代码运行次数:0运行复制打开web.xml
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
2. 运行原理
JSP的本质是Servlet。
3. JSP指令
3.1 page指令
- page指令:属性最多的一个指令,根据不同的属性,指导整个页面特性
格式:
代码语言:javascript代码运行次数:0运行复制<%@ page 属性名1= "属性值1" 属性名2= "属性值2" ...%>
常用属性:
代码语言:javascript代码运行次数:0运行复制language:jsp脚本中可以嵌入的语言种类,但是只能填写java
pageEncoding:当前jsp文件的本身编码---内部可以包含contentType
contentType:response.setContentType(text/html;charset=UTF-8)
session:是否jsp在翻译时自动创建session
import:导入java的包
errorPage:当当前页面出错后跳转到哪个页面
isErrorPage:当前页面是一个处理错误的页面
3.2 include指令
- include指令:页面包含指令,可以将一个jsp包含到另一个jsp中
<%@ include file="被包含的文件地址"%>
作用:代码复现,可以单独写header.jsp
、footer.jsp
,写其他页面时直接引入
静态包含注意点:
- 被包含的页面结构应该去掉(比如head标签等),只保存需要引入的html代码。
- 在被包含的页面中定义变量,在包含的页面中还可以使用。
3.3 taglib指令
- taglib指令:在jsp引入标签库(jstl标签库、struts2标签库)
<%@ taglib uri="标签库地址" prefix="前缀"%>
- uri:引入的标签库的路径
- prefix:引入的标签库的别名(前缀)
4. JSP的9个内置(隐式)对象
名称 | 类型 | 描述 |
---|---|---|
out | javax.servlet.jsp.JspWriter | 用于页面输出 |
request | javax.servlet.http.HttpServletRequest | 得到用户请求信息, |
response | javax.servlet.http.HttpServletResponse | 服务器向客户端的回应信息 |
config | javax.servlet.ServletConfig | 服务器配置,可以取得初始化参数 |
session | javax.servlet.http.HttpSession | 用来保存用户的信息 |
application | javax.servlet.ServletContext | 所有用户的共享信息 |
page | java.lang.Object | 指当前页面转换后的Servlet类的实例 |
pageContext | javax.servlet.jsp.PageContext | JSP的页面容器 |
exception | java.lang.Throwable | 表示JSP页面所发生的异常,在错误页中才起作用 |
5. pageContext对象的概述
5.1 简介
pageContext翻译为“页面上下文”对象,代表的是当前页面运行的一些属性
5.2 作用
- 提供了page范围的数据存取对象
向page范围中存入数据:setAttribute()
向page范围中获取数据:getAttribute()
向page范围中删除数据:removeAttribute()
查找属性的方法:findAttribute()
- 通过这个对象获得其他的8个内置对象
getException()
getPage()
getRequest()
getResponse()
getServletConfig()
getServletContext()
getSession()
getOut()
5.3 pageContext对象向四个域范围存取数据
代码语言:javascript代码运行次数:0运行复制1、向request中存数据
pageContext.setAttribute("name", "张三", pageContext.REQUEST_SCOPE);
这句相当于
request.setAttribute("name", "张三");
session、application同理
2、取数据用getAttribute("name",pageContext.REQUEST_SCOPE);
其余同理
5.4 findAttribute方法
先根据小范围的名称进行查找,如果找到了就返回,找不到就去更大范围的那里去找。
代码语言:javascript代码运行次数:0运行复制PageContext.findAttribute("name");
如果pageContext里面没有,就去requestContext找,没有就去SessionContext找,没有就去applicationContext找,找不到就返回null
6. JSP的四个作用范围
6.1 概述
- PageScope:页面范围
- 在当前的页面内有效,离开这个页面,用PageContext保存的数据无效
- RequestScope:请求范围
- 从客户端向服务器发送一次请求,服务器对这次请求作出相应之后,用reuqest保存的数据无效
- SessionScope:会话范围
- 每个浏览器向服务器发送请求(多次请求)。会话结束后(关闭浏览器或手动删除Session),数据无效。
- ApplicationScope:应用范围
- 整个应用中任意的地方都可以获取。
6.2 代码演示
demo1.jsp
的body:
<h1>JSP四个作用范围演示</h1>
<%
//page范围(PageContext)
pageContext.setAttribute("name", "张三");
//request范围
request.setAttribute("name", "李四");
//Session范围
session.setAttribute("name", "王五");
//application范围
application.setAttribute("name", "冰冰");
%>
<h1>当前页面获取值</h1>
<%=pageContext.getAttribute("name") %>
<%=request.getAttribute("name") %>
<%=session.getAttribute("name") %>
<%=application.getAttribute("name") %>
<%
//转发到另外一个页面
//request.getRequestDispatcher("./demo2.jsp").forward(request, response);
%>
<a href="./demo2.jsp">demo2.jsp</a>
demo2.jsp
的body:
<h1>demo2页面获取值</h1>
<%=pageContext.getAttribute("name") %>
<%=request.getAttribute("name") %>
<%=session.getAttribute("name") %>
<%=application.getAttribute("name") %>
分析:
- 直接打开
demo1.jsp
:- 四个都有
demo1.jsp
请求转发至demo2.jsp
- 张三没了
demo1.jsp
通过a标签
跳转至demo2.jsp
- 张三、李四没了
demo1.jsp
重定向至demo2.jsp
- 张三、李四没了
- 换个浏览器直接打开
demo2.jsp
- 只有冰冰
7. JSP的动作标签
JSP的动作标签用于在JSP页面中提供业务逻辑功能,避免在JSP页面中直接编写Java代码造成jsp页面难以维护。
7.1 常用的动作标签
- <jsp:forward page=""/>:请求转发
- 相当于
request.getRequestDispatcher("").forward(request, response);
- 相当于
- <jsp:include/>:动态包含
- <jsp:param/>:传递参数(不用了),用request.setAttribute()实现
7.2 动态包含的原理
本文标签: JavaWeb后端入门9JSPMVC
版权声明:本文标题:JavaWeb后端入门9—JSP、MVC 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/jiaocheng/1748000574a2239907.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论