Java 服务器页面 (Java Server Page ,JSP) 以扩展名 .jsp 保存,有效地控制动态内容生成,在Java Server Page里面使用 Java 编程语言和类库.HTML 用于表示页面,而 Java 代码用于访问动态内容
1、转译时期(Translation time):验证JSP页面,没有出现错误,将JSP网页转译为 Servlet 源代码(.java)
2、编译时期(Compilation time):将Servlet源代码(.java)编译成 Servlet 类(.class),并报告语法错误
3、加载和实例化: 编译成功则将servlet类加载到内存中,并对其进行实例化;
4、jspInit() 执行一次初始化;
5、jspService() 进行请求处理;
6、jspDestroy() JSP引擎从服务器中删除servlet实例时,会调用jspDestroy();
JSP原始代码中包含了JSP元素和Template(模板) data两类
Template data指的是JSP引擎不处理的部分,即标记<%……%>以外的部分,例如代码中的HTML的内容等 ,这些数据会直接传送到客户端的浏览器
JSP元素则是指将由JSP引擎直接处理的部分,这一部分必须符合JSP语法,否则会导致编译错误。
include
向当前页中插入一个静态文件的内容:
<%@ include file="相对位置" %>
<%@ include file="common/footer.jsp" %>
page
<%@ page [ language="java" ] [ extends="package.class" ] [import="{package.class | package.*},..." ] [ session="true | false" ] [ buffer="none | 8kb | sizekb" ] [ autoFlush="true | false" ] [ isThreadSafe="true | false" ] [ info="text" ] [ errorPage="relativeURL" ] [ contentType="mimeType [;charset=characterSet]" | "text/html ; charset=ISO-8859-1" ] [ isErrorPage="true | false" ] %>
1.language="java"
声明脚本语言的种类,目前只能用"java" 。
2.import="{package.class | package.* },..."
需要导入的Java包的列表,这些包作用于程序段,表达式,以及声明。下面的包在JSP编译时已经导入了,所以就不需要再指明了:java.lang.* javax.servlet.* javax.servlet.jsp.* javax.servlet.http.*
3.errorPage="relativeURL"
设置处理异常事件的JSP文件。
4.isErrorPage="true | false"
设置此页是否为出错页,如果被设置为true,你就能使用exception对象
“<%@ page %>”指令作用于整个JSP页面,同样包括静态的包含文件。但是“<%@ page %>”指令不能作用于动态的包含文件,比如 “<jsp:include>” 。
可以在一个页面中用上多个“<%@ page %>”指令,但是其中的属性只能用一次,不过也有例外,那就是import属性。因为import属性和Java中的import语句类似(参照Java Language,import语句引入得是Java语言中的类),所以此属性就能多用几次。
无论把“<%@ page %>”指令放在JSP的文件的哪个地方,它的作用范围都是整个JSP页面。不过,为了JSP程序的可读性,以及好的编程习惯,最好还是把它放在JSP文件的顶部。
taglib指令
引入定制标签库
<%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %>
“HTML注释”:<!— comments --> 查看源代码可以看得到
“隐藏注释”:<%-- comments --%> 查看源代码看不到
“声明”
<%! declaration; [ declaration;] ... %>
“表达式”,用于在页面上输出信息
<%= expression %>
example
<%! int j = 10; %> <%=j %>
在页面上显示10
“脚本段”
<% 代码 %>
<jsp:forward> 页面跳转
<jsp:forward page={"relativeURL" | "<%= expression %>"} > <jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" /> [<jsp:param … />] </jsp:forward>
“<jsp:forward>”标签以后的代码,将不能执行。执行到“<jsp:forward>”就会自动跳转。
<jsp:forward page="login.jsp"> <jsp:param name="userName" value="riso"/> </jsp:forward>
<%=request.getParameter("userName") %>
<jsp:include> 包含一个静态或动态文件
<jsp:include page="{relativeURL | <%=expression %>}" flush="true" > // 这里必须使用flush="true",不能使用false值。而缺省值为false <jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" /> [<jsp:param …/>] </jsp:include>
<jsp:useBean>
<jsp:getProperty>
获取bean中的属性
<jsp:setProperty>
设置bean中的属性
<jsp:useBean id="userid" scope="page" class="com.model.user"></jsp:useBean> <%=userid.getUsername() %><br/> <%=userid.getPassword() %><br/> <% userid.setUsername("newwangweiwei"); %> <jsp:getProperty property="username" name="userid"/><br/> <jsp:getProperty property="password" name="userid"/><br/>
请求对象 request
“request” 对象代表的是来自客户端的请求,例如我们在FORM表单中填写的信息等,是最常用的对象。关于它的方法使用较多的是getParameter、getParameterNames和getParameterValues,通过调用这几个方法来获取请求对象中所包含的参数的值
响应对象 response
“response” 对象代表的是对客户端的响应,也就是说可以通过“response”对象来组织发送到客户端的数据。但是由于组织方式比较底层,所以不建议普通读者使用,需要向客户端发送文字时直接使用“out” 对象即可。
会话对象 session
“session” 对象代表服务器与客户端所建立的会话,当需要在不同的JSP页面中保留客户信息的情况下使用,比如在线购物、客户轨迹跟踪等。“session” 对象建立在cookie的基础上,所以使用时应注意判断一下客户端是否打开了cookie。常用的方法包括getId、 getValue、 getValueNames和putValue等。
应用对象 application
“application” 对象负责提供应用程序在服务器中运行时的一些全局信息,常用的方法有getMimeType和getRealPath等
页面对象 page
页面上下文对象 pagecontext
输出对象 out
“out” 对象代表了向客户端发送数据的对象,与“response” 对象不同,通过“out” 对象发送的内容将是浏览器需要显示的内容,是文本一级的,可以通过“out” 对象直接向客户端写一个由程序动态生成HTML文件。常用的方法除了pirnt和println之外,还包括clear、clearBuffer、flush、getBufferSize和getRemaining,这是因为“out” 对象内部包含了一个缓冲区,所以需要一些对缓冲区进行操作的方法。
配置对象 config
“config” 对象提供一些配置信息,常用的方法有getInitParameter和getInitParameterNames,以获得Servlet初始化时的参数。
异常对象 exception
Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开 servlet时处理response
1. 在servlet被调用之前截获;
2. 在servlet被调用之前检查servlet request;
3. 根据需要修改request头和request数据;
4. 根据需要修改response头和response数据;
5. 在servlet被调用之后截获。
Filter需要在web.xml中进行配置
<filter> <filter-name>filtertest</filter-name> <filter-class>com.filter.filtertest</filter-class> </filter> <filter-mapping> <filter-name>filtertest</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
public class filtertest implements Filter { @Override public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("GBK"); response.setContentType("text/html;charset=GBK"); response.setCharacterEncoding("GBK"); System.out.println("this is filter method!!"); chain.doFilter(request, response); } @Override public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub } }