新手的JSP学习心得

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
testdemo td= new testdemo(); td.print("this is use new"); 五、JSP 调试 JSP 调试比较麻烦,特别是当 bean 是在一个 session 中存在时,更加困难。得从好几个页面 开始往里面走才行。通常是用 out.println()或 System.out.print()来打一大堆信息来查问 题。如果是用 jbuilder 做开发,它能直接调试 JSP.不过更重要是知道错误产生原因及解决方 法。下面对一些 JSP 编程常见错误进行分析。
用 response.getBufferSize()或 out.getBufferSize()可取输出缓冲区大小,单位为字节. 用 response.isCommitted()可检查看服务端是否已将数据输出到客户端. 如果返回值是 TRUE 则已将数据输出到客户端,是 FALSE 则还没有. 三、服务端输出重定向
<%! 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);
有以下 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 异常,但客户端没有 任何错误输出。 </jsp:forword></jsp:forword> (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;i++) { out.println("@@@@@@@@@@@@@@@@@"); } %> </jsp:forward>说明: 1. 方法(1),(2)可以使用变量表示重定向地址;方法(3)不能使用变量表示重定向地址。 String add="./index.html";
testdemo td= new testdemo();
td.print("this is use new");
%>
代码(2)
demo.com.testdemo test = (demo.com.testdemo)request.getAttribute("test");
if (test == null)
新手的 JSP 学习心得.txt 用快乐去奔跑,用心去倾听,用思维去发展,用努力去奋斗,用目 标去衡量,用爱去生活。钱多钱少,常有就好!人老人少,健康就好!家贫家富,和睦就好。 一、JSP 工作原理
在一个 JSP 文件第一次被请求时,JSP 引擎把该 JSP 文件转换成为一个 servlet。而这个引擎 本身也是一个 servlet,在 JSWDK 或 WEBLOGIC 中,它就是 JspServlet。 JSP 引擎先把该 JSP 文件转换成一个 Java 源文件,在转换时如果发现 jsp 文件有任何语法错误,转换过程将中断, 并向服务端和客户端输出出错信息;如果转换成功, JSP 引擎用 javac 把该 Java 源文件编 译成相应 class 文件。然后创建一个该 SERVLET 实例,该 SERVLETjspInit()方法被执行, 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"); } %>
String str1,str2,str3; str1="ABCD";
str2="AB"; str3=str2+"CD"; if (str1==str3) out.print("yes"); else out.print("no"); 结果是"no"。 String str1=new String("ABCD"); String str2=new String("ABCD"); if (str1==str2) out.print("yes"); else out.print("no"); 结果是"no"。
<jsp:forward page="add"> 无法重定向到 index.html 中去 String add=http://localhost:7001/index.html response.sendRedirect(add); 可以重定向到 http://localhost:7001/index.html 中去。 2. 采用方法(1),(2)request 中变量(通过 request.setAttribute()保存到 request 中值)不 能 在 新 页 面 中 采 用 , 采 用 方 法 (3) 能 . 综 上 , 我 们 应 该 采 用 (1),(2) 重 定 向 比 较 好 . </jsp:forward>
(3).在 jsp 中判断字符串要使用 compareTo 方法,不要用==,因为在 java 中 String 变量不 是一个简单变量而是一个类实例,不同方法会得到 不同结果,如下所示:
String str1="ABCD"; String str2="ABCD"; (或 String str2="AB"+"CD"; ) if (str1==str2) out.print("yes"); else out.print("no"); 结果是"yes"。
{
try
{
test
=
(demo.com.testdemo)
java.beans.Beans.instantiate(getClass().getClassLoader(),"demo.com.testdemo");
}
catch (Exception _beanException)
{
throw new weblogic.utils.NestedRuntimeException("cannot instantiate ’
四、JSP 中正确应用类: 应该把类当成 JAVA BEAN 来用,不要在<% %> 中直接使用. 如下代码(1)经过 JSP 引擎转化后 会变为代码(2): 从中可看出如果把一个类在 JSP 当成 JAVA BEAN 使用,JSP 会根据它作用范围把它保存到相应 内部对象中. 如作用范围为 request,则把它保存到 request 对象中.并且只在第一次调用(对象值为 null) 它时进行实例化. 而如果在<% %>中直接创建该类一个对象,则每次调用 JSP 时,都要重新创建 该对象,会影响性能. 代码(1) <jsp:usebean id="test" scope="request" class="demo.com.testdemo"> </jsp:usebean> <% test.print("this is use java bean");
} else {
} %>
(2).JSP 是用 JAVA 写,所以它是大小写敏感,用过其他编程语言人最容易犯这个错误。另外 在 浏 览 器 地 址 栏 中 输 入 访 问 JSP 地 址 也 是 区 分 大 小 写 . 如 http://localhost:7001/demo/t.jsp 与 http://localhost:7001/Demo/t.jsp 是不一样
(1).java.lang.NullPointerException 异常 一般是对一个为 NULL 值变量进行操作引起.如下面操作就会抛出 java.lang.NullPointerException StrLeabharlann Baidung a = null; a.substring(0,1);
为避免这种异常最好在对变量操作之前检查看它是否为 NULL 值.如: <% String ss=Session.getAttribute("NAME") if isnull(ss) {
String str1=new String("ABCD"); String str2=new String("ABCD"); if (str1.compareTo(str2)==0) out.print("yes"); else out.print("no"); 结果是"yes"。
demo.com.testdemo’",_beanException);
}
request.setAttribute("test", test);
out.print("\r\n");
}
out.print("\r\n\r\n\r\n");
test.print("this is use java bean");
相关文档
最新文档