﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-java 友人帮-文章分类-jsp 【勿忘】</title><link>http://www.blogjava.net/jzone/category/39590.html</link><description>java web, java wap ..My laboratory..</description><language>zh-cn</language><lastBuildDate>Sun, 13 Jun 2010 02:00:10 GMT</lastBuildDate><pubDate>Sun, 13 Jun 2010 02:00:10 GMT</pubDate><ttl>60</ttl><item><title>JSTL（Java Standard Tag Library） 标记库的使用</title><link>http://www.blogjava.net/jzone/articles/322867.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sat, 05 Jun 2010 18:42:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/322867.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JSTL是由JCP(Java Community Process)所制定的标准规范，它主要提供给Java Web开发人员一个标准通用的标签函数库。l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JSTL所提供的标签函数库主要分为五大类：&#216;&nbsp;&nbsp;&nbsp;&nbs...&nbsp;&nbsp;<a href='http://www.blogjava.net/jzone/articles/322867.html'>阅读全文</a><img src ="http://www.blogjava.net/jzone/aggbug/322867.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2010-06-06 02:42 <a href="http://www.blogjava.net/jzone/articles/322867.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP 实用篇</title><link>http://www.blogjava.net/jzone/articles/281030.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Tue, 09 Jun 2009 14:48:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/281030.html</guid><description><![CDATA[一，重定向页面<br />
<br />
1,response.sendRedirect("url");<br />
2,response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);<br />
response.setHeader("Location",newLocation);<br />
<br />
二，HTML Encoder和URL Encoder<br />
<br />
1,HTML Encoder自定义，原则：''不输出,'&amp;'-"&amp;amp;",'&lt;'-"&amp;lt;",'&gt;'-"gt;",'"'-"&amp;quot;"<br />
2,URLEncoder 在java.net包中有定义<br />
原型：public static String encode(String s)<br />
例如：URLEncoder.encode("http://wwww.aaa.com/sss.jsp?name=小鬼")<br />
<br />
三，在JSP中读写文件<br />
<br />
1，用FileOutputStream初始化PrintWriter,然后用print或者println方法写文件<br />
PrintWriter pw=new PrintWriter(new FileOutputStream("file1.txt"));<br />
pw.println("Hello world!");<br />
pw.close();//若有错误thow IOException<br />
<br />
用FileWriter初始化PrintWriter,然后用print或者println方法写文件<br />
File f=new File("file1.txt");<br />
PrintWriter pw=new PrintWriter(new FileWriter(f));<br />
pw.print("Hello world!\n");<br />
pw.close();<br />
2，用InputStreamReader或者FileReader初始化BufferedReader,然后用readLine()方法读取文件<br />
BufferedReader br=new BufferedReader(new FileReader("file1.txt"));<br />
String rt=br.readLine();//结尾为null<br />
br.close();<br />
3，用FileWriter初始化PrintWriter,然后用pint或者println方法添加文件<br />
PrintWriter pw=new PrintWriter(new FileWriter("file1.txt"),true);<br />
4，import java.io.*;<br />
File f=new File(request.getRealPath(""),"file1.txt");<br />
boolean f.exists();<br />
f.delete();f.createNewFile();<br />
<br />
File d=new File(request.getRealPath(""));<br />
boolean d.exists();<br />
d.delete();d.mkdir();<br />
<br />
request.getRealPath("url");//虚拟目录映射为实际目录<br />
request.getRealPath("./");//网页所在的目录<br />
request.getRealPath("../");//网页所在目录的上一层目录<br />
<br />
File f=new File("path","file1.txt");<br />
f.getName();<br />
f.isFile();<br />
f.isDirectory();<br />
f.canRead();<br />
f.canWrite();<br />
f.isHidden();<br />
f.lastModified;<br />
f.createNewFile();<br />
f.length();<br />
<br />
File d=new File("path");<br />
File list[]=d.listFiles();//list是一个File数组<br />
for(int i=0;i&lt;list.length;i++)out.println(list[i].getName());<br />
<br />
FileReader fr=new FileReader("path"+"\\file1.txt");<br />
if(fr.read()==-1)//空文件<br />
fr.close();<br />
fr.read(int i)//读取i个字符，-1如果不再有数据<br />
//用BufferedReader可以一次读取一行数据<br />
fr.skip(int i);//略过i个字符<br />
<br />
<br />
在引用parseInt等函数的时候，出错是NumberFormatException等<br />
Random获得随机数，<br />
Random rd=new Random((new Date()).getTime());<br />
int p=Math.abs(rd.nextInt())%s;//s为0到的范围<br />
<br />
四，URL重组、表单隐藏域Cookie<br />
<br />
1,这些是用来弥补HTTP协议无状态特征的技术（Sessions技术）的一部分<br />
2，URL重组是用Get方法向服务器发送的信息&#8220;?param1=value1&amp;param2=value2&amp;...&amp;paramn=valuen&#8221;<br />
如果服务器已经在超链接上面作了session标记，那么客户端通过这个走超链接发送请来时就会包含此标记<br />
3，form中的&lt;input type=hidden name="key1" value="value1" /&gt;也可以像URL重组那样使用。<br />
4，Cookie对象<br />
Cookie <span id="google-navclient-hilite" style="color: black; background-color: yellow">c</span>=new Cookie("key", "value");<br />
response.addCookie(<span id="google-navclient-hilite" style="color: black; background-color: yellow">c</span>);<br />
<br />
Cookie[] <span id="google-navclient-hilite" style="color: black; background-color: yellow">c</span>=request.getCookies();<br />
<span id="google-navclient-hilite" style="color: black; background-color: yellow">c</span>.<span id="google-navclient-hilite" style="color: black; background-color: cyan">setMaxAge</span>(int k);//k以秒为单位<br />
一般浏览器能放20个Cookie<br />
<br />
五，session对象<br />
<br />
1，session对象不仅仅能放String数据，还能放复杂的对象。<br />
2，session.putValue("key1",Object1);<br />
Object o=session.getValue("key1");<br />
<br />
六，处理JSP中的中文问题<br />
<br />
1，ASCII码<br />
8bit存储，0~31和127是控制字符，32～126是可见字符。<br />
2，GB2312<br />
两个8bit表示。前一个127～255，以区分ASCII码。<br />
3，Unicode<br />
可以将世界上几十种文字编码统一在同一种编码机制下。以16bit为单位存储。0x0000~0xffff<br />
4，ISO-8859-1 或称为Latin-1,8859-1。在Unicode所占的值域为0~255,低位为ASCII扩展到0～255，然后在高位补上0x00,组成16bit（此处不太懂）。<br />
5，字节和unicode Java内核是unicode,class文件也是。但是流却是采用的byte方式。char为unicode方式，byte是字节方式。转换函数：sun.io里面：<br />
public static ByteToCharConverter getDefault();//获取系统使用的编码方式。<br />
public static ByteToCharConverter getConverter(String encoding);<br />
ByteToCharConverter <span id="google-navclient-hilite" style="color: black; background-color: yellow">c</span>=New ByteToCharConverter(["encoding"]);<br />
Byte[] s=<span id="google-navclient-hilite" style="color: black; background-color: yellow">c</span>.convertAll(Char[] d);<br />
也可以 Char[] d=<span id="google-navclient-hilite" style="color: black; background-color: yellow">c</span>.converterAll(Byte[] s);<br />
6,一些函数：<br />
Integer.toHexString(int i);<br />
String s;s.getBytes();<br />
String(byte[]);String(byte[],encoding);//constructors<br />
//关于Unicode编码打算单独写一篇<br />
<br />
七，获取JVM属性值<br />
<br />
Properties props=System.getProperties();<br />
Enumeration enum=props.propertyNames(); //key枚举<br />
key=(String)enum.nextElement();<br />
String s=(String)props.getProperty(key);<br />
<br />
八，JSP错误处理<br />
<br />
1，所有可被throw和catch的Exception对象都继承自Throwable。Exception应该被catch才对;Error对象也是继承自Throwable，只是不应该catch，而的结束程序。<br />
2，catch序列针对的Exception应该从低级到高级才对。<br />
3，转译错误和客户端端请求错误。jsp源程序错误、import路径不正确等会在生成Servlet Class文档时产生转译错误(500)。在执行Servlet Class时客户端请求错误会被catch。<br />
4，错误产生时，可以jsp:forward来控制，但更好是用errorPage来处理。也可以throw new Exception("errMsg")。<br />
<br />
 <img src ="http://www.blogjava.net/jzone/aggbug/281030.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-06-09 22:48 <a href="http://www.blogjava.net/jzone/articles/281030.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP 隐式对象</title><link>http://www.blogjava.net/jzone/articles/281027.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Tue, 09 Jun 2009 14:41:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/281027.html</guid><description><![CDATA[<p><img alt="" src="http://www.blogjava.net/images/blogjava_net/jzone/I200905/yinshiduixiang.jpg" border="0" /><br />
使用隐式对象注意：<br />
1.简化了JSP 页面开发，<br />
2.隐式对象名称是JAVA的保留字，<br />
3.隐式对象不需要再去实例化由JSP内部实现和管理的内部对象，4.<br />
通过隐式对象来访问网页的动态内容，JSP隐式对象是web容器加载的一组类。对照个图解，看下下面我摘的一篇文章。详细的：<br />
<font face="Courier New"><strong>① out - javax.servlet.jsp.jspWriter</strong> <br />
&nbsp;&nbsp; out对象用于把结果输出到网页上。</font> </p>
<p><font face="Courier New">方法：<br />
1. void clear() ;<br />
&nbsp;&nbsp; 清除输出缓冲区的内容，但是不输出到客户端。</font> </p>
<p><font face="Courier New">2. void clearBuffer() ;<br />
&nbsp;&nbsp; 清除输出缓冲区的内容，并输出到客户端。</font> </p>
<p><font face="Courier New">3. void close() ;<br />
&nbsp;&nbsp; 关闭输出流，清除所有内容。</font> </p>
<p><font face="Courier New">4. void flush() ;<br />
&nbsp;&nbsp; 输出缓冲区里面的数据。</font> </p>
<p><font face="Courier New">5. int getBufferSize() ;<br />
&nbsp;&nbsp; 获取以kb为单位的目前缓冲区大小。</font> </p>
<p><font face="Courier New">6. int getRemaining() ;<br />
&nbsp;&nbsp; 获取以kb为单位的缓冲区中未被占用的空间大小。</font> </p>
<p><font face="Courier New">7. boolean isAutoFlush() ;<br />
&nbsp;&nbsp; 是否自动刷新缓冲区。</font> </p>
<p><font face="Courier New">8. void newLine() ;<br />
&nbsp;&nbsp; 输出一个换行字符。</font> </p>
<p><font face="Courier New">9. void print( boolean b ) ;<br />
&nbsp;&nbsp; void print( char c ) ;<br />
&nbsp;&nbsp; void print( char[] s ) ;<br />
&nbsp;&nbsp; void print( double d ) ;<br />
&nbsp;&nbsp; void print( float f ) ;<br />
&nbsp;&nbsp; void print( int i ) ;<br />
&nbsp;&nbsp; void print( long l ) ;<br />
&nbsp;&nbsp; void print( Object obj ) ;<br />
&nbsp;&nbsp; void print( String s ) ;<br />
&nbsp;&nbsp; 将指定类型的数据输出到Http流，不换行。</font> </p>
<p><font face="Courier New">10. void println( boolean b ) ;<br />
&nbsp;&nbsp;&nbsp; void println( char c ) ;<br />
&nbsp;&nbsp;&nbsp; void println( char[] s ) ;<br />
&nbsp;&nbsp;&nbsp; void println( double d ) ;<br />
&nbsp;&nbsp;&nbsp; void println( float f ) ;<br />
&nbsp;&nbsp;&nbsp; void println( int i ) ;<br />
&nbsp;&nbsp;&nbsp; void println( long l ) ;<br />
&nbsp;&nbsp;&nbsp; void println( Object obj ) ;<br />
&nbsp;&nbsp;&nbsp; void println( String s ) ;<br />
&nbsp;&nbsp;&nbsp; 将指定类型的数据输出到Http流，并输出一个换行符。<br />
&nbsp;&nbsp;&nbsp; <br />
11. Appendable append( char c ) ;<br />
&nbsp;&nbsp;&nbsp; Appendable append( CharSequence cxq, int start, int end ) ;<br />
&nbsp;&nbsp;&nbsp; Appendable append( CharSequence cxq ) ;<br />
&nbsp;&nbsp;&nbsp; 将一个字符或者实现了CharSequence接口的对象添加到输出流的后面。</font> </p>
<p><font face="Courier New">成员：<br />
int DEFAULT_BUFFER = 0&nbsp;&nbsp;&nbsp; - 缺省缓冲区大小<br />
int NO_BUFFER = -1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - writer是否处于缓冲输出状态<br />
int UNBOUNDED_BUFFER = -2 - 是否限制缓冲区大小</font> </p>
<p><br />
<font face="Courier New"><strong>② request - javax.servlet.http.HttpServletRequest<br />
</strong>&nbsp;&nbsp; request对象包含所有请求的信息，如请求的来源、标头、cookies和请求相关的参数值等。</font> </p>
<p><font face="Courier New">方法：<br />
1. Object getAttribute( String name ) ;<br />
&nbsp;&nbsp; 返回由name指定的属性值，该属性不存在时返回null。</font> </p>
<p><font face="Courier New">2. Enumeration getAttributeNames() ;<br />
&nbsp;&nbsp; 返回request对象的所有属性名称的集合。</font> </p>
<p><font face="Courier New">3. String getAuthType() ;<br />
&nbsp;&nbsp; 返回用来保护servlet的认证方法的名称，未受保护时返回null。</font> </p>
<p><font face="Courier New">4. String getCharacterEncoding() ;<br />
&nbsp;&nbsp; 返回请求中的字符编码方法，可以在response对象中设置。</font> </p>
<p><font face="Courier New">5. int getContentLength() ;<br />
&nbsp;&nbsp; 返回请求的BODY的长度，不能确定长度时返回-1。可以在response中设置。</font> </p>
<p><font face="Courier New">6. String getContentType() ;<br />
&nbsp;&nbsp; 返回在response中定义的内容类型。</font> </p>
<p><font face="Courier New">7. String getContentPath() ;<br />
&nbsp;&nbsp; 返回请求的路径。</font> </p>
<p><font face="Courier New">8. Cookie[] getCookies() ;<br />
&nbsp;&nbsp; 返回客户端所有的Cookie的数组。</font> </p>
<p><font face="Courier New">9. Enumeration getHeaderNames() ;<br />
&nbsp;&nbsp; 返回所有HTTP头的名称的集合。</font> </p>
<p><font face="Courier New">10. Enumeration getHeaders( String name ) ;<br />
&nbsp;&nbsp;&nbsp; 返回指定HTTP头的所有值的集合。</font> </p>
<p><font face="Courier New">11. String getHeader( String name ) ;<br />
&nbsp;&nbsp;&nbsp; 返回指定名称的HTTP头的信息。</font> </p>
<p><font face="Courier New">12. long getDateHeader( String name ) ;<br />
&nbsp;&nbsp;&nbsp; 返回指定名称的Data类型的HTTP头的信息。</font> </p>
<p><font face="Courier New">13. int getIntHeader( String name ) ;<br />
&nbsp;&nbsp;&nbsp; 返回指定名称的Int类型的HTTP头的信息。</font> </p>
<p><font face="Courier New">14. ServletInputStream getInputStream() ;<br />
&nbsp;&nbsp;&nbsp; 返回请求的输入流。</font> </p>
<p><font face="Courier New">15. Locale getLocale() ;<br />
&nbsp;&nbsp;&nbsp; 返回当前页的Locale对象，可以在response中设定。</font> </p>
<p><font face="Courier New">16. Enumeration getLocales() ;<br />
&nbsp;&nbsp;&nbsp; 返回请求中所有的Locale对象的集合。</font> </p>
<p><font face="Courier New">17. String getLocalName() ;<br />
&nbsp;&nbsp;&nbsp; 获取响应请求的服务器端主机名。</font> </p>
<p><font face="Courier New">18. String getLocalAddr() ;<br />
&nbsp;&nbsp;&nbsp; 获取响应请求的服务器端地址。</font> </p>
<p><font face="Courier New">19. int getLocalPort() ;<br />
&nbsp;&nbsp;&nbsp; 获取响应请求的服务器端端口</font> </p>
<p><font face="Courier New">20. String getMethod() ;<br />
&nbsp;&nbsp;&nbsp; 获取客户端向服务器端发送请求的方法(GET、POST)。</font> </p>
<p><font face="Courier New">21. String getParameter( String name ) ;<br />
&nbsp;&nbsp;&nbsp; 获取客户端发送给服务器端的参数值。</font> </p>
<p><font face="Courier New">22. Map getParameterMap() ;<br />
&nbsp;&nbsp;&nbsp; 该方法返回包含请求中所有参数的一个Map对象。</font> </p>
<p><font face="Courier New">23. Enumeration getParameterNames() ;<br />
&nbsp;&nbsp;&nbsp; 返回请求中所有参数的集合。</font> </p>
<p><font face="Courier New">24. String[] getParameterValues( String name ) ;<br />
&nbsp;&nbsp;&nbsp; 获得请求中指定参数的所有值。</font> </p>
<p><font face="Courier New">25. String getQueryString() ;<br />
&nbsp;&nbsp;&nbsp; 返回get方法传递的参数字符串，该方法不分解出单独的参数。</font> </p>
<p><font face="Courier New">26. String getPathInfo() ;<br />
&nbsp;&nbsp;&nbsp; 取出请求中处于ServletPath和QueryString之间的额外信息。</font> </p>
<p><font face="Courier New">27. String getPathTranslated() ;<br />
&nbsp;&nbsp;&nbsp; 返回用getPathInfo()方法取得的路径信息的实际路径。</font> </p>
<p><font face="Courier New">28. String getProtocol() ;<br />
&nbsp;&nbsp;&nbsp; 返回请求使用的协议。可以是HTTP1.1或者HTTP1.0。</font> </p>
<p><font face="Courier New">29. BufferedReader getReader() ;<br />
&nbsp;&nbsp;&nbsp; 返回请求的输入流对应的Reader对象，该方法和getInputStream()方法在一个页面中只能调用一个。</font> </p>
<p><font face="Courier New">30. String getRemoteAddr() ;<br />
&nbsp;&nbsp;&nbsp; 获取发出请求的客户端IP地址。</font> </p>
<p><font face="Courier New">31. String getRemoteHost() ;<br />
&nbsp;&nbsp;&nbsp; 获取发出请求的客户端主机名</font> </p>
<p><font face="Courier New">32. String getRemoteUser() ;<br />
&nbsp;&nbsp;&nbsp; 返回经过客户端验证的用户名，未经验证返回null。</font> </p>
<p><font face="Courier New">33. int getRemotePort() ;<br />
&nbsp;&nbsp;&nbsp; 返回发出请求的客户端主机端口。</font> </p>
<p><font face="Courier New">34. String getRealPath( String path ) ;<br />
&nbsp;&nbsp;&nbsp; 返回给定虚拟路径的物理路径。</font> </p>
<p><font face="Courier New">35. RequestDispatcher getRequestDispatcher( String path ) ;<br />
&nbsp;&nbsp;&nbsp; 按给定的路径生成资源转向处理适配器对象。</font> </p>
<p><font face="Courier New">36. String getRequestedSessionId() ;<br />
&nbsp;&nbsp;&nbsp; 返回请求的session的标识。</font> </p>
<p><font face="Courier New">37. String RequestURI() ;<br />
&nbsp;&nbsp;&nbsp; 返回发出请求的客户端地址，但是不包括请求的参数字符串。</font> </p>
<p><font face="Courier New">38. StringBuffer getRequestURI() ;<br />
&nbsp;&nbsp;&nbsp; 返回响应请求的服务器端地址</font> </p>
<p><font face="Courier New">39. String getScheme() ;<br />
&nbsp;&nbsp;&nbsp; 获取协议名称，缺省值为HTTP协议。</font> </p>
<p><font face="Courier New">40. String getServerName() ;<br />
&nbsp;&nbsp;&nbsp; 返回响应请求的服务器名称。</font> </p>
<p><font face="Courier New">41. String getServletPath() ;<br />
&nbsp;&nbsp;&nbsp; 获取客户端所请求的脚本文件的文件路径。</font> </p>
<p><font face="Courier New">42. int getServerPort() ;<br />
&nbsp;&nbsp;&nbsp; 获取响应请求的服务器端主机端口号。</font> </p>
<p><font face="Courier New">43. void removeAttribute( String name ) ;<br />
&nbsp;&nbsp;&nbsp; 在属性列表中删除指定名称的属性。</font> </p>
<p><font face="Courier New">44. void setAttribute( String name, Object value ) ;<br />
&nbsp;&nbsp;&nbsp; 在属性列表中添加/删除指定的属性。</font> </p>
<p><font face="Courier New">45. void setCharacterEncoding( String name ) ;<br />
&nbsp;&nbsp;&nbsp; 设置请求的字符编码格式。</font> </p>
<p><font face="Courier New">46. HttpSession getSession() ;<br />
&nbsp;&nbsp;&nbsp; HttpSession getSession( boolean create ) ;<br />
&nbsp;&nbsp;&nbsp; 获取session，如果create为true，在无session的情况下创建一个。<br />
&nbsp;&nbsp;&nbsp; <br />
47. boolean isRequestedSessionIdFromCookie() ;<br />
&nbsp;&nbsp;&nbsp; 检查请求的会话ID是否为通过Cookie传入。</font> </p>
<p><font face="Courier New">48. boolean isRequestedSessionIdFromURL() ;<br />
&nbsp;&nbsp;&nbsp; 检查请求的会话ID是否为通过URL传入。</font> </p>
<p><font face="Courier New">49. boolean isRequestedSessionIdValid() ;<br />
&nbsp;&nbsp;&nbsp; 检查请求的会话ID是否仍然有效。</font> </p>
<p><font face="Courier New">50. boolean isSecure() ;<br />
&nbsp;&nbsp;&nbsp; 检查请求是否使用安全链接，如果HTTPS等。</font> </p>
<p><font face="Courier New">51. boolean isUserInRole( String role ) ;<br />
&nbsp;&nbsp;&nbsp; 检查已经通过验证的用户是否在是role所指定的角色。</font> </p>
<p><font face="Courier New">52. Principal getUserPrincipal() ;<br />
&nbsp;&nbsp;&nbsp; 返回包含用户登陆名的一个java.security.Principal对象。</font> </p>
<p><font face="Courier New">成员：<br />
String BASIC_AUTH = "BASIC"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - <br />
String CLIENT_CERT_AUTH = "CLIENT_CERT" - <br />
String DIGEST_AUTH = "DIGEST"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - <br />
String FORM_AUTH = "FORM"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - </font></p>
<p><br />
<font face="Courier New"><strong>③ response - javax.servlet.http.HttpServletResponse</strong> <br />
&nbsp;&nbsp; response对象主要将JSP容器处理后的结果传回到客户端。</font> </p>
<p><font face="Courier New">方法：<br />
1. void addCookie( Cookie cookie ) ;<br />
&nbsp;&nbsp; 添加一个Cookie对象，保存客户端信息。</font> </p>
<p><font face="Courier New">2. void addDateHeader( String name, long value ) ;<br />
&nbsp;&nbsp; 添加一个日期类型的HTTP头信息，覆盖同名的HTTP头信息。</font> </p>
<p><font face="Courier New">3. void addHeader( String name, String value ) ;<br />
&nbsp;&nbsp; 添加一个HTTP头，覆盖同名的旧HTTP头。</font> </p>
<p><font face="Courier New">4. void addIntHeader( String name, int value ) ;<br />
&nbsp;&nbsp; 添加一个整型的HTTP头，覆盖同名的旧HTTP头。</font> </p>
<p><font face="Courier New">5. boolean containsHeader( String name ) ;<br />
&nbsp;&nbsp; 判断指定的HTTP头是否存在。</font> </p>
<p><font face="Courier New">6. String encodeRedirectURL( String url ) ;<br />
&nbsp;&nbsp; 对sendRedirect()方法使用的URL进行编码。</font> </p>
<p><font face="Courier New">7. String encodeURL( String url ) ;<br />
&nbsp;&nbsp; 将URL予以编码，回传包含session ID的URL。<br />
&nbsp;&nbsp; <br />
8. void flushBuffer() ;<br />
&nbsp;&nbsp; 强制把当前缓冲区的内容发送到客户端。</font> </p>
<p><font face="Courier New">9. int getBufferSize() ;<br />
&nbsp;&nbsp; 取得以kb为单位的缓冲区大小。</font> </p>
<p><font face="Courier New">10. String getCharacterEncoding() ;<br />
&nbsp;&nbsp;&nbsp; 获取响应的字符编码格式。</font> </p>
<p><font face="Courier New">11. String getContentType() ;<br />
&nbsp;&nbsp;&nbsp; 获取响应的类型。</font> </p>
<p><font face="Courier New">12. Locale getLocale() ;<br />
&nbsp;&nbsp;&nbsp; 获取响应的Locale对象。</font> </p>
<p><font face="Courier New">13. ServletOutputStream getOutputStream() ;<br />
&nbsp;&nbsp;&nbsp; 返回客户端的输出流对象。</font> </p>
<p><font face="Courier New">14. PrintWriter getWriter() ;<br />
&nbsp;&nbsp;&nbsp; 获取输出流对应的writer对象。</font> </p>
<p><font face="Courier New">15. boolean isCommitted() ;<br />
&nbsp;&nbsp;&nbsp; 判断服务器端是否已经将数据输出到客户端。</font> </p>
<p><font face="Courier New">16. void reset() ;<br />
&nbsp;&nbsp;&nbsp; 清空buffer中的所有内容。</font> </p>
<p><font face="Courier New">17. void resetBuffer() ;<br />
&nbsp;&nbsp;&nbsp; 情况buffer中所有的内容，但是保留HTTP头和状态信息。</font> </p>
<p><font face="Courier New">18. void sendError( int xc, String msg ) ;<br />
&nbsp;&nbsp;&nbsp; void sendError( int xc ) ;<br />
&nbsp;&nbsp;&nbsp; 发送错误，包括状态码和错误信息。</font> </p>
<p><font face="Courier New">19. void sendRedirect( String locationg ) ;<br />
&nbsp;&nbsp;&nbsp; 把响应发送到另外一个位置进行处理。</font> </p>
<p><font face="Courier New">20. void setBufferSize( int size ) ;<br />
&nbsp;&nbsp;&nbsp; 设置以kb为单位的缓冲区大小。</font> </p>
<p><font face="Courier New">21. void setCharacterEncoding( String charset ) ;<br />
&nbsp;&nbsp;&nbsp; 设置响应使用的字符编码格式。</font> </p>
<p><font face="Courier New">22. void setContentLength( int length ) ;<br />
&nbsp;&nbsp;&nbsp; 设置响应的BODY长度。</font> </p>
<p><font face="Courier New">23. void setContentType( String type ) ;<br />
&nbsp;&nbsp;&nbsp; 设置响应的类型。</font> </p>
<p><font face="Courier New">24. void setDateHeader( String name, long value ) ;<br />
&nbsp;&nbsp;&nbsp; 设置指定名称的Data类型的HTTP头的值。</font> </p>
<p><font face="Courier New">25. void setHeader( String name, String value ) ;<br />
&nbsp;&nbsp;&nbsp; 设置指定名称的HTTP头的值。</font> </p>
<p><font face="Courier New">26. void setIntHeader( String name, int value ) ;<br />
&nbsp;&nbsp;&nbsp; 设置指定名称的int类型的HTTP头的值。</font> </p>
<p><font face="Courier New">27. void setStatus( int xc ) ;<br />
&nbsp;&nbsp;&nbsp; 设置响应状态码，新值会覆盖当前值。</font> </p>
<p><font face="Courier New">成员(HTTP状态码)：<br />
int SC_CONTINUE = 100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int SC_SWITCHING_PROTOCOLS = 101<br />
int SC_OK = 200&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int SC_NON_AUTHORITATIVE_INFORMATION = 203<br />
int SC_ACCEPTED = 202&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int SC_CREATED = 201<br />
int SC_NO_CONTENT = 204&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int SC_RESET_CONTENT = 205<br />
int SC_PARTIAL_CONTENT = 206&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int SC_MULTIPLE_CHOICES = 300<br />
int SC_MOVED_PERMANENTLY = 301&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int SC_MOVED_TEMPORARILY = 302<br />
int SC_FOUND = 302&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int SC_SEE_OTHER = 303<br />
int SC_NOT_MODIFIED = 304&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int SC_USE_PROXY = 305<br />
int SC_TEMPORARY_REDIRECT = 307&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int SC_BAD_REQUEST = 400<br />
int SC_UNAUTHORIZED = 401&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int SC_PAYMENT_REQUIRED = 402<br />
int SC_FORBIDDEN = 403&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int SC_NOT_FOUND = 404<br />
int SC_METHOD_NOT_ALLOWED = 405&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int SC_NOT_ACCEPTABLE = 406<br />
int SC_PROXY_AUTHENTICATION_REQUIRED = 407 int SC_REQUEST_TIMEOUT = 408<br />
int SC_CONFLICT = 409&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int SC_GONE = 410<br />
int SC_LENGTH_REQUIRED = 411&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int SC_PRECONDITION_FAILED = 412<br />
int SC_REQUEST_ENTITY_TOO_LARGE = 413&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int SC_REQUEST_URI_TOO_LONG = 414<br />
int SC_UNSUPPORTED_MEDIA_TYPE = 415&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416<br />
int SC_EXPECTATION_FAILED = 417&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int SC_INTERNAL_SERVER_ERROR = 500<br />
int SC_NOT_IMPLEMENTED = 501&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int SC_BAD_GATEWAY = 502<br />
int SC_SERVICE_UNAVAILABLE = 503&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int SC_GATEWAY_TIMEOUT = 504<br />
int SC_HTTP_VERSION_NOT_SUPPORTED = 505</font> </p>
<p><br />
<font face="Courier New"><strong>④ session - javax.servlet.http.HttpSession</strong> <br />
&nbsp;&nbsp; session对象表示目前个别用户的会话状态，用来识别每个用户。</font> </p>
<p><font face="Courier New">方法：<br />
1. Object getAttribute( String name ) ;<br />
&nbsp;&nbsp; 获取与指定名字相关联的session属性值。</font> </p>
<p><font face="Courier New">2. Enumeration getAttributeNames() ;<br />
&nbsp;&nbsp; 取得session内所有属性的集合。</font> </p>
<p><font face="Courier New">3. long getCreationTime() ;<br />
&nbsp;&nbsp; 返回session的创建时间，最小单位千分之一秒。</font> </p>
<p><font face="Courier New">4. String getId() ;<br />
&nbsp;&nbsp; 取得session标识。</font> </p>
<p><font face="Courier New">5. long getLastAccessedTime() ;<br />
&nbsp;&nbsp; 返回与当前session相关的客户端最后一次访问的时间，由1970-01-01算起，单位毫秒。</font> </p>
<p><font face="Courier New">6. int getMaxInactiveInterval( int interval ) ;<br />
&nbsp;&nbsp; 返回总时间，以秒为单位，表示session的有效时间(session不活动时间)。-1为永不过期。</font> </p>
<p><font face="Courier New">7. ServletContext getServletContext() ;<br />
&nbsp;&nbsp; 返回一个该JSP页面对应的ServletContext对象实例。</font> </p>
<p><font face="Courier New">8. HttpSessionContext getSessionContext() ;<br />
&nbsp;&nbsp; </font></p>
<p><font face="Courier New">9. Object getValue( String name ) ;<br />
&nbsp;&nbsp; 取得指定名称的session变量值，不推荐使用。</font> </p>
<p><font face="Courier New">10. String[] getValueNames() ;<br />
&nbsp;&nbsp;&nbsp; 取得所有session变量的名称的集合，不推荐使用。</font> </p>
<p><font face="Courier New">11. void invalidate() ;<br />
&nbsp;&nbsp;&nbsp; 销毁这个session对象。</font> </p>
<p><font face="Courier New">12. boolean isNew() ;<br />
&nbsp;&nbsp;&nbsp; 判断一个session是否由服务器产生，但是客户端并没有使用。</font> </p>
<p><font face="Courier New">13. void pubValue( String name, Object value ) ;<br />
&nbsp;&nbsp;&nbsp; 添加一个session变量，不推荐使用。</font> </p>
<p><font face="Courier New">14. void removeValue( String name ) ;<br />
&nbsp;&nbsp;&nbsp; 移除一个session变量的值，不推荐使用。</font> </p>
<p><font face="Courier New">15. void setAttribute( String name, String value ) ;<br />
&nbsp;&nbsp;&nbsp; 设置指定名称的session属性值。</font> </p>
<p><font face="Courier New">16. void setMaxInactiveInterval( int interval ) ;<br />
&nbsp;&nbsp;&nbsp; 设置session的有效期。</font> </p>
<p><font face="Courier New">17. void removeAttribute( String name ) ;<br />
&nbsp;&nbsp;&nbsp; 移除指定名称的session属性。</font> </p>
<p><br />
<font face="Courier New"><strong>⑤ pageContext - javax.servlet.jsp.PageContext</strong> <br />
&nbsp;&nbsp; pageContext对象存储本JSP页面相关信息，如属性、内建对象等。</font> </p>
<p><font face="Courier New">方法：<br />
1. void setAttribute( String name, Object value, int scope ) ;<br />
&nbsp;&nbsp; void setAttribute( String name, Object value ) ;<br />
&nbsp;&nbsp; 在指定的共享范围内设置属性。</font> </p>
<p><font face="Courier New">2. Object getAttribute( String name, int scope ) ;<br />
&nbsp;&nbsp; Object getAttribute( String name ) ;<br />
&nbsp;&nbsp; 取得指定共享范围内以name为名字的属性值。</font> </p>
<p><font face="Courier New">3. Object findAttribute( String name ) ;<br />
&nbsp;&nbsp; 按页面、请求、会话和应用程序共享范围搜索已命名的属性。</font> </p>
<p><font face="Courier New">4. void removeAttribute( String name, int scope ) ;<br />
&nbsp;&nbsp; void removeAttribute( String name ) ;<br />
&nbsp;&nbsp; 移除指定名称和共享范围的属性。</font> </p>
<p><font face="Courier New">5. void forward( String url ) ;<br />
&nbsp;&nbsp; 将页面导航到指定的URL。</font> </p>
<p><font face="Courier New">6. Enumeration getAttributeNamesScope( int scope ) ;<br />
&nbsp;&nbsp; 取得指定共享范围内的所有属性名称的集合。</font> </p>
<p><font face="Courier New">7. int getAttributeScope( String name ) ;<br />
&nbsp;&nbsp; 取得指定属性的共享范围。</font> </p>
<p><font face="Courier New">8. ErrorData getErrorDate() ;<br />
&nbsp;&nbsp; 取得页面的errorData对象。</font> </p>
<p><font face="Courier New">9. Exception getException() ;<br />
&nbsp;&nbsp; 取得页面的exception对象。</font> </p>
<p><font face="Courier New">10. ExpressionEvaluator getExpressionEvaluator() ;<br />
&nbsp;&nbsp;&nbsp; 取得页面的expressionEvaluator对象。</font> </p>
<p><font face="Courier New">11. JspWriter getOut() ;<br />
&nbsp;&nbsp;&nbsp; 取得页面的out对象。</font> </p>
<p><font face="Courier New">12. Object getPage() ;<br />
&nbsp;&nbsp;&nbsp; 取得页面的page对象。</font> </p>
<p><font face="Courier New">13. ServletRequest getRequest() ;<br />
&nbsp;&nbsp;&nbsp; 取得页面的request对象。</font> </p>
<p><font face="Courier New">14. ServletResponse getResponse() ;<br />
&nbsp;&nbsp;&nbsp; 取得页面的response对象。</font> </p>
<p><font face="Courier New">15. ServletConfig getConfig() ;<br />
&nbsp;&nbsp;&nbsp; 取得页面的config对象。</font> </p>
<p><font face="Courier New">16. ServletContext getServletContext() ;<br />
&nbsp;&nbsp;&nbsp; 取得页面的servletContext对象。</font> </p>
<p><font face="Courier New">17. HttpSession getSession() ;<br />
&nbsp;&nbsp;&nbsp; 取得页面的session对象。</font> </p>
<p><font face="Courier New">18. VariableResolver getVariableResolver() ;<br />
&nbsp;&nbsp;&nbsp; 取得页面的variableResolver对象。</font> </p>
<p><font face="Courier New">19. void include( String url, boolean flush ) ;<br />
&nbsp;&nbsp;&nbsp; void include( String url ) ;<br />
&nbsp;&nbsp;&nbsp; 包含其他的资源，并指定是否自动刷新。</font> </p>
<p><font face="Courier New">20. void release() ;<br />
&nbsp;&nbsp;&nbsp; 重置pageContext内部状态，释放所有内部引用。</font> </p>
<p><font face="Courier New">21. void initialize( Servlet servlet, ServletRequest request, ServletResponse response,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String errorPageURL, boolean needSession, int bufferSize, boolean autoFlush ) ;<br />
&nbsp;&nbsp;&nbsp; 初始化未经初始化的pageContext对象。</font> </p>
<p><font face="Courier New">22. BodyContext pushBody() ;<br />
&nbsp;&nbsp;&nbsp; BodyContext pushBody( Writer writer ) ;<br />
&nbsp;&nbsp;&nbsp; 保存当前的out对象，并更新pageContext中page范围内的out对象。</font> </p>
<p><font face="Courier New">23. JspWrite popBody() ;<br />
&nbsp;&nbsp;&nbsp; 取出由pushBody()方法保存的out对象。</font> </p>
<p><font face="Courier New">24. void handlePageException( Exception e ) ;<br />
&nbsp;&nbsp;&nbsp; void handlePageException( Thrwoable t ) ;<br />
&nbsp;&nbsp;&nbsp; </font></p>
<p><font face="Courier New">成员：<br />
int PAGE_SCOPE = 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - 页面共享范围<br />
int REQUEST_SCOPE = 2&nbsp;&nbsp;&nbsp;&nbsp; - 请求共享范围<br />
int SESSION_SCOPE = 3&nbsp;&nbsp;&nbsp;&nbsp; - 会话共享范围<br />
int APPLICATION_SCOPE = 4 - 应用程序共享范围<br />
String PAGE = "javax.servlet.jsp.jspPage"<br />
String PAGECONTEXT = "javax.servlet.jsp.jspPageContext"<br />
String REQUEST = "javax.servlet.jsp.jspRequest"<br />
String RESPONSE = "javax.servlet.jsp.jspResponse"<br />
String CONFIG = "javax.servlet.jsp.jspConfig"<br />
String SESSION = "javax.servlet.jsp.jspSession"<br />
String OUT = "javax.servlet.jsp.jspOut"<br />
String APPLICATION = "javax.servlet.jsp.jspApplication"<br />
String EXCEPTION = "javax.servlet.jsp.jspException"</font> </p>
<p><br />
<font face="Courier New"><strong>⑥ application - javax.servlet.ServletContext</strong> <br />
&nbsp;&nbsp; application主要功用在于取得或更改Servlet的设定。</font> </p>
<p><font face="Courier New">方法：<br />
1. Object getAttribute( String name ) ;<br />
&nbsp;&nbsp; 返回由name指定的application属性。</font> </p>
<p><font face="Courier New">2. Enumeration getAttributes() ;<br />
&nbsp;&nbsp; 返回所有的application属性。</font> </p>
<p><font face="Courier New">3. ServletContext getContext( String uripath ) ;<br />
&nbsp;&nbsp; 取得当前应用的ServletContext对象。</font> </p>
<p><font face="Courier New">4. String getInitParameter( String name ) ;<br />
&nbsp;&nbsp; 返回由name指定的application属性的初始值。</font> </p>
<p><font face="Courier New">5. Enumeration getInitParameters() ;<br />
&nbsp;&nbsp; 返回所有的application属性的初始值的集合。</font> </p>
<p><font face="Courier New">6. int getMajorVersion() ;<br />
&nbsp;&nbsp; 返回servlet容器支持的Servlet API的版本号。</font> </p>
<p><font face="Courier New">7. String getMimeType( String file ) ;<br />
&nbsp;&nbsp; 返回指定文件的类型，未知类型返回null。一般为"text/html"和"image/gif"。</font> </p>
<p><font face="Courier New">8. int getMinorVersion() ;<br />
&nbsp;&nbsp; 返回servlet容器支持的Servlet API的副版本号。</font> </p>
<p><font face="Courier New">9. String getRealPath( String path ) ;<br />
&nbsp;&nbsp; 返回给定虚拟路径所对应物理路径。</font> </p>
<p><font face="Courier New">10. RequestDispatcher getNamedDispatcher( String name ) ;<br />
&nbsp;&nbsp;&nbsp; 为指定名字的Servlet对象返回一个RequestDispatcher对象的实例。</font> </p>
<p><font face="Courier New">11. RequestDispatcher getRequestDispatcher( String path ) ;<br />
&nbsp;&nbsp;&nbsp; 返回一个RequestDispatcher对象的实例。</font> </p>
<p><font face="Courier New">12. URL getResource( String path ) ;<br />
&nbsp;&nbsp;&nbsp; 返回指定的资源路径对应的一个URL对象实例，参数要以"/"开头。</font> </p>
<p><font face="Courier New">13. InputStream getResourceAsStream( String path ) ;<br />
&nbsp;&nbsp;&nbsp; 返回一个由path指定位置的资源的InputStream对象实例。</font> </p>
<p><font face="Courier New">14. Set getResourcePaths( String path ) ;<br />
&nbsp;&nbsp;&nbsp; 返回存储在web-app中所有资源路径的集合。</font> </p>
<p><font face="Courier New">15. String getServerInfo() ;<br />
&nbsp;&nbsp;&nbsp; 取得应用服务器版本信息。</font> </p>
<p><font face="Courier New">16. Servlet getServlet( String name ) ;<br />
&nbsp;&nbsp;&nbsp; 在ServletContext中检索指定名称的servlet。</font> </p>
<p><font face="Courier New">17. Enumeration getServlets() ;<br />
&nbsp;&nbsp;&nbsp; 返回ServletContext中所有servlet的集合。</font> </p>
<p><font face="Courier New">18. String getServletContextName() ;<br />
&nbsp;&nbsp;&nbsp; 返回本web应用的名称。</font> </p>
<p><font face="Courier New">19. Enumeration getServletContextNames() ;<br />
&nbsp;&nbsp;&nbsp; 返回ServletContext中所有servlet的名称集合。</font> </p>
<p><font face="Courier New">20. void log( Exception ex, String msg ) ;<br />
&nbsp;&nbsp;&nbsp; void log( String msg, Throwable t ) ;<br />
&nbsp;&nbsp;&nbsp; void log( String msg ) ;<br />
&nbsp;&nbsp;&nbsp; 把指定的信息写入servlet log文件。</font> </p>
<p><font face="Courier New">21. void removeAttribute( String name ) ;<br />
&nbsp;&nbsp;&nbsp; 移除指定名称的application属性。</font> </p>
<p><font face="Courier New">22. void setAttribute( String name, Object value ) ;<br />
&nbsp;&nbsp;&nbsp; 设定指定的application属性的值。</font> </p>
<p><br />
<font face="Courier New"><strong>⑦ config - javax.servlet.ServletConfig<br />
</strong>&nbsp;&nbsp; config对象用来存放Servlet初始的数据结构。</font> </p>
<p><font face="Courier New">方法：<br />
1. String getInitParameter( String name ) ;<br />
&nbsp;&nbsp; 返回名称为name的促使参数的值。</font> </p>
<p><font face="Courier New">2. Enumeration getInitParameters() ;<br />
&nbsp;&nbsp; 返回这个JSP所有的促使参数的名称集合。</font> </p>
<p><font face="Courier New">3. ServletContext getContext() ;<br />
&nbsp;&nbsp; 返回执行者的servlet上下文。</font> </p>
<p><font face="Courier New">4. String getServletName() ;<br />
&nbsp;&nbsp; 返回servlet的名称。</font> </p>
<p><br />
<font face="Courier New"><strong>⑧ exception - java.lang.Throwable</strong> <br />
&nbsp;&nbsp; 错误对象，只有在JSP页面的page指令中指定isErrorPage="true"后，才可以在本页面使用exception对象。</font> </p>
<p><font face="Courier New">方法：<br />
1. Throwable fillInStackTrace() ;<br />
&nbsp;&nbsp; 将当前stack信息记录到exception对象中。</font> </p>
<p><font face="Courier New">2. String getLocalizedMessage() ;<br />
&nbsp;&nbsp; 取得本地语系的错误提示信息。</font> </p>
<p><font face="Courier New">3. String getMessage()<br />
&nbsp;&nbsp; 取得错误提示信息。</font> </p>
<p><font face="Courier New">4. StackTrackElement[] getStackTrace() ;<br />
&nbsp;&nbsp; 返回对象中记录的call stack track信息。</font> </p>
<p><font face="Courier New">5. Throwable initCause( Throwable cause ) ;<br />
&nbsp;&nbsp; 将另外一个异常对象嵌套进当前异常对象中。<br />
&nbsp;&nbsp; <br />
6. Throwable getCause() ;<br />
&nbsp;&nbsp; 取出嵌套在当前异常对象中的异常。</font> </p>
<p><font face="Courier New">7. void printStackTrace() ;<br />
&nbsp;&nbsp; void printStackTrace( printStream s ) ;<br />
&nbsp;&nbsp; void printStackTrace( printWriter s ) ;<br />
&nbsp;&nbsp; 打印出Throwable及其call stack trace信息。</font> </p>
<p><font face="Courier New">8. void setStackTrace( StackTraceElement[] stackTrace )<br />
&nbsp;&nbsp; 设置对象的call stack trace信息。</font> </p>
<p><br />
<font face="Courier New"><strong>⑨ page - javax.servlet.jsp.HttpJspPage</strong> <br />
&nbsp;&nbsp; page对象代表JSP对象本身，或者说代表编译后的servlet对象，<br />
&nbsp;&nbsp; 可以用( (javax.servlet.jsp.HttpJspPage)page )来取用它的方法和属性。</font> </p>
<img src ="http://www.blogjava.net/jzone/aggbug/281027.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-06-09 22:41 <a href="http://www.blogjava.net/jzone/articles/281027.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP 之 EL（Expression Language）表达式</title><link>http://www.blogjava.net/jzone/articles/280300.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sat, 06 Jun 2009 00:58:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/280300.html</guid><description><![CDATA[首先看一下EL的历史：
<p class="bodycopy" align="left" bodycopy?>Sun Microsystems 在 1997 年下半年推出了 Servlet API，将它定位为 CGI 开发人员使用的一种功能强大的工具，这些开发人员正在寻找比 CGI（通用网关接口）编程更高效和轻便的优秀解决方案。但是，开发人员很快就发现 Servlet API 有其自身的缺点，从代码的可维护性和可扩展性方面来看，该解决方案难以实施。在某种程度上，这种缺点促使团队开发一种允许在 HTML 中嵌入 Java 代码的解决方案 — JavaServer Pages (JSP) 因此而出现。</p>
<p class="bodycopy">不久以后，开发人员意识到将表达与商务逻辑混合在一起的复杂 JSP 页不易于理解和维护。不能编写 scriplet 的页面制作人员所面临的另一个问题是由于标准标记集而带来的 JSP 限制。这些限制使得难点变成利用 JSP 实施自定义标记的机制来创建 JSP 自定义标记。 </p>
<p class="bodycopy">JSP 标准标记库 (JSTL) 是自定义标记库的集合，它将许多 JSP 应用程序通用的核心功能封装为简单的标记。它不再需要使用 JSP scriptlet<br />
和表达式，而使用表达式的更高级语法。它还实现了通用目的的功能，如迭代和条件化、数据管理格式化、XML 操作、数据库访问、国际化和对本地化信息敏感的格式化标记以及 SQL 标记。JSTL 1.0 推出了 EL 的概念，但只限于 JSTL 标记。在 JSP 2.0 中，您可以使用带模板文本的 EL，甚至可以通过 javax.servlet.jsp.el 获得编程方式的访问。el简化了在JSP中访问变量的方式，降低静态HTML与Java代码的耦合<br />
<br />
EL&nbsp; ----JSP 2.0利器之一<br />
在我们了解 JSTL 如何适应环境以及与 JSTL 表达式语言相关的限制以后，我们来看 JSP 2.0 的重要优点之一 — JSP 表达式语言 (EL)。我们将特别涉及到以下内容：<br />
</p>
<h2><a name="mteeisjp"></a>在无脚本的 JSP 页中支持 EL 的机制</h2>
<p class="bodycopy">&nbsp;<br />
在使用页面指示时，您可以通过将 isELEnabled 指示的值相应地设为&#8220;true&#8221;或&#8220;false&#8221;，指定是否支持 EL
<p class="bodycopy">&nbsp;</p>
<h2><a name="els"></a>表达式语言语法</h2>
<p class="bodycopy">JSP 表达式语言允许页面制作人员使用简单语法访问组件，如： <br />
<pre>${expr}</pre>
<p class="bodycopy">在以上的语法中，expr 代表有效的表达式。必须注意，该表达式可以与静态文本混合，还可以与其他表达式结合成更大的表达式。 <br />
<br />
<h2><a name="veitje"></a>JSP EL 中的有效表达式</h2>
<p class="bodycopy">有效表达式可以包含文字、操作符、变量（对象引用）和函数调用。我们将分别了解这些有效表达式中的每一种： <br />
<br />
${ &#8220;Hello world&#8221; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//输出字符串常量<br />
${ str }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//输出字符串变量str的值<br />
${ 3 + 2 }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//输出3+2的结果<br />
${ user.name }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//输出user对象的name属性<br />
${ user[&#8220;name&#8221;] }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//同上<br />
${ sessionScope[&#8220;user&#8221;].name } //同上
<h3>文字 </h3>
<p class="bodycopy">JSP 表达式语言定义可在表达式中使用的以下文字：<br />
<br />
<h2 class="parahead1"></h2>
<p class="bodycopy">
<table cellspacing="0" cellpadding="5" width="949" border="1">
    <tbody>
        <tr align="center" bgcolor="#cccccc">
            <th class="bodycopy">文字</th>
            <th class="bodycopy">文字的值</th>
        </tr>
        <tr>
            <td class="bodycopy">
            <p class="bodycopy">Boolean</p>
            </td>
            <td class="bodycopy">
            <p class="bodycopy">true 和 false</p>
            </td>
        </tr>
        <tr>
            <td class="bodycopy">
            <p class="bodycopy">Integer</p>
            </td>
            <td class="bodycopy">
            <p class="bodycopy">与 Java 类似。可以包含任何正数或负数，例如 24、-45、567</p>
            </td>
        </tr>
        <tr>
            <td class="bodycopy">
            <p class="bodycopy">Floating Point</p>
            </td>
            <td class="bodycopy">
            <p class="bodycopy">与 Java 类似。可以包含任何正的或负的浮点数，例如 -1.8E-45、4.567</p>
            </td>
        </tr>
        <tr>
            <td class="bodycopy">
            <p class="bodycopy">String</p>
            </td>
            <td class="bodycopy">
            <p class="bodycopy">任何由单引号或双引号限定的字符串。对于单引号、双引号和反斜杠，使用反斜杠字符作为转义序列。必须注意，如果在字符串两端使用双引号，则单引号不需要转义。</p>
            </td>
        </tr>
        <tr>
            <td class="bodycopy">Null</td>
            <td class="bodycopy">null</td>
        </tr>
    </tbody>
</table>
</p>
<p class="bodycopy">让我们来看一些使用文字作为有效表达式的示例：<br />
<br />
<pre>${false} <%-- evaluates to false --%><br />
${3*8)</pre>
<h3>操作符</h3>
<p class="bodycopy">JSP 表达式语言提供以下操作符，其中大部分是 Java 中常用的操作符：</p>
<h2 class="parahead1"></h2>
<p class="bodycopy">
<table cellspacing="0" cellpadding="5" border="1">
    <tbody>
        <tr align="center" bgcolor="#cccccc">
            <th class="bodycopy">术语</th>
            <th class="bodycopy">定义</th>
        </tr>
        <tr>
            <td class="bodycopy">
            <p>算术型</p>
            </td>
            <td class="bodycopy">
            <p>+、-（二元）、*、/、div、%、mod、-（一元）</p>
            </td>
        </tr>
        <tr>
            <td class="bodycopy">
            <p>逻辑型</p>
            </td>
            <td class="bodycopy">
            <p>and、&amp;&amp;、or、||、!、not</p>
            </td>
        </tr>
        <tr>
            <td class="bodycopy">
            <p>关系型</p>
            </td>
            <td class="bodycopy">
            <p>==、eq、!=、ne、<lt>、gt、&lt;=、le、&gt;=、ge。可以与其他值进行比较，或与布尔型、字符串型、整型或浮点型文字进行比较。</p>
            </td>
        </tr>
        <tr>
            <td class="bodycopy">
            <p>空</p>
            </td>
            <td class="bodycopy">
            <p>空操作符是前缀操作，可用于确定值是否为空。</p>
            </td>
        </tr>
        <tr>
            <td class="bodycopy">条件型</td>
            <td class="bodycopy">A ?B :C。根据 A 赋值的结果来赋值 B 或 C。 </td>
        </tr>
    </tbody>
</table>
</p>
<p class="bodycopy">让我们来看一些使用操作符作为有效表达式的示例： </p>
<pre>${ (6 * 5) + 5 } <%-- evaluates to 35 --%><br />
${empty name}</pre>
<h3>隐式对象</h3>
<p class="bodycopy">JSP 表达式语言定义了一组隐式对象，其中许多对象在 JSP scriplet 和表达式中可用：</p>
<p class="bodycopy">
<table cellspacing="0" cellpadding="5" width="959" border="1">
    <tbody>
        <tr align="center" bgcolor="#cccccc">
            <th class="bodycopy">术语</th>
            <th class="bodycopy">定义</th>
        </tr>
        <tr>
            <td class="bodycopy">
            <p>pageContext</p>
            </td>
            <td class="bodycopy">
            <p class="bodycopy">JSP 页的上下文。它可以用于访问 JSP 隐式对象，如请求、响应、会话、输出、servletContext 等。例如，${pageContext.response} 为页面的响应对象赋值。</p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p class="bodycopy">此外，还提供几个隐式对象，允许对以下对象进行简易访问： </p>
<h2 class="parahead1"></h2>
<p class="bodycopy">
<table cellspacing="0" cellpadding="5" width="961" border="1">
    <tbody>
        <tr align="center" bgcolor="#cccccc">
            <th class="bodycopy">术语</th>
            <th class="bodycopy">定义</th>
        </tr>
        <tr>
            <td class="bodycopy">
            <p class="bodycopy">param</p>
            </td>
            <td class="bodycopy">
            <p class="bodycopy">将请求参数名称映射到单个字符串参数值（通过调用 ServletRequest.getParameter (String name) 获得）。getParameter (String) 方法返回带有特定名称的参数。表达式 $(param.name) 相当于 request.getParameter (name)。</p>
            </td>
        </tr>
        <tr>
            <td class="bodycopy">
            <p class="bodycopy">paramValues</p>
            </td>
            <td class="bodycopy">
            <p class="bodycopy">将请求参数名称映射到一个数值数组（通过调用 ServletRequest.getParameter (String name) 获得）。它与 param 隐式对象非常类似，但它检索一个字符串数组而不是单个值。表达式 ${paramvalues.name) 相当于 request.getParamterValues(name)。</p>
            </td>
        </tr>
        <tr>
            <td class="bodycopy">
            <p class="bodycopy">header</p>
            </td>
            <td class="bodycopy">
            <p class="bodycopy">将请求头名称映射到单个字符串头值（通过调用 ServletRequest.getHeader(String name) 获得）。表达式 ${header.name} 相当于 request.getHeader(name)。</p>
            </td>
        </tr>
        <tr>
            <td class="bodycopy">
            <p class="bodycopy">headerValues</p>
            </td>
            <td class="bodycopy">
            <p class="bodycopy">将请求头名称映射到一个数值数组（通过调用 ServletRequest.getHeaders(String) 获得）。它与头隐式对象非常类似。表达式 ${headerValues.name} 相当于 request.getHeaderValues(name)。</p>
            </td>
        </tr>
        <tr>
            <td class="bodycopy">cookie</td>
            <td class="bodycopy">将 cookie 名称映射到单个 cookie 对象。向服务器发出的客户端请求可以获得一个或多个 cookie。表达式 ${cookie.name.value} 返回带有特定名称的第一个 cookie 值。如果请求包含多个同名的 cookie，则应该使用 ${headerValues.name} 表达式。</td>
        </tr>
        <tr>
            <td class="bodycopy">initParam</td>
            <td class="bodycopy">将上下文初始化参数名称映射到单个值（通过调用 ServletContext.getInitparameter(String name) 获得）。 </td>
        </tr>
    </tbody>
</table>
</p>
<p class="bodycopy">除了上述两种类型的隐式对象之外，还有些对象允许访问多种范围的变量，如 Web 上下文、会话、请求、页面：</p>
<h2 class="parahead1"></h2>
<p class="bodycopy">
<table cellspacing="0" cellpadding="5" width="963" border="1">
    <tbody>
        <tr align="center" bgcolor="#cccccc">
            <th class="bodycopy">术语</th>
            <th class="bodycopy">定义</th>
        </tr>
        <tr>
            <td class="bodycopy">
            <p class="bodycopy">pageScope</p>
            </td>
            <td class="bodycopy">
            <p class="bodycopy">将页面范围的变量名称映射到其值。例如，EL 表达式可以使用 ${pageScope.objectName} 访问一个 JSP 中页面范围的对象，还可以使用 ${pageScope.objectName.attributeName} 访问对象的属性。</p>
            </td>
        </tr>
        <tr>
            <td class="bodycopy">
            <p class="bodycopy">requestScope</p>
            </td>
            <td class="bodycopy">
            <p class="bodycopy">将请求范围的变量名称映射到其值。该对象允许访问请求对象的属性。例如，EL 表达式可以使用 ${requestScope.objectName} 访问一个 JSP 请求范围的对象，还可以使用 ${requestScope.objectName.attributeName} 访问对象的属性。</p>
            </td>
        </tr>
        <tr>
            <td class="bodycopy">
            <p class="bodycopy">sessionScope</p>
            </td>
            <td class="bodycopy">
            <p class="bodycopy">将会话范围的变量名称映射到其值。该对象允许访问会话对象的属性。例如：</p>
            <p class="bodycopy"><% session.put (name", "John Doe"); %><br />
            $sessionScope.name} <%-- evaluates to John Doe --%><br />
            <%= session.get("name"); %><%-- This is an equivalent scripting expression --%></p>
            </td>
        </tr>
        <tr>
            <td class="bodycopy">
            <p class="bodycopy">applicationScope</p>
            </td>
            <td class="bodycopy">
            <p class="bodycopy">将应用程序范围的变量名称映射到其值。该隐式对象允许访问应用程序范围的对象。</p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p class="bodycopy">必须注意，当表达式根据名称引用这些对象之一时，返回的是相应的对象而不是相应的属性。例如：即使现有的 pageContext 属性包含某些其他值，${pageContext} 也返回 PageContext 对象。&nbsp;&nbsp; <a href="http://www.oracle.com/technology/global/cn/sample_code/tutorials/jsp20/simpleel.html">http://www.oracle.com/technology/global/cn/sample_code/tutorials/jsp20/simpleel.html</a> </p>
 <img src ="http://www.blogjava.net/jzone/aggbug/280300.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-06-06 08:58 <a href="http://www.blogjava.net/jzone/articles/280300.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsp基础速成精华（摘）</title><link>http://www.blogjava.net/jzone/articles/271821.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Wed, 20 May 2009 15:10:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/271821.html</guid><description><![CDATA[
		<div class="real_blog" id="veryContent" style="TEXT-INDENT: 2em; HEIGHT: auto! important">
				<table id="blogContentTable" style="TABLE-LAYOUT: fixed; WIDTH: 100%; POSITION: relative" cellspacing="0" cellpadding="0">
						<tbody>
								<tr>
										<td style="WORD-WRAP: break-word" valign="top">
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>摘自 csdn：<a href="http://blog.csdn.net/anysky130/archive/2008/04/04/2252055.aspx">http://blog.csdn.net/anysky130/archive/2008/04/04/2252055.aspx</a>  anysky130的专栏</p>
		<p>Servlet三个要素:</p>
		<p>1.必须继承自HttpServlet</p>
		<p>2.必须实现doGet()或者doPost()</p>
		<p>3.必须在web.xml中配置Servlet<br />&lt;servlet&gt;<br />&lt;servlet-name&gt; &lt;/servlet-name&gt;<br />&lt;servlet-class&gt; &lt;/servlet-class&gt;<br />&lt;/servlet&gt;<br />&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt; &lt;/servlet-name&gt;<br />&lt;url-pattern&gt; &lt;/url-pattern&gt;<br />&lt;/servelt-mapping&gt;</p>
		<p>HttpServeltRrequest:请求对象<br />getParameter():获得表单元素的值<br />getAttribute():获得request范围中的属性值<br />setAttribute():设置reqeust范围中的属性值<br />setCharacterEncoding():设置字符编码<br />HttpSerletResponse:相应对象<br />sendRedirect():外部跳转<br />getWriter():获得输出流对象<br />setContentType("text/html; charset=utf-8"):设置相应内容格式和编码</p>
		<p>四种会话跟踪方式:<br />1.Session<br />HttpSession session = request.getSession();<br />session.setAttribute("name", "zhangsan");<br />session.setAttribute("pwd", "aaa");<br />String name = (String) session.getAttribute("name");<br />2.cookie:<br />//创建Cookie<br />Cookie cookie = new Cookie("name", "zhangsan");<br />//设置Cookie的超时时间<br />cookie.setMaxAge(24 * 60 * 60 *60);<br />//把Cookie发送到客户端<br />response.addCookie(cookie);<br />//得到客户端发送的Cookie<br />Cookie [] cookies = request.getCookies();<br />for(int i=0; i &lt;cookies.length; i++) {<br />   Cookie temp = cookies;<br />   String key = temp.getName();<br />   String value = temp.getValue();<br />}<br />3.隐藏表单域<br />&lt;input type="hidden" name="name" value="zhangsan" /&gt;<br />request.getParameter("name");<br />4.Url重写<br />问号传参<br />LoginServlet?username=zhangsan&amp;pwd=123<br />String name = request.getParameter("username");<br />String pwd =request.getPareameter("pwd");<br />内部跳转:<br />LoginServlet<br />request.getRequestDispatcher("index.jsp").forward(request, resposne);<br />外部跳转:<br />response.sendRedirect("index.jsp");<br />内部跳转是一次请求和一次响应<br />外部跳转是两次请求和两次响应<br />ServletContext:Servlet上下文对象<br />它是一个公共区域,可以被所有的客户端共享<br />setAttribute():向公共区域里放入数据<br />getAttribute():从公共区域里取数据<br />二:<br />三:三个标准范围:request, session, ServletContext<br />   共同点:都有setAttribute(), getAttribute()<br />   区别:范围不同,request  &lt; session  &lt; servletContext<br />四:四种会话跟踪方式<br />五:服务器上的五大对象<br />   request, response, servlet, session, servletContext<br />   <br />Jsp:Java Server Page<br />页面构成:7种元素<br />1.静态内容:html<br />2.指令:page, include, taglib:<br />&lt;%@ 指令名 属性1="属性值1" 属性2="属性值2" %&gt;<br />3.表达式: &lt;%=表达式 %&gt;<br />4.Scriptlet &lt;% Java代码 %&gt;<br />5.声明: &lt;%! %&gt;:变量和方法<br />6.动作: &lt;jsp:动作名 属性="属性值"&gt; &lt;/jsp:动作名&gt;<br />7.注释:<br />客户端看不到的: &lt;%-- --%&gt;<br />客户端可以看到的: &lt;!-- --&gt;</p>
		<p>Jsp的执行过程:<br />1.转译:Jsp---&gt;Servlet<br />2.编译:Servlet----&gt;.class<br />3.执行:.class<br />第一次访问jsp的时候响应速度较慢,后面请求时响应速度快<br />脚本:<br />表达式: &lt;%= %&gt;<br />Scriptlet: &lt;% %&gt;<br />声明: &lt;%! %&gt;<br />指令:<br />page:language, import, errorPage, isErrorpage<br />include:file<br />taglib:uri:指定标签库描述符的路径 prefix:指定标签的前缀<br />隐式对象:<br />分类:<br />1.输入和输出对象:request(HttpServletRequest), <br />                 response(HttpServletResponse), <br />                 out(JspWriter), servlet中的out是PrintWriter<br />2.作用域通信对象:pageContext, request, <br />                 session(HttpSession),<br />                 application(ServletContext)<br />3.Servlet对象:page(this), config<br />4.错误对象:exception<br />    <br />JavaBean:<br />一个标准的JavaBean有三个条件<br />1.共有的类<br />2.具有不带参数的公共的构造方法<br />3.具有set()和get()方法<br />4.私有属性<br />Jsp中的标准动作:<br />1.useBean:创建JavaBean的一个实例<br />&lt;jsp:useBean id="stu" class="com.westaccp.test.Student" scope="page/session/application/request" /&gt;<br />2.setProperty:给JavaBean的属性赋值<br />&lt;jsp:setProperty name="stu" property="stuName" value="zhangsan" /&gt;<br />&lt;jsp:setProperty name="stu" property="stuName" param="txtName" /&gt;<br />value和param不能同时使用<br />偷懒的方法: &lt;jsp:setProperty name="stu" property="*" /&gt;<br />这个时候需要注意的是,表单元素的名字必须和JavaBean的属性值<br />一模一样<br />3.getProperty:获得JvaBean的属性值<br />&lt;jsp:getProperty name="stu" property="stuName" /&gt;<br />4.forward:内部跳转,相当于request.getRequestDispatcher().forward(request, response);<br />&lt;jsp:forward page="index.jsp" /&gt;<br />5.include:包含<br />&lt;jsp:include page="header.jsp" flush="true" /&gt;<br />表达式语言:<br />EL: Expression Language<br />语法格式: ${表达式 }<br />表示式 = 运算符 + 操作数<br />运算符:跟Java比较,多了一个empty, 少了一个赋值运算符<br />${empty ""} : true<br />${empty null} :true<br />操作数:<br />--&gt;常量:布尔型(true/false), 整型, 浮点型, 字符串(可以用'', 还可以用""), Null<br />--&gt;变量:<br />    1.指的是放在四个标准范围里的属性(page, request, session, application)<br />    2.在编准范围内的搜索顺序:page--&gt;request---&gt;session---&gt;application<br />    3.怎么取得变量值:点运算符., 还以用[]<br />     &lt;% <br />      request.setAttribute("name", "lisi");<br />    %&gt;<br />    ${requestScope.name}<br />    或者<br />    ${requestScope["name"]}<br />--&gt;隐式对象<br />    1.pageContext:通过它可以访问request, session, servletContext<br />    2.跟范围由关的:pageScope, requestScope, sessionScope, applicationScope<br />    3.跟输入有关的:param, paramValues<br />    4.其他的:header, cookie, headervalues,<br />EL表达式适用的场合:<br />1.可以在静态文本中使用<br />2.与自定义标签结合使用<br />3.和JavaBean结合使用<br />&lt;jsp:userBean id="stu" class="com.westaccp.test.Student" scope="session" /&gt;<br />&lt;jsp:setProperty name="stu" property="stuName" value="hello" /&gt;<br />${stu.stuName}<br />自定义标签:<br />1.标签处理程序实现<br />---&gt;实现:继承自BodyTagSupport或者TagSupport<br />          一般会重写doStartTag(), doEndTag(), doAfterBody()<br />---&gt;描述:在标签库描述符文件中描述(.tld)<br />     &lt;taglib&gt;<br />        &lt;tlib-version&gt;1.0 &lt;/tlib-version&gt;<br />        &lt;jsp-version&gt;2.0 &lt;/jsp-version&gt;<br />        &lt;short-name&gt;simpletag &lt;/short-name&gt;<br />    <br />        &lt;tag&gt;<br />         &lt;name&gt;showbody &lt;/name&gt;<br />         &lt;tag-class&gt;com.westaccp.test.ShowBodyTag &lt;/tag-class&gt;<br />         &lt;body-content&gt;empty/jsp &lt;/body-content&gt;<br />         &lt;attribute&gt;<br />          &lt;name&gt;color &lt;/name&gt;<br />         &lt;/attribute&gt;<br />        &lt;/tag&gt;<br />     &lt;/taglib&gt;<br />---&gt;使用: &lt;%@ taglib uri="WEB-INF/mytag.tld" prefix="my" %&gt;<br />           &lt;my:showbody /&gt;<br />2.标签文件<br />---&gt;实现和描述<br />     在.tag文件中实现<br />     设置主体内容: &lt;%@ body-content="empty/scriptless" %&gt;<br />     设置属性: &lt;%@ attribute name="name" required="true" rtexprvalue="true" %&gt;<br />     有主体内容: &lt;jsp:doBody scope="session" var="theBody" /&gt;<br />      &lt;%<br />        String body = (String) session.getAttribute("theBody");<br />     %&gt;<br />---&gt;使用<br />     WEB-INF/tags/sayhello.tag<br />      &lt;%@ taglib tagdir="/WEB-INF/tags/" prefix="you" %&gt;<br />      &lt;you:sayhello /&gt;<br />     <br />标准标签库:<br />1.核心标签库<br />--&gt;通用:<br />     set: &lt;c:set var="" value="" scope="" /&gt;<br />     out: &lt;c:out value="" /&gt;<br />     remove:  &lt;c:remove var="" scope="" /&gt;<br />--&gt;条件:<br />     if: &lt;c:if test=""&gt;..... &lt;/c:if&gt; <br />     choose:  &lt;c:choose&gt;<br />             &lt;c:when test=""&gt;... &lt;/c:when&gt;<br />             &lt;c:when test=""&gt;... &lt;/c:when&gt;<br />             &lt;c:when test=""&gt;... &lt;/c:when&gt;<br />                .....<br />                 &lt;c:otherwise&gt;... &lt;/otherwise&gt;           <br />              &lt;/c:choose&gt;<br />--&gt;迭代:<br />    forEach: &lt;forEach var="" items="" varStatus="" begin="" end=""&gt;<br />    foTokens: &lt;foTodens var="" items="" delim=",; |"&gt; &lt;/foTodens&gt;<br />    Java,C#;SQL &amp;brvbarC<br />2.I18N与格式化标签库<br />--&gt;setLocale:设置本地区域<br />--&gt;bundle:设置资源包<br />--&gt;setBundle:设置资源包<br />--&gt;message:输出消息<br />3.SQL标签库<br />--&gt;setDataSource:设置数据源,用于获得与数据库的连接<br />--&gt;query:执行查询<br />--&gt;update:执行增,删,改<br />--&gt;transaction:事务<br />--&gt;param:参数<br />4.XML标签库<br />过滤器:<br />生命周期:<br />1.实例华:<br />2.初始化:init()<br />3.过滤:doFilter()<br />4.销毁:destroy()<br />5.不可用<br />配置:<br />&lt;filter&gt;<br />&lt;filter-name&gt; &lt;/filter-name&gt;<br />&lt;filter-class&gt; &lt;/filter-class&gt;<br />&lt;/filter&gt;<br />&lt;filter-mapping&gt;<br />&lt;filter-name&gt; &lt;/filter-name&gt;<br />&lt;url-pattern&gt; &lt;/url-pattern&gt;<br />&lt;/filter-mapping&gt;<br />几个重要的接口:<br />1.Filter:init(), doFilter(), destroy()<br />2.FilterChain: doFilter(request, response)<br />3.FilterConfig:getFilterName(), getInitParameter(),<br />过滤器链:---&gt;1---&gt;2---&gt;3---&gt;Servlet 请求<br />         &lt;----1 &lt;---2 &lt;---3 &lt;---        响应<br />        <br />MvC设计模式<br />1.ModelI:jsp+JavaBean<br />2.ModelII:jsp+Servlet+JavaBean<br />          jsp---view<br />          servlet---control<br />          javabean---model<br />MVC:<br />M--Model:模型:访问后台数据库<br />V--view:视图:展示<br />C--control:控制器:控制程序流程<br />ModelII和MVC的关系:<br />MVC是一种设计模式,ModelII它是MVC的一种具体的实现  <br /></p>
<img src ="http://www.blogjava.net/jzone/aggbug/271821.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-05-20 23:10 <a href="http://www.blogjava.net/jzone/articles/271821.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>