jsp笔记之《javaee 企业应用实战》
1.WEB-INF是一个特殊的文件夹,web容器会包含该文件夹下的内容,客户端留言器无法访问WEB-INF下的任何内容。
2.jsp是servlet的一种简化,每个jsp页面就是一个servlet实例,jsp页面由tomcat等web容器编译成servlet(放在work路径对应的web应用下),servlet再负责相应用户请求。
3.从上图可以得知:
a.jsp文件必须在jsp服务器内运行;
b.jsp文件必须生成servlet才能执行;
c.每个jsp页面的第一个访问者速度很慢,因为只有第一次访问jsp需要编译成servlet;
4.jsp注释的写法:<%--注释内容--%> ,与html<!-- 注释内容-->不同。
简单脚本:<%out.println(new java.util.Date())%> 。
5.jsp声明:
<%--jsp声明<%=request.getContextPath()%>--%> <%! private int count; public String info(){ return "hello"; } %> <% //输出info方法的返回值 out.println(info());%> <br> <% //将count的值输出后再+1 out.println(count++); %>
打开多个浏览器,甚至在不同那个的机器上访问该jsp地址,发现所有客户端访问count的值是连续的,所有客户端共享了一个count变量。因为每个jsp编译生成的servlet在web容器中只有实例。jsp<%!%>中声明的是serlvet成员变量,成员变量只在创建实例化的时候初始化,该变量的值将一直保存,直到实例销毁。
注意:jsp声明部分定义的变量和方法可以使用private、public等访问控制符修饰,也可使用是static修饰,将其辩称雷属性和类方法,但不能使用abstract修饰要声明的方法,这会导致servlet辩称抽象类,从而无法实例化。
6. jsp输出表达式:<%= %>,输出表达式语法后不能有分号;
7.jsp脚本<%%>中的变量编译到servlet中是局部变量,而非成员变量,所以<% %>中出现的变量声明都不能用private、public等修饰符。 同样的,定义方法也需要修饰符,所以java脚本中也不允许定义方法(jsp脚本将抓换成_jspService方法里的可执行代码,java语法不允许在方法中定义方法)。
8.jsp的三个编译指令:
◎ page:针对当前页面的指令;
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" errorPage="error.jsp"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" isErrorPage="true"%>
◎ include: 包含另一个页面;
<%@include file="xx.jsp"%>
◎ taglib :用于定义和访问自定义标签;
9.jsp的七个动作指令:
JSP动作指令主要有如下7个:
Ø jsp:forward:执行页面转向,将请求的处理转发到下一个页面。
Ø jsp:param:用于传递参数,必须与其他支持参数的标签一起使用。
Ø jsp:include:用于动态引入一个JSP页面。
Ø jsp:plugin:用于下载JavaBean或Applet到客户端执行。
Ø jsp:useBean:创建一个JavaBean的实例。
Ø jsp:setProperty:设置JavaBean实例的属性值。
Ø jsp:getProperty:输出JavaBean实例的属性值。
详见:http://ajava.org/readbook/open/qljjeessh/15076.html
10.jsp脚本中的9个内置对象:
jsp中的内置对象都是servlet API接口的实例,jsp规范将他们完成了默认初始化(由jsp对应servlet的_jspService()来创建这些实例)。也就是说,他们已经是对象,可以直接使用。
记录几个常用的:
Ø pageContext:javax.servlet.jsp.PageContext的实例,该对象代表jsp页面上下文,使用该对象可以访问页面中
享数据,常用方法:getServletContext()、getServletConfig()等。
Ø request:javax.servlet.http.HttpservletRequest的实例,该对象封装了一次请求,客户端的请求参数都被封装
在该对象里。获取客户端请求参数必须使用该对象。
常用方法:getParameter(String paramName)、getParameterValues(String paramName)、
setAttribute(String attrName,Object attrValue)、getAttribute(String attrName)、
sendRedirect(java.lang.Stringlocation)等。
Ø Session: javax.servlet.http.HttpSession的实例,该对象代表一次会话,当客户端浏览器与站点建立连接的时候,
会话开始; 当客户端关闭浏览器的时候,会话结束。
常用方法:setAttribute(String attrName, Objecat attrValue)、getAttribute(String attrName)。
Ø pageContext:javax.servlet.jsp.PageContext,该对象代表该jsp页面上下文,使用该对象可以访问页面中的
共享数据。常用方法:getServletContext()、getServletConfig();