在网上看到这篇关于JSP总结的文章摘录了下来,总共分了7点去进行总结,有理解的部分,也有只知其一;不知其二的一些内容,但愿等我更深刻地了解到这方面的知识了再回来看看,能有更大的启发。
html
1、JSP工做原理java
<%! public void jspInit() { System.out.println("jspinit"); } %> <%! public void jspDestory() { System.out.println("jspDestory"); } %>
2、服务端的输出缓冲区web
用response.getBufferSize()或out.getBufferSize()可取的输出缓冲区的大小,单位为字节. 用response.isCommitted()可检查看服务端是否已将数据输出到客户端. 若是返回值是TRUE则已将数据输出到客户端,是FALSE则尚未。数据库
3、服务端输出重定向编程
(1)RESPONSE.SETREDERECT("URL")浏览器
该方法经过修改HTTP协议的HEADER部分,对浏览器下达重定向指令的,使浏览器显示重定向网页的内容. 安全
response.sendRedirect("http://localhost:7001/index.html");
(2)下面的方法也能改变HTTP HEADER属性,它的原理和 1 是同样的.
服务器
<% response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); String newLocn="/index.html"; response.setHeader("Location",newLocn); % >
(3)采用<JSP:FORWORD> cookie
该方法是利用服务器端先将数据输出到缓冲区的机制,在把缓冲区的内容发送到客户端以前,原来的不发送,改成发送该页面的内容,若是在<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;i++) { out.println("@@@@@@@@@@@@@@@@@"); } %>
2. 采用方法(1),(2)request中的变量(经过request.setAttribute()保存到request中的值)不能在新的页面中采用,采用方法(3)能. 综上,咱们应该采用(1),(2)重定向比较好。
4、JSP中正确应用类:
代码(1)
<jsp:useBean id="test" scope="request" class="demo.com.testdemo"> </jsp:useBean> <% test.print("this is use java bean"); testdemo td= new testdemo(); td.print("this is use new"); %>
代码(2)
demo.com.testdemo test = (demo.com.testdemo)request.getAttribute("test"); if (test == null) { try { test = (demo.com.testdemo) java.beans.Beans.instantiate(getClass().getClassLoader(),"demo.com.testdemo"); } catch (Exception _beanException) { throw new weblogic.utils.NestedRuntimeException("cannot instantiate 'demo.com.testdemo'",_beanException); } request.setAttribute("test", test); out.print(" "); } out.print(" "); test.print("this is use java bean"); testdemo td= new testdemo(); td.print("this is use new");
5、JSP的调试
java.lang.NullPointerException String a = null; a.substring(0,1);
为避免这种异常最好在对变量操做以前检查看它是否为NULL值.如:
<% String ss=Session.getAttribute("NAME") if isnull(ss) { } else { } %>
String str1="ABCD"; String str2="ABCD"; (或 String str2="AB"+"CD"; ) if (str1==str2) out.print("yes"); else out.print("no"); 结果是"yes"。 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"。 String str1=new String("ABCD"); String str2=new String("ABCD"); if (str1.compareTo(str2)==0) out.print("yes"); else out.print("no"); 结果是"yes"。
(4)防止JSP或SERVLET中的输出被浏览器保存在缓冲区中:
浏览器在默认状况下会把浏览过的网页保存在缓冲区中,在调试时,通常不但愿这样.把下面的脚本加入程序中,就可防止JSP或SERVLET中的输出被浏览器保存在缓冲区中
<% response.setHeader("Cache-Control","no-store"); //HTTP 1.1 response.setHeader("Pragma","no-cache"); //HTTP 1.0 response.setDateHeader ("Expires", 0); //prevents caching at the proxy server %>
在IE中也可经过设置实现:把/工具/INTERNET选项/常规/设置/的检察所存页面的较新版本,设为每次访问该页时都检查.
6、COOKIE
public class cookie { public String getDomain() //返回该COOKIE的有效域 public int getMaxAge() //返回该COOKIE的有效期,单位为秒 public String getName() //返回该COOKIE的名称 public String getPath() //返回该COOKIE的有效路径 public boolean getSecure() //返回该COOKIE的安全设置 public String getValue() //返回该COOKIE的值 public void setDomain(java.lang.String pattern) //设置该COOKIE的有效域 public void setMaxAge(int expiry) //设置该COOKIE的有效期,单位为秒 public void setPath(java.lang.String uri) //设置该COOKIE的有效路径 public void setSecure(boolean flag) //设置该COOKIE的安全设置 public void setValue(java.lang.String newValue) //设置该COOKIE的值 }
try { Cookie c = new Cookie("mycookie","COOKIE TEST"); response.addCookie(c); } catch(Exception e) { System.out.println(e); }
而后在一个新的JSP文件中:用下面的方法取客户端的COOKIE到cookies中, 若是cookies.length ==0,说明该客户端的浏览器不支持COOKIE
try { Cookie[] cookies = request.getCookies(); if(cookies.length ==0) { System.out.println("not support cookie"); } } catch(Exception e) { System.out.println(e); }
7、JSP和SERVLET的区别: