1、JSP技术:Java服务器页面,运行在Web服务器中的组件。动态网页技术,以.jsp结尾
2、JSP与Servlet的区别:Servlet是在Java代码中输出HTML元素,而JSP是在HTML元素中嵌入JSP代码
3、JSP的运行过程:JSP实质上就是Servlet
客户端--请求某个JSP页面-->Web容器查找该JSP页面对应的Servlet实例是否存在
|-->不存在(第一次):Web容器找到该JSP页面-->转译成Servlet源代码-->编译成.字节码,加载并创建实例
|-->存在(第n次):Web容器直接启动线程,调用对应的Servlet实例的jspServlet方法
4、JSP页面的组成元素:
1)传统
2)EL(表达式语言)
3)自定义标签
4)JSTL(JSP标准标签库)
5、JSP的基本组成元素 转译为Servlet的时候
1)HTML:静态元素。-->放置在service方法中当作out.write()的字符创参数直接向客户端输出
2)表达式(Expression):-->放置在service方法中当作out。print()的参数
<%= java表达式 %> 计算表达式的值,并输出到客户端。表达式不能用“;”结束
3)代码片段(Scriptlet):--> 放置在service方法中当作普通的代码处理。
<% java代码 %> 声明的变量是局部变量。
4)声明(Declaration): 当作Servlet的成员看待。与service方法平级。
<%! 变量或者方法的定义%> 声明的是成员变量和成员方法
5)注释(Comment): 直接被忽略
<%-- --%>客户端不能产看到
6)指令(Directive): 编译时指令
<%@ 指令名 属性名="值"...%>
a) page 再转译成Servlet时对页面指定的一些配置信息
b) include 静态包含。不能向被包含的文件传递参数
c) taglib 导入标签库描述文件<%@ taglib uri="URL" prefix="标签引用的前缀" %>
7)动作(Action):运行的命令
<jsp:动作名 属性值="值">标签体</jsp:动作名>
<jsp:动作名 属性值="值"/>
a)useBean ,setProperty,getProperty
b)include:动态包含
<jsp:include page="URL">
<jsp:param name="参数名" value="值">
</jsp:include>
c)forward:请求分派
<jsp:forward page="URL">
<jsp:param name="参数名" value="值">
</jsp:forward>
d)include指令和include动作的异同
相同点:都是在一个页面中把目标页面的内容包含进来
不同:include指令是在转译时把目标页面的内容添加到当前页面对应的Servlet的service方法。不能传递请求参数
include动作是在执行时才把目标页面的内容包含到当前页面对应的Servlet的service方法,可以传递请求参数。
6、JSP中的九大隐式对象
1) out JspWriter实例,用来向客户端输出字符数据
2)request HttpServletRequest实例 代表客户端的请求对象
3)response HttpServletResponse实例,代表服务器的响应对象
4)pageContext PageContext实例 页面上下文对象
5)session HttpSession实例 代表客户端的会话对象
6)application ServletContext Web应用上下文对象
7)page this,代表当前JSP对应的Servlet实例
8)config ServlerConfig实例,代表JSP配置对象(可以获取初始化参数)
9)exception java.io.Throwable实例,代表异常对象。只能使用<%@ page isErrorPage="true" %>的JSP
7、JSP中的四个属性作用域
名称 对应的隐式对象名 描述
page PageContext 页面作用域
session session 会话作用域
request request 请求作用域
application application Web应用作用域
8、Servlet和JSP之间的通信
1)JSP跳转到Servlet
a)超链接或者提交表单跳转到Servlet:在Servlet中获取请求中的参数数据request.getParameter("参数名");
b)<jsp:forward page="Servlet的映射URL"/>
<%request.getRequestDispatcher("Servlet的映射URL").forward(request,response);%>//请求分派
可以通过请求参数来传递数据到Servlet,也可以通过请求作用域来传递
request.setAttribute("属性名","值");//JSP
Object obj=request.getAttribute("属性名");//Servlet
c)代码片段中使用response.sendRedirect("Servlet的映射URL");//不共享同一个请求
无法通过请求参数来传递数据,也无法通过请求作用域来传递。
2)Servlet跳转到JSP
a)请求分派:可以通过请求参数来传递数据到JSP,也可以通过请求作用域来传递
request.getRequestDispatcher("JSP文件").forward(request,response);
request.setAttribute();//Servlet
request.getAttribute();//JSP
b)重定向: 无法通过请求参数来传递数据,也无法通过请求作用域来传递。
response.sendRedirect("Servlet的映射URL");