文档章节

j2EE JSP

memristor
 memristor
发布于 2014/07/31 13:36
字数 1636
阅读 33
收藏 0

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

JSP执行过程

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> 页面跳转

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

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


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

<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

	}

}


© 著作权归作者所有

上一篇: j2EE JDBC
下一篇: j2EE servlet(二)
memristor
粉丝 45
博文 203
码字总数 176319
作品 0
长沙
程序员
私信 提问
tomcat 5.5 部署项目报错 关于Filter的错误。。

我在tomcat7.0部署没不报错,但是再tomcat5.5就会报错。。 listener.ContextListener UrlRewriteFilter org.tuckey.web.filters.urlrewrite.UrlRewriteFilter logLevel WARN UrlRewriteFilte......

庄泽锐
2014/03/06
1K
5
oscache缓存的页面为乱码

项目用的oscache,用的web.xml配置 CharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8   forceEncoding   true    CharacterEncodingF......

kkli
2014/03/13
378
1
Tomcat 容器与servlet的交互原理

Tomcat 是Web应用服务器,是一个Servlet/JSP容器. Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户.而Servlet是一种运行在支持Java语言的服务器...

watermelon11
02/25
0
0
Servlet 生命周期、工作原理

Servlet 生命周期:Servlet 加载--->实例化--->服务--->销毁。 init():在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet 对象。可以配...

ArlenXu
2015/01/24
0
0
Servlet生命周期与工作原理

Servlet生命周期分为三个阶段:   1,初始化阶段 调用init()方法   2,响应客户请求阶段  调用service()方法   3,终止阶段  调用destroy()方法 Servlet初始化阶段:   在下列时...

№贪↗恋♂
2012/08/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

NIO基于长度域的报文在Netty下的解码

1, 先复习一下粘包/拆包 1.1, 粘包/拆包的含义 TCP是个“流”协议, 并不了解上层业务数据的具体含义, 它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TCP...

老菜鸟0217
今天
8
0
从零开始搭建spring-cloud(2) ----ribbon

在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的。Spring cloud有两种服务调用方式,一种是ribbon+restTemplate,另一种是feign。 其实我们已经在上...

Vincent-Duan
今天
17
0
get和post的区别?

doGet:路径传参。效率高,安全性差(get的传送数据量有限制,不能大于2Kb) doPOST:实体传参。效率低,安全性好 建议: 1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Pos...

花无谢
昨天
4
0
当谈论迭代器时,我谈些什么?

当谈论迭代器时,我谈些什么? 花下猫语:之前说过,我对于编程语言跟其它学科的融合非常感兴趣,但我还说漏了一点,就是我对于 Python 跟其它编程语言的对比学习,也很感兴趣。所以,我一直...

豌豆花下猫
昨天
14
0
10天学Python直接做项目,我做了这5件事

初学者如何尽快上手python? 市面上关于如何学python的资料很多,但是讲的都太复杂。 我就是很简单的几句话,从小白到开发工程师,我只做了五件事。 我觉得任何商业计划书如果不能用几句话讲...

Python派森
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部