JSP学习心得

LeeCySir

LeeCySir

2016-01-29 12:23

JSP学习心得,JSP学习心得
 

 

作者:徐春金

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/java/)

下面是本人在学习JSP时的一些心得:

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/java/)

一、JSP工作原理

在一个JSP文件第一次被请求时,JSP引擎把该JSP文件转换成为一个servlet。而这个引擎本身也是一个servlet,在JSWDK或WEBLOGIC中,它就是JspServlet。 JSP引擎先把该JSP文件转换成一个Java源文件,在转换时如果发现jsp文件有任何语法错误,转换过程将中断,并向服务端和客户端输出出错信息;如果转换成功, JSP引擎用javac把该Java源文件编译成相应的class文件。然后创建一个该SERVLET的实例,该SERVLET的jspInit()方法被执行,jspInit()方法在servlet的生命周期中只被执行一次。然后jspService()方法被调用来处理客户端的请求。对每一个请求,JSP引擎创建一个新的线程来处理该请求。如果有多个客户端同时请求该JSP文件,则JSP引擎会创建多个线程。每个客户端请求对应一个线程。以多线程方式执行可大大降低对系统的资源需求,提高系统的并发量及响应时间.但应该注意多线程的编程限制,由于该servlet始终驻于内存,所以响应是非常快的。 如果.jsp文件被修改了,服务器将根据设置决定是否对该文件重新编译,如果需要重新编译,则将编译结果取代内存中的servlet,并继续上述处理过程。 虽然JSP效率很高,但在第一次调用时由于需要转换和编译而有一些轻微的延迟。 此外,如果在任何时候如果由于系统资源不足的原因,JSP引擎将以某种不确定的方式将servlet从内存中移去。当这种情况发生时jspDestroy()方法首先被调用, 然后servlet实例便被标记加入"垃圾收集"处理。 jspInit()及jspDestory()格式如下:可在jspInit()中进行一些初始化工作,如建立与数据库的连接,或建立网络连接,从配置文件中取一些参数等,在jspDestory()中释放相应的资源。

<%!
public void jspInit()
{
       System.out.println("jspinit");
}
 
%
 
<%!
public void jspDestory()
{
       System.out.println("jspDestory");
}
%

二、服务端的输出缓冲区

缺省情况下:服务端要输出到客户端的内容,不直接写到客户端,而是先写到一个输出缓冲区中.只有在下面三中情况下,才会把该缓冲区的内容输出到客户端上:
该JSP网页已完成信息的输出 输出缓冲区已满 JSP中调用了out.flush()或response.flushbuffer() 输出缓冲区的大小可以用:<%@page buffer="none"|"nkb"%>或response.setBufferSize()设置,如下: 设置输出缓冲区的大小为1KB。<%@page buffer="1kb"%>或response.setBufferSize(1); 设置输出缓冲区的大小为0,即不缓冲。<%@page buffer="none" %>或response.setBufferSize(0); 用response.getBufferSize()或out.getBufferSize()可取的输出缓冲区的大小,单位为字节. 用response.isCommitted()可检查看服务端是否已将数据输出到客户端. 如果返回值是TRUE则已将数据输出到客户端,是FALSE则还没有.

三、服务端输出重定向

有以下3种方法可以做到输出重定向: RESPONSE.SETREDERECT("URL") 该方法通过修改HTTP协议的HEADER部分,对浏览器下达重定向指令的,使浏览器显示重定向网页的内容. response.sendRedirect("http://localhost:7001/index.html"); 下面的方法也能改变HTTP HEADER属性,它的原理和 1 是一样的.
<%
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
String newLocn="/index.html";
response.setHeader("Location",newLocn);
% 采用<JSP:FORWORD 该方法是利用服务器端先将数据输出到缓冲区的机制,在把缓冲区的内容发送到客户端之前,原来的不发送,改为发送该页面的内容,如果在<JSP:FORWORD之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,这一点应该特别注意. 如下面的例子中(1)会输出index.html的内容,2 不会输出index.html的内容,而是输出out.println("@@@@@@@@@@@@@@@@@"); 中的内容,并且在服务端会抛出:java.lang.IllegalStateException: Response already committed 异常,但客户端没有任何错误输出。 (1)
<%@page buffer="1kb"%
 
<%
long i=0;
 
for(i=0;i<10;i++)
{
       out.println("@@@@@@@@@@@@@@@@@");
}
%
 
<jsp:forward page="./index.html" /
 
 
(2)
<%@page buffer="1kb"%
 
<%
long i=0;
 
for(i=0;i<600

展开更多 50%)
分享

猜你喜欢

JSP学习心得

Java JAVA基础
JSP学习心得

Java异常学习心得

编程语言 网络编程
Java异常学习心得

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

mysql 常见命令和学习心得

编程语言 网络编程
mysql 常见命令和学习心得

用Delphi进行OpenGL编程学习心得

Delphi
用Delphi进行OpenGL编程学习心得

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Web开发学习心得2——HTML的结构

Web开发
Web开发学习心得2——HTML的结构

Web开发学习心得1——什么是HTMLXHTML

Web开发
Web开发学习心得1——什么是HTMLXHTML

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

《暗黑战神》提高战斗力攻略

《暗黑战神》提高战斗力攻略

指南:想成为一个JSP网站程序员吗?

指南:想成为一个JSP网站程序员吗?
下拉加载更多内容 ↓