博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
j2EE JSP
阅读量:6219 次
发布时间:2019-06-21

本文共 4650 字,大约阅读时间需要 15 分钟。

hot3.png

Java 服务器页面 (Java Server Page ,JSP) 以扩展名 .jsp 保存,有效地控制动态内容生成,在Java Server Page里面使用 Java 编程语言和类库.HTML 用于表示页面,而 Java 代码用于访问动态内容

JSP执行过程

124344_O9sM_81653.gif

124442_tjn2_81653.gif

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语法,否则会导致编译错误。 

JSP语法

编译器指令(DIRECTIVE)

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" %> 

脚本语法(SCRIPTING)

“HTML注释”:<!— comments --> 查看源代码可以看得到

“隐藏注释”:<%-- comments --%> 查看源代码看不到

“声明”

<%! declaration; [ declaration;] ... %>

“表达式”,用于在页面上输出信息  

<%= expression %>

example

 <%! int j = 10; %>   <%=j %>

在页面上显示10

“脚本段”

<% 代码 %>

动作语法(ACTION) 

<jsp:forward> 页面跳转

<%= expression %>"} > 
<%= expression %>}" />  [
]

“<jsp:forward>”标签以后的代码,将不能执行。执行到“<jsp:forward>”就会自动跳转。

 <%=request.getParameter("userName") %>

<jsp:include> 包含一个静态或动态文件

<%=expression %>}"   flush="true" >   // 这里必须使用flush="true",不能使用false值。而缺省值为false 
<%= expression %>}" />    [
]

<jsp:useBean>

<jsp:getProperty>

获取bean中的属性

<jsp:setProperty>

设置bean中的属性

  <%=userid.getUsername() %>
  <%=userid.getPassword() %>
  <% userid.setUsername("newwangweiwei"); %>  
  

jsp内置对象

请求对象 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

141856_B3Nx_81653.gif

jsp filter

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中进行配置

filtertest
com.filter.filtertest
filtertest
/*

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	}}

转载于:https://my.oschina.net/hnuweiwei/blog/296757

你可能感兴趣的文章
雾里看花之 Python Asyncio
查看>>
《树莓派Python编程入门与实战》——3.9 总结
查看>>
Velocity官方指南-使用Velocity
查看>>
jQuery获取数组对象的值
查看>>
从《一九八四》到《窃听风暴》
查看>>
《jQuery、jQuery UI及jQuery Mobile技巧与示例》——9.2 技巧:用单个HTML文件服务多张页面...
查看>>
360 for Linux 与 setuid
查看>>
《驾驭大数据》一3.5 电力行业:智能电网数据的价值
查看>>
《用户至上:用户研究方法与实践(原书第2版)》一2.5 特殊人群
查看>>
《OpenStack云计算实战手册(第2版)》——1.3 配置Ubuntu Cloud Archive
查看>>
《C#多线程编程实战(原书第2版)》——导读
查看>>
Java核心技术卷I基础知识1.5 关于Java的常见误解
查看>>
开源大数据周刊-第40期
查看>>
消息队列的exclusive consumer功能是如何保证消息有序和防止脑裂的
查看>>
云栖大会上宣布即将开源的手淘Atlas什么来头?
查看>>
将studio项目 转换为eclipse项目
查看>>
【Spark Summit EU 2016】在Spark集群中内置Elasticsearch
查看>>
linux epoll浅析
查看>>
Android+struts2+json方式模拟手机登录功能
查看>>
【云栖神侠传】洞悉分毫,决策千里!看阿里神侠的海量日志处理秘籍
查看>>