JSP
一、容器如何处理JSP
(1)查看指令,得到转换信息
(2)创建一个HttpServlet子类
(3)如果page有import属性,在类中转换为import语句
(4)如果有声明,转换为类声明下面
(5)建立服务方法_jspServlet()
(6)将html,scriplet和表达式放入服务方法中,由PrintWriter输出
二、隐式对象对应的对象
out JspWriter(不能取代PrinterWriter)
application ServletContext
request HttpRequest
response HttpResponse
config ServletConfig
session HttpSession
三、JSP生成的Servlet的API
(1)jspInit()
这个方法由init()调用,可以覆盖
(2)jspDestroy()
由Destroy()调用,可以覆盖
(3)_jspService()
由Service()调用,不可以覆盖
四、初始化JSP
为JSP配置Servlet初始化参数,只是<jsp-file></jsp-file>与Servlet的配置不同:
<servlet>
<servlet-name>Home</servlet-name>
<jsp-file>/index.jsp</jsp-file>
<init-param>
<param-name>email</param-name>
<param-value>xxxxx@gmail.com</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Home</servlet-name>
<url-pattern>index.jsp</url-pattern>
</servlet-mapping>
覆盖jspInit()。调用jspInit()时,Java类已经变成Servlet,所以已经有ServletContext和ServletConfig供Servlet使用。在jspInit()中可以调用getServletContest()和getServletConfig()
<%!
//函数要用声明,声明中不能直接使用隐式对象
public void jspInit(){
ServletConfig config = getServletConfig();
String email = config.getInitParameter("email");
ServletContext context = getServletContext();
context.setAttribute("email", email);
}
%>
五、JSP中的属性
属性的三个作用域:request,application,session
三大指令:page,taglib,include
六、EL表达式
${application.email},用来替代表达式
七、JSP动作
动作更像一个标签
<jsp:include page="welcome.jsp"/>
<c:set var="rate" value="32"/>