﻿<?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-记忆好很大程度决定能力!-文章分类-jsp技术</title><link>http://www.blogjava.net/microlab4321/category/24887.html</link><description>适时总结是一种很好的彌补方法!</description><language>zh-cn</language><lastBuildDate>Thu, 16 Aug 2007 10:55:48 GMT</lastBuildDate><pubDate>Thu, 16 Aug 2007 10:55:48 GMT</pubDate><ttl>60</ttl><item><title>JSP学习经验总结（转） </title><link>http://www.blogjava.net/microlab4321/articles/137304.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Thu, 16 Aug 2007 08:05:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/137304.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/137304.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/137304.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/137304.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/137304.html</trackback:ping><description><![CDATA[一、JSP工作原理&nbsp;<br><br>在一个JSP文件第一次被请求时，JSP引擎把该JSP文件转换成为一个servlet。而这个引擎本身也是一个servlet，在JSWDK或WEBLOGIC中，它就是JspServlet。&nbsp;JSP引擎先把该JSP文件转换成一个Java源文件，在转换时如果发现jsp文件有任何语法错误，转换过程将中断，并向服务端和客户端输出出错信息；如果转换成功，&nbsp;JSP引擎用javac把该Java源文件编译成相应的class文件。然后创建一个该SERVLET的实例，该SERVLET的jspInit()方法被执行，jspInit()方法在servlet的生命周期中只被执行一次。然后jspService()方法被调用来处理客户端的请求。对每一个请求，JSP引擎创建一个新的线程来处理该请求。如果有多个客户端同时请求该JSP文件，则JSP引擎会创建多个线程。每个客户端请求对应一个线程。以多线程方式执行可大大降低对系统的资源需求,提高系统的并发量及响应时间.但应该注意多线程的编程限制，由于该servlet始终驻于内存，所以响应是非常快的。&nbsp;如果.jsp文件被修改了，服务器将根据设置决定是否对该文件重新编译，如果需要重新编译，则将编译结果取代内存中的servlet，并继续上述处理过程。&nbsp;虽然JSP效率很高，但在第一次调用时由于需要转换和编译而有一些轻微的延迟。&nbsp;此外，如果在任何时候如果由于系统资源不足的原因，JSP引擎将以某种不确定的方式将servlet从内存中移去。当这种情况发生时jspDestroy()方法首先被调用,&nbsp;然后servlet实例便被标记加入"垃圾收集"处理。&nbsp;jspInit()及jspDestory()格式如下：可在jspInit()中进行一些初始化工作,如建立与数据库的连接，或建立网络连接，从配置文件中取一些参数等，在jspDestory()中释放相应的资源。&nbsp;&nbsp;<br><br>&lt;%!&nbsp;<br>public&nbsp;void&nbsp;jspInit()&nbsp;<br>{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("jspinit");&nbsp;&nbsp;<br>}&nbsp;<br>&nbsp;&nbsp;<br>%&gt;&nbsp;<br>&nbsp;&nbsp;<br>&lt;%!&nbsp;<br>public&nbsp;void&nbsp;jspDestory()&nbsp;<br>{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("jspDestory");&nbsp;&nbsp;<br>}&nbsp;<br>%&gt;&nbsp;<br><br>二、服务端的输出缓冲区&nbsp;<br><br>缺省情况下:服务端要输出到客户端的内容,不直接写到客户端,而是先写到一个输出缓冲区中.只有在下面三中情况下，才会把该缓冲区的内容输出到客户端上：&nbsp;<br><br><br>该JSP网页已完成信息的输出&nbsp;&nbsp;<br>输出缓冲区已满&nbsp;&nbsp;<br>JSP中调用了out.flush()或response.flushbuffer()&nbsp;&nbsp;<br>输出缓冲区的大小可以用:或response.setBufferSize()设置,如下：&nbsp;&nbsp;<br>设置输出缓冲区的大小为1KB。或response.setBufferSize(1);&nbsp;&nbsp;<br>设置输出缓冲区的大小为0，即不缓冲。或response.setBufferSize(0);&nbsp;&nbsp;<br>用response.getBufferSize()或out.getBufferSize()可取的输出缓冲区的大小,单位为字节.&nbsp;用response.isCommitted()可检查看服务端是否已将数据输出到客户端.&nbsp;如果返回值是TRUE则已将数据输出到客户端,是FALSE则还没有.&nbsp;&nbsp;<br><br>三、服务端输出重定向&nbsp;<br><br>有以下3种方法可以做到输出重定向:&nbsp;&nbsp;<br><br>RESPONSE.SETREDERECT("URL")&nbsp;该方法通过修改HTTP协议的HEADER部分,对浏览器下达重定向指令的,使浏览器显示重定向网页的内容.&nbsp;response.sendRedirect("http://localhost:7001/index.html");&nbsp;&nbsp;<br>下面的方法也能改变HTTP&nbsp;HEADER属性，它的原理和&nbsp;1&nbsp;是一样的.&nbsp;&nbsp;<br>&lt;%&nbsp;&nbsp;<br>response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);&nbsp;&nbsp;<br>String&nbsp;newLocn="/index.html";&nbsp;&nbsp;<br>response.setHeader("Location",newLocn);&nbsp;&nbsp;<br>%&nbsp;&gt;&nbsp;&nbsp;<br>采用&lt;JSP:FORWORD&gt;&nbsp;该方法是利用服务器端先将数据输出到缓冲区的机制,在把缓冲区的内容发送到客户端之前,原来的不发送,改为发送该页面的内容,如果在&lt;JSP:FORWORD&gt;之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,这一点应该特别注意.&nbsp;如下面的例子中(1)会输出index.html的内容，2&nbsp;不会输出index.html的内容，而是输出out.println("@@@@@@@@@@@@@@@@@");&nbsp;中的内容,并且在服务端会抛出:java.lang.IllegalStateException:&nbsp;Response&nbsp;already&nbsp;committed&nbsp;异常，但客户端没有任何错误输出。&nbsp;&nbsp;<br>(1)&nbsp;<br>&lt;%@page&nbsp;buffer="1kb"%&gt;&nbsp;<br>&nbsp;&nbsp;<br>&lt;%&nbsp;<br>long&nbsp;i=0;&nbsp;<br>&nbsp;&nbsp;<br>for(i=0;i&lt;10;i++)&nbsp;<br>{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println("@@@@@@@@@@@@@@@@@");&nbsp;<br>}&nbsp;<br>%&gt;&nbsp;<br>&nbsp;&nbsp;<br>&lt;jsp:forward&nbsp;page="./index.html"&nbsp;/&gt;&nbsp;<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>(2)&nbsp;<br>&lt;%@page&nbsp;buffer="1kb"%&gt;&nbsp;<br>&nbsp;&nbsp;<br>&lt;%&nbsp;<br>long&nbsp;i=0;&nbsp;<br>&nbsp;&nbsp;<br>for(i=0;i&lt;600;i++)&nbsp;<br>{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println("@@@@@@@@@@@@@@@@@");&nbsp;<br>}&nbsp;<br>%&gt;&nbsp;<br>&nbsp;&nbsp;<br><br>说明：&nbsp;<br>1.&nbsp;方法(1),(2)可以使用变量表示重定向的地址;方法(3)不能使用变量表示重定向的地址。&nbsp;<br>String&nbsp;add="./index.html";&nbsp;&nbsp;<br>&lt;jsp:forward&nbsp;page=&nbsp;add&nbsp;/&gt;&nbsp;&nbsp;<br>无法重定向到index.html中去&nbsp;&nbsp;<br><br>String&nbsp;add=http://localhost:7001/index.html&nbsp;&nbsp;<br>response.sendRedirect(add);&nbsp;&nbsp;<br>可以重定向到http://localhost:7001/index.html中去。&nbsp;&nbsp;<br><br>2.&nbsp;采用方法(1),(2)request中的变量(通过request.setAttribute()保存到request中的值)不能在新的页面中采用,采用方法(3)能.&nbsp;综上,我们应该采用(1),(2)重定向比较好.&nbsp;&nbsp;<br><br><br>四、JSP中正确应用类:&nbsp;&nbsp;<br><br>应该把类当成JAVA&nbsp;BEAN来用，不要在&lt;%&nbsp;%&gt;&nbsp;中直接使用.&nbsp;如下的代码(1)经过JSP引擎转化后会变为代码(2):&nbsp;<br>从中可看出如果把一个类在JSP当成JAVA&nbsp;BEAN&nbsp;使用,JSP会根据它的作用范围把它保存到相应的内部对象中.&nbsp;<br>如作用范围为request,则把它保存到request对象中.并且只在第一次调用(对象的值为null)它时进行实例化.&nbsp;而如果在&lt;%&nbsp;%&gt;中直接创建该类的一个对象,则每次调用JSP时,都要重新创建该对象,会影响性能.&nbsp;&nbsp;<br><br>代码(1)&nbsp;<br>&lt;jsp:useBean&nbsp;id="test"&nbsp;scope="request"&nbsp;class="demo.com.testdemo"&gt;&nbsp;<br>&lt;/jsp:useBean&gt;&nbsp;<br>&nbsp;&nbsp;<br>&lt;%&nbsp;<br>test.print("this&nbsp;is&nbsp;use&nbsp;java&nbsp;bean");&nbsp;<br>&nbsp;&nbsp;<br>testdemo&nbsp;td=&nbsp;new&nbsp;testdemo();&nbsp;<br>td.print("this&nbsp;is&nbsp;use&nbsp;new");&nbsp;<br>%&gt;&nbsp;<br>&nbsp;&nbsp;<br><br><br>代码(2)&nbsp;<br>demo.com.testdemo&nbsp;test&nbsp;=&nbsp;(demo.com.testdemo)request.getAttribute("test");&nbsp;&nbsp;<br>if&nbsp;(test&nbsp;==&nbsp;null)&nbsp;&nbsp;<br>{&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test&nbsp;=&nbsp;(demo.com.testdemo)&nbsp;java.beans.Beans.instantiate(getClass().getClassLoader(),"demo.com.testdemo");&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch&nbsp;(Exception&nbsp;_beanException)&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;weblogic.utils.NestedRuntimeException("cannot&nbsp;instantiate&nbsp;'demo.com.testdemo'",_beanException);&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.setAttribute("test",&nbsp;test);&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print("\r\n");&nbsp;<br>}&nbsp;&nbsp;<br>out.print("\r\n\r\n\r\n");&nbsp;<br>test.print("this&nbsp;is&nbsp;use&nbsp;java&nbsp;bean");&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>testdemo&nbsp;td=&nbsp;new&nbsp;testdemo();&nbsp;<br>td.print("this&nbsp;is&nbsp;use&nbsp;new");&nbsp;<br><br>&nbsp;&nbsp;<br><br><br><br>五、JSP的调试&nbsp;&nbsp;<br><br>JSP的调试比较麻烦,特别是当bean是在一个session中存在时，更加困难。得从好几个页面开始往里面走才行。通常是用out.println()或System.out.print()来打一大堆的信息来查问题。如果是用jbuilder做开发,它能直接调试JSP.不过更重要的是知道错误产生的原因及解决方法。下面对一些JSP编程常见错误进行分析。&nbsp;&nbsp;<br><br>(1).java.lang.NullPointerException异常&nbsp;<br>一般是对一个为NULL值的变量进行操作引起的.如下面的操作就会抛出&nbsp;<br>java.lang.NullPointerException&nbsp;<br>String&nbsp;a&nbsp;=&nbsp;null;&nbsp;&nbsp;<br>a.substring(0,1);&nbsp;&nbsp;<br>&nbsp;&nbsp;<br>为避免这种异常最好在对变量操作之前检查看它是否为NULL值.如:&nbsp;<br>&lt;%&nbsp;String&nbsp;ss=Session.getAttribute("NAME")&nbsp;&nbsp;<br>if&nbsp;isnull(ss)&nbsp;&nbsp;<br>{&nbsp;&nbsp;<br><br>}&nbsp;&nbsp;<br>else&nbsp;&nbsp;<br>{&nbsp;&nbsp;<br><br>}&nbsp;&nbsp;<br>%&gt;&nbsp;&nbsp;<br><br>(2).JSP是用JAVA写的，所以它是大小写敏感的，用过其他编程语言的人最容易犯这个错误。另外在浏览器的地址栏中输入的访问JSP的地址也是区分大小写的.如http://localhost:7001/demo/t.jsp与http://localhost:7001/Demo/t.jsp是不一样的&nbsp;<br><br>(3).在jsp中判断字符串要使用compareTo方法，不要用==，因为在java中String变量不是一个简单的变量而是一个类实例，不同的方法会得到&nbsp;不同的结果，如下所示：&nbsp;&nbsp;<br><br>　　&nbsp;<br><br>　　String&nbsp;str1="ABCD";&nbsp;&nbsp;<br>　　String&nbsp;str2="ABCD";&nbsp;(或&nbsp;String&nbsp;str2="AB"+"CD";&nbsp;&nbsp;&nbsp;<br>　　if&nbsp;(str1==str2)&nbsp;&nbsp;<br>　　&nbsp;out.print("yes");&nbsp;&nbsp;<br>　　else&nbsp;&nbsp;<br>　　&nbsp;out.print("no");&nbsp;&nbsp;<br>　　结果是"yes"。&nbsp;&nbsp;<br>　&nbsp;&nbsp;<br><br>　　String&nbsp;str1,str2,str3;&nbsp;&nbsp;<br>　　str1="ABCD";&nbsp;&nbsp;<br>　　str2="AB";&nbsp;&nbsp;<br>　　str3=str2+"CD";&nbsp;&nbsp;<br>　　if&nbsp;(str1==str3)&nbsp;&nbsp;<br>　　&nbsp;out.print("yes");&nbsp;&nbsp;<br>　　else&nbsp;&nbsp;<br>　　&nbsp;out.print("no");&nbsp;&nbsp;<br>　　结果是"no"。&nbsp;&nbsp;<br><br><br>String&nbsp;str1=new&nbsp;String("ABCD");&nbsp;&nbsp;<br>　　String&nbsp;str2=new&nbsp;String("ABCD");&nbsp;&nbsp;<br>　　if&nbsp;(str1==str2)&nbsp;&nbsp;<br>　　&nbsp;out.print("yes");&nbsp;&nbsp;<br>　　else&nbsp;&nbsp;<br>　　&nbsp;out.print("no");&nbsp;&nbsp;<br>　　结果是"no"。&nbsp;&nbsp;<br><br><br>String&nbsp;str1=new&nbsp;String("ABCD");&nbsp;&nbsp;<br>　　String&nbsp;str2=new&nbsp;String("ABCD");&nbsp;&nbsp;<br>　　if&nbsp;(str1.compareTo(str2)==0)&nbsp;&nbsp;<br>　　&nbsp;out.print("yes");&nbsp;&nbsp;<br>　　else&nbsp;&nbsp;<br>　　&nbsp;out.print("no");&nbsp;&nbsp;<br>　　结果是"yes"。&nbsp;&nbsp;<br><br>(4)防止JSP或SERVLET中的输出被浏览器保存在缓冲区中:&nbsp;<br>浏览器在默认情况下会把浏览过的网页保存在缓冲区中,在调试时,一般不希望这样.把下面的脚本加入程序中,就可防止JSP或SERVLET中的输出被浏览器保存在缓冲区中&nbsp;&nbsp;<br>&lt;%&nbsp;&nbsp;<br>response.setHeader("Cache-Control","no-store");&nbsp;//HTTP&nbsp;1.1&nbsp;&nbsp;<br>response.setHeader("Pragma","no-cache");&nbsp;//HTTP&nbsp;1.0&nbsp;&nbsp;<br>response.setDateHeader&nbsp;("Expires",&nbsp;0);&nbsp;//prevents&nbsp;caching&nbsp;at&nbsp;the&nbsp;proxy&nbsp;server&nbsp;&nbsp;<br>%&gt;&nbsp;&nbsp;<br>在IE中也可通过设置实现：把/工具/INTERNET选项/常规/设置/的检察所存页面的较新版本,设为每次访问该页时都检查.&nbsp;<br><br><br>六、COOKIE&nbsp;<br><br>HTTP&nbsp;COOKIE实质是服务端与在客户端之间传送的普通HTTP头,可保存也可不保存在客户的硬盘上.如果保存,每一个文件大小不超过4K的文本文件.多个COOKIE可保存到同一个文件中.&nbsp;如果从编程角度来看,在JSP中COOKIE就是JAVA提供的一个类.常用的方法如下所表示，因为客户端可能不接受COOKIE，所以建议不用它，改用SESSION等其他方式。&nbsp;&nbsp;<br><br><br>public&nbsp;class&nbsp;cookie&nbsp;&nbsp;<br>{&nbsp;&nbsp;<br>public&nbsp;String&nbsp;getDomain()&nbsp;//返回该COOKIE的有效域&nbsp;&nbsp;<br>public&nbsp;int&nbsp;getMaxAge()&nbsp;//返回该COOKIE的有效期,单位为秒&nbsp;&nbsp;<br>public&nbsp;String&nbsp;getName()&nbsp;//返回该COOKIE的名称&nbsp;&nbsp;<br>public&nbsp;String&nbsp;getPath()&nbsp;//返回该COOKIE的有效路径&nbsp;&nbsp;<br>public&nbsp;boolean&nbsp;getSecure()&nbsp;//返回该COOKIE的安全设置&nbsp;&nbsp;<br>public&nbsp;String&nbsp;getValue()&nbsp;//返回该COOKIE的值&nbsp;&nbsp;<br>public&nbsp;void&nbsp;setDomain(java.lang.String&nbsp;pattern)&nbsp;//设置该COOKIE的有效域&nbsp;&nbsp;<br>public&nbsp;void&nbsp;setMaxAge(int&nbsp;expiry)&nbsp;//设置该COOKIE的有效期,单位为秒&nbsp;&nbsp;<br>public&nbsp;void&nbsp;setPath(java.lang.String&nbsp;uri)&nbsp;//设置该COOKIE的有效路径&nbsp;&nbsp;<br>public&nbsp;void&nbsp;setSecure(boolean&nbsp;flag)&nbsp;//设置该COOKIE的安全设置&nbsp;&nbsp;<br>public&nbsp;void&nbsp;setValue(java.lang.String&nbsp;newValue)&nbsp;//设置该COOKIE的值&nbsp;&nbsp;<br>}&nbsp;&nbsp;<br>一个COOKIE包含以下五部分:&nbsp;&nbsp;<br><br>NAME/VALUE对,设置该COOKIE的名字及它保存的值&nbsp;&nbsp;<br>COOKIE通常和服务器相关,如果将域设为JAVA.SUN.COM,那么该COOKIE就和这个域相关,只对该网址起作用,当浏览该网址时,浏览器将把该COOKIE的内容发送给服务端,COOKIE是作为HTTP&nbsp;HEADER的一部分被发送的，如果没有设置域,那么COOKIE就只和创建该COOKIE的服务器相关.&nbsp;&nbsp;<br>路径用于指定服务器上可以使用该COOKIE的文件所在的路径,它只对该网址下的该路径下的应用起作用."/"表示服务器上所有目录都可以使用该COOKIE.&nbsp;&nbsp;<br>COOKIE都有一个有效期,有效期默认值为-1,这表示没有保存该COOKIE,当该浏览器退出时,该COOKIE立即失效.&nbsp;&nbsp;<br>安全选项true/false,如果设置为true,那么在服务端与在客户端之间传送该COOKIE的内容时,采用HTTPS协议.&nbsp;&nbsp;<br>如何检查一个客户端是否支持COOKIE的方法:&nbsp;&nbsp;<br>用下面的方法写一个COOKIE到客户端,并确认成功&nbsp;&nbsp;<br>try&nbsp;&nbsp;<br>{&nbsp;&nbsp;<br>Cookie&nbsp;c&nbsp;=&nbsp;new&nbsp;Cookie("mycookie","COOKIE&nbsp;TEST");&nbsp;&nbsp;<br>response.addCookie(c);&nbsp;&nbsp;<br>}&nbsp;&nbsp;<br>catch(Exception&nbsp;e)&nbsp;&nbsp;<br>{&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(e);&nbsp;&nbsp;<br>}&nbsp;&nbsp;<br><br><br>然后在一个新的JSP文件中:用下面的方法取客户端的COOKIE到cookies中,&nbsp;如果cookies.length&nbsp;==0,说明该客户端的浏览器不支持COOKIE&nbsp;&nbsp;<br>try&nbsp;&nbsp;<br>{&nbsp;&nbsp;<br>Cookie[]&nbsp;cookies&nbsp;=&nbsp;request.getCookies();&nbsp;&nbsp;<br>if(cookies.length&nbsp;==0)&nbsp;&nbsp;<br>{&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("not&nbsp;support&nbsp;cookie");&nbsp;&nbsp;<br>}&nbsp;&nbsp;<br>}&nbsp;&nbsp;<br>catch(Exception&nbsp;e)&nbsp;&nbsp;<br>{&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(e);&nbsp;&nbsp;<br>}&nbsp;&nbsp;<br><br><br><br>七、JSP和SERVLET的区别:&nbsp;<br><br>SUN首先发展出SERVLET，其功能比较强劲，体系设计也很先进，只是，它输出HTML语句还是采用了老的CGI方式，是一句一句输出，所以，编写和修改HTML非常不方便。&nbsp;后来SUN推出了类似于ASP的JSP，把JAVA代码嵌套到HTML语句中，这样，就大大简化和方便了网页的设计和修改。ASP，PHP，JSP都是嵌套型的SCRIPT语言。&nbsp;一个分布式系统应分为三层：表示层,业务逻辑层,数据存取层,在J2EE体系结构中,SERVLET用来写业务逻辑层是很强大的，但是对于写表示层就很不方便。JSP则主要是为了方便写表示层而设计的。ENTITY&nbsp;BEAN实现数据存取层，SESSION&nbsp;BEAN实现业务逻辑层。如果是简单的应用系统,可采用JSP+BEANS的结构进行设计,JSP中应该仅仅存放与表示层有关的东西，也就是说，只放输出HTML网页的部份。而所有的数据计算，数据分析，数据库联结处理，统统是属于业务逻辑层，应该放在JAVA&nbsp;BEANS中。通过JSP调用JAVA&nbsp;BEANS，实现两层的整合。&nbsp;实际上，微软的DNA技术，简单说，就是ASP+COM/DCOM技术。与JSP+BEANS完全类似，所有的表示层由ASP完成，所有的业务逻辑由COM/DCOM完成。&nbsp;为什么要采用这些组件技术呢？因为单纯的ASP/JSP语言是非常低效率执行的，如果出现大量用户点击，纯SCRIPT语言很快就到达了他的功能上限，而组件技术就能大幅度提高功能上限，加快执行速度。另外一方面，纯SCRIPT语言将表示层和业务逻辑层混在一起，造成修改不方便，并且代码不能重复利用，采用组件技术就只改组件就可以了。&nbsp;对于复杂的应用，应该采用ENTITY&nbsp;BEAN实现数据存取层，SESSION&nbsp;BEAN实现业务逻辑层，用JSP来调用SESSION&nbsp;BEAN，由SESSION&nbsp;BEAN调用ENTITY&nbsp;BEAN。即采用JSP+EJB来构建一个复杂的分布式系统。它比JSP+BEAN具有更高的吞吐量，可靠性，安全性。综上所述，对简单应用，可采用JSP+BAEN，对复杂的应用系统，应采用JSP+EJB，SERVLET变的无足轻重。用JSP完全可替代它。
<img src ="http://www.blogjava.net/microlab4321/aggbug/137304.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-08-16 16:05 <a href="http://www.blogjava.net/microlab4321/articles/137304.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何解决JSP页面显示乱码问题 </title><link>http://www.blogjava.net/microlab4321/articles/137187.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Thu, 16 Aug 2007 04:15:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/137187.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/137187.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/137187.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/137187.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/137187.html</trackback:ping><description><![CDATA[<p style="TEXT-INDENT: 2em">一、JSP页面显示乱码
<p style="TEXT-INDENT: 2em">二、表单提交中文时出现乱码
<p style="TEXT-INDENT: 2em">三、数据库连接时出现乱码
<p style="TEXT-INDENT: 2em">大家在JSP的开发过程中，经常出现中文乱码的问题，可能一至困扰着您，我现在把我在JSP开发中遇到的中文乱码的问题及解决办法写出来供大家参考。
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em">一、JSP页面显示乱码
<p style="TEXT-INDENT: 2em">下面的显示页面(display.jsp)就出现乱码：<br clear=all>
<p style="TEXT-INDENT: 2em">
<center><ccid_nobr>
<table cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1>
    <tbody>
        <tr>
            <td class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6>
            <pre><ccid_code>&lt;html&gt;
            &lt;head&gt;
            &lt;title&gt;JSP的中文处理&lt;/title&gt;
            &lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;
            &lt;/head&gt;
            &lt;body&gt;
            &lt;%
            out.print("JSP的中文处理");
            %&gt;
            &lt;/body&gt;
            &lt;/html&gt;</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr></center>
<p style="TEXT-INDENT: 2em">对不同的WEB服务器和不同的JDK版本，处理结果就不一样。原因：服务器使用的编码方式不同和浏览器对不同的字符显示结果不同而导致的。解决办法：在JSP页面中指定编码方式(gb2312),即在页面的第一行加上：
<p style="TEXT-INDENT: 2em">
<center><ccid_nobr>
<table cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1>
    <tbody>
        <tr>
            <td class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6>
            <pre><ccid_code>英文代码&lt;%@ page contentType="text/html; charset=gb2312"%&gt;</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr></center>
<p style="TEXT-INDENT: 2em">就可以消除乱码了。完整页面如下：
<p style="TEXT-INDENT: 2em">
<center><ccid_nobr>
<table cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1>
    <tbody>
        <tr>
            <td class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6>
            <pre><ccid_code>&lt;%@ page contentType="text/html; charset=gb2312"%&gt;
            &lt;html&gt;
            &lt;head&gt;
            &lt;title&gt;JSP的中文处理&lt;/title&gt;
            &lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;
            &lt;/head&gt;
            &lt;body&gt;
            &lt;%
            out.print("JSP的中文处理");
            %&gt;
            &lt;/body&gt;
            &lt;/html&gt;</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr></center>
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em">二、表单提交中文时出现乱码
<p style="TEXT-INDENT: 2em">下面是一个提交页面(submit.jsp)，代码如下：
<p style="TEXT-INDENT: 2em">
<center><ccid_nobr>
<table cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1>
    <tbody>
        <tr>
            <td class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6>
            <pre><ccid_code>&lt;html&gt;
            &lt;head&gt;
            &lt;title&gt;JSP的中文处理&lt;/title&gt;
            &lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;
            &lt;/head&gt;
            &lt;body&gt;
            &lt;form name="form1" method="post" action="process.jsp"&gt;
            &lt;div align="center"&gt;
            &lt;input type="text" name="name"&gt;
            &lt;input type="submit" name="Submit" value="Submit"&gt;
            &lt;/div&gt;
            &lt;/form&gt;
            &lt;/body&gt;
            &lt;/html&gt;</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr></center><br><br>
<p style="TEXT-INDENT: 2em">下面是处理页面(process.jsp)代码： <br clear=all>
<p style="TEXT-INDENT: 2em">
<center><ccid_nobr>
<table cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1>
    <tbody>
        <tr>
            <td class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6>
            <pre><ccid_code>&lt;%@ page contentType="text/html; charset=gb2312"%&gt;
            &lt;html&gt;
            &lt;head&gt;
            &lt;title&gt;JSP的中文处理&lt;/title&gt;
            &lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;
            &lt;/head&gt;
            &lt;body&gt;
            &lt;%=request.getParameter("name")%&gt;
            &lt;/body&gt;
            &lt;/html&gt;</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr></center>
<p style="TEXT-INDENT: 2em">如果submit.jsp提交英文字符能正确显示，如果提交中文时就会出现乱码。原因：浏览器默认使用UTF-8编码方式来发送请求，而UTF-8和GB2312编码方式表示字符时不一样，这样就出现了不能识别字符。解决办法:通过request.seCharacterEncoding("gb2312")对请求进行统一编码，就实现了中文的正常显示。修改后的process.jsp代码如下：
<p style="TEXT-INDENT: 2em">
<center><ccid_nobr>
<table cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1>
    <tbody>
        <tr>
            <td class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6>
            <pre><ccid_code>&lt;%@ page contentType="text/html; charset=gb2312"%&gt;
            &lt;%
            request.seCharacterEncoding("gb2312");
            %&gt;
            &lt;html&gt;
            &lt;head&gt;
            &lt;title&gt;JSP的中文处理&lt;/title&gt;
            &lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;
            &lt;/head&gt;
            &lt;body&gt;
            &lt;%=request.getParameter("name")%&gt;
            &lt;/body&gt;
            &lt;/html&gt;</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr></center>
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em">三、数据库连接出现乱码
<p style="TEXT-INDENT: 2em">只要涉及中文的地方全部是乱码，解决办法：在数据库的数据库URL中加上useUnicode=true&amp;characterEncoding=GBK就OK了。
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em">四、数据库的显示乱码
<p style="TEXT-INDENT: 2em">在mysql4.1.0中,varchar类型，text类型就会出现中文乱码，对于varchar类型把它设为binary属性就可以解决中文问题，对于text类型就要用一个编码转换类来处理，实现如下：
<p style="TEXT-INDENT: 2em">
<center><ccid_nobr>
<table cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=400 align=center borderColorLight=black border=1>
    <tbody>
        <tr>
            <td class=code style="FONT-SIZE: 9pt" bgColor=#e6e6e6>
            <pre><ccid_code>public String iso2gb(String qs)
            {
            try{
            if (qs == null) return "NULL";
            else
            {
            return new String(qs.getBytes("iso-8859-1"),"gb2312");
            }
            }
            catch(Exception e){
            System.err.println("iso2gb error："+e.getMessage());
            }
            return "NULL";
            }
            public String gb2iso(String qs)
            {
            try
            {
            if (qs == null) return "NULL";
            else {
            return new String(qs.getBytes("gb2312"),"iso-8859-1"); }
            }
            catch(Exception e){ System.err.println("gb2iso error："+e.getMessage());}
            return "NULL";
            }</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</ccid_nobr></center>
<p style="TEXT-INDENT: 2em">
<p style="TEXT-INDENT: 2em">字符存入数据库时用 gb2iso()函数，将字符从数据库取出时，再用 iso2gb()函数。</p>
<img src ="http://www.blogjava.net/microlab4321/aggbug/137187.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-08-16 12:15 <a href="http://www.blogjava.net/microlab4321/articles/137187.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP中的表达式与脚本段 </title><link>http://www.blogjava.net/microlab4321/articles/137184.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Thu, 16 Aug 2007 04:09:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/137184.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/137184.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/137184.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/137184.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/137184.html</trackback:ping><description><![CDATA[<p>包含一个符合JSP语法的表达式 <br>JSP 语法<br>&lt;%= expression %&gt; <br>例子<br>&lt;font color="blue"&gt;&lt;%= map.size() %&gt;&lt;/font&gt; <br>&lt;b&gt;&lt;%= numguess.getHint() %&gt;&lt;/b&gt;. <br><br>用于在页面上输出信息，语法格式如下：<br>&lt;%= expression %&gt; 或<br>&lt;%= 表达式 %&gt;</p>
&lt;%@ page language="java"&nbsp; import="java.util.*" %&gt;<br>&lt;html&gt;<br>&lt;head&gt;<br>&lt;title&gt; test &lt;/title&gt;<br>&lt;/head&gt;<br>&lt;body&gt;<br>&lt;center&gt;<br>&lt;%! Date date=new Date(); %&gt; <br>&lt;%! int a, b, c; %&gt;<br>
<p>&lt;% a=12;b=a; c=a+b;%&gt;<br>&lt;font color="blue"&gt;<br>&lt;%=date.toString()%&gt;<br>&lt;/font&gt;&nbsp;&lt;br&gt; <br>&lt;b&gt;a=&lt;%= a %&gt;&lt;/b&gt;&lt;br&gt;<br>&lt;b&gt;b=&lt;%= b %&gt;&lt;/b&gt;&lt;br&gt;<br>&lt;b&gt;c=&lt;%= c %&gt;&lt;/b&gt;&lt;br&gt;<br>&lt;/center&gt;&nbsp;<br>&lt;/body&gt;<br>&lt;/html&gt;<br></p>
<p>表达式元素表示的是一个在脚本语言中被定义的表达式，在运行后被自动转化为字符串，然后插入到这个表达示在JSP文件的位置显示。因为这个表达式的值已经被转化为字符串，所以你能在一行文本中插入这个表达式（形式和ASP完全一样). <br>当你在JSP中使用表达式时请记住以下几点： <br>你不能用一个分号（"；"）来作为表达式的结束符.但是同样的表达式用在scriptlet中就需要以分号来结尾了！查看Scriptlet 这个表达式元素能够包括任何在Java Language Specification中有效的表达式. <br>有时候表达式也能做为其它JSP元素的属性值.一个表达式能够变得很复杂，它可能由一个或多个表达式组成，这些表达式的顺序是从左到右。<br><br>JSP 语法格式如下：<br>&lt;% code fragment %&gt; 或<br>&lt;% 代码 %&gt;<br>&lt;%@ page language="java" import="java.util.*" %&gt;<br>&lt;%! int condition;%&gt;<br>&lt;html&gt;<br>&nbsp;&lt;head&gt;<br>&nbsp;&lt;title&gt; test &lt;/title&gt;<br>&nbsp;&lt;/head&gt;<br>&nbsp;&lt;body&gt;<br>&lt;%<br>&nbsp;&nbsp;condition=1;<br>&nbsp;&nbsp;switch(condition){<br>&nbsp;&nbsp;&nbsp;case 0:<br>&nbsp;&nbsp;&nbsp;out.println("You must select condition 0!"+"&lt;br&gt;");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;case 1:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;out.println("You must select condition 1!"+"&lt;br&gt;");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;case 2:<br>&nbsp;&nbsp; out.println("You must select condition 2!"+"&lt;br&gt;");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;default:<br>&nbsp;&nbsp; out.println("Your select not in \"0,1,2\",select again!!"+"&lt;br&gt;");<br>&nbsp;&nbsp;}<br>&nbsp;%&gt;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;<br>&nbsp;&lt;/body&gt;<br>&lt;/html&gt;</p>
<p>转义符: 双引号 \&#8220; ，单引号\&#8217;，反斜杠\\，回车\r，换行\n，制表符\t，退格&nbsp;\b<br></p>
<img src ="http://www.blogjava.net/microlab4321/aggbug/137184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-08-16 12:09 <a href="http://www.blogjava.net/microlab4321/articles/137184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP内置对象 </title><link>http://www.blogjava.net/microlab4321/articles/137182.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Thu, 16 Aug 2007 04:08:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/137182.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/137182.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/137182.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/137182.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/137182.html</trackback:ping><description><![CDATA[<p>JSP 有以下九种内置对象，包括：<br>&nbsp;&#183;request，请求对象<br>&#183;response，响应对象<br>&#183;pageContext，页面上下文对象<br>&#183;session，会话对象<br>&#183;application，应用程序对象<br>&#183;out，输出对象<br>&#183;config，配置对象<br>&#183;page，页面对象<br>&#183;exception，例外对象<br>有几种对象看起来和ASP的内置对象差不多，功能也类似，这是因为这些内置对象的构建基础是标准化的</p>
<p>HTTP协议。如果使用过ASP，又对Java有一定的了解的话，那么对这几种JSP内置对象的使用应该能迅速掌</p>
<p>握。需要注意的问题是对象名的写法，包括这些对象方法的调用时也要书写正确，因为Java语言本身是大</p>
<p>小写敏感的。<br>从本质上讲，JSP的这些内置对象其实都是由特定的Java类所产生的，在服务器运行时根据情况自动生成，所以如果你有较好的Java基础，可以参考相应的类说明，表3.1给出了他们的对应关系。更进一步的讲解将会在讲解Servlet的一章中展开，如果你的Java基础不太好，可以先熟悉在这一章里所介绍的各种方法的使用。<br><img height=755 alt="" src="http://www.blogjava.net/images/blogjava_net/zhongjijun2006/jsp.png" width=478 border=0></p>
<img src ="http://www.blogjava.net/microlab4321/aggbug/137182.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-08-16 12:08 <a href="http://www.blogjava.net/microlab4321/articles/137182.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP中的声明详解 </title><link>http://www.blogjava.net/microlab4321/articles/137183.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Thu, 16 Aug 2007 04:08:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/137183.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/137183.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/137183.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/137183.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/137183.html</trackback:ping><description><![CDATA[<p>JSP 语法格式如下：<br>&lt;%! declaration; [ declaration; ] ... %&gt; 或<br>&lt;%! 声明; [声明; ] ... %&gt;<br>例子：<br>&lt;%@ page language=&#8221;java&#8221; import=&#8221;java.util.*&#8221; %&gt;<br>&lt;html&gt;<br>&lt;head&gt;<br>&lt;title&gt; test2.4.jsp &lt;/title&gt;<br>&lt;/head&gt;<br>&lt;body&gt;<br>&lt;%! int i = 0; %&gt; <br>&lt;%! int a, b, c; %&gt;<br>&lt;%! Date date; %&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;<br><br>在JSP程序中声明合法的变量和方法 <br>JSP 语法<br>&lt;%! declaration; [ declaration; ]+ ... %&gt; <br>例子<br>&lt;%! int i = 0; %&gt; <br>&lt;%! int a, b, c; %&gt; <br>&lt;%! Circle a = new Circle(2.0); %&gt; <br></p>
<p>描述<br>&nbsp;声明你将要在JSP程序中用到的变量和方法。你也必须这样做，不然会出错. <br>&nbsp;你可以一次性声明多个变量和方法，只要以";"结尾就行，当然这些声明在Java中要是合法的。 <br>&nbsp;当你声明方法或变量时，请注意以下的一些规则: <br>&nbsp;声明必须以";"结尾(Scriptlet有同样的规则，但是 表达式就不同了). <br>&nbsp;一个声明仅在一个页面中有效。如果你想每个页面都用到一些声明，最好把它们写成一个单独的文件，然后用&lt;%@ include %&gt;或&lt;jsp:include &gt;元素包含进来。 <br>&nbsp;&lt;%@ include&nbsp; file=&#8220;header.jsp&#8221;%&gt;&nbsp; Jsp:include的优点在于:它总是会检查所含文件中的变化.<br>用jsp:include 控制动态内容<br>了解include 指令与动态jsp:include 元素之间的差异<br>&lt;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#64;&#105;&#110;&#99;&#108;&#117;&#100;&#101;"><font color=#666666>%@include</font></a> file=&#8220;test.html&#8221;%&gt;高速缓存<br>&lt;jsp:include page=&#8220;include.html&#8221; flush=&#8220;true&#8221;&gt;<br></p>
<img src ="http://www.blogjava.net/microlab4321/aggbug/137183.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-08-16 12:08 <a href="http://www.blogjava.net/microlab4321/articles/137183.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP注释详解 </title><link>http://www.blogjava.net/microlab4321/articles/137180.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Thu, 16 Aug 2007 04:07:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/137180.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/137180.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/137180.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/137180.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/137180.html</trackback:ping><description><![CDATA[<p>在客户端显示一个注释. <br>JSP 语法<br>&lt;!-- comment [ &lt;%= expression %&gt; ] --&gt; <br>例子 1<br>&lt;!-- This file displays the user login screen --&gt; <br>在客户端的HTML源代码中产生和上面一样的数据：<br>例子 2<br>&lt;!-- This page was loaded on &lt;%= (new java.util.Date()).toLocaleString() %&gt; --&gt; <br><br>在客户端的HTML源代码中显示为: <br>&lt;!-- This page was loaded on August 3, 2007 --&gt; <br>描述<br>这种注释和HTML中很像，也就是它可以在"查看源代码"中看到。</p>
<p>唯一有些不同的就是，你可以在这个注释中用表达式（例子2所示)。这个表达示是不定的，由页面不同而不同，你能够使用各种表达式，只要是合法的就行。<br><br>隐藏注释 <br>写在JSP程序中，但不是发给客户。<br>JSP 语法<br>&lt;%-- comment --%&gt; &nbsp;</p>
<p>例子：</p>
<p>&lt;%@ page language="java" %&gt; <br>&lt;html&gt; <br>&lt;head&gt;&lt;title&gt;A Comment Test&lt;/title&gt;&lt;/head&gt; <br>&lt;body&gt; <br>&lt;h2&gt;A Test of Comments&lt;/h2&gt; <br>&lt;%-- This comment will not be visible in the page source --%&gt; <br>&lt;/body&gt; <br>&lt;/html&gt; <br>描述<br>用隐藏注释标记的字符会在JSP编译时被忽略掉。这个注释在你希望隐藏或注释你的JSP程序时是很有用的。<br>JSP编译器不是会对&lt;%--and--%&gt;之间的语句进行编译的，它不会显示在客户的浏览器中，也不会在源代码中看到在&lt;%-- --%&gt;之间，你可以任意写注释语句.<br></p>
<img src ="http://www.blogjava.net/microlab4321/aggbug/137180.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-08-16 12:07 <a href="http://www.blogjava.net/microlab4321/articles/137180.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP学习Scriptlet </title><link>http://www.blogjava.net/microlab4321/articles/137181.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Thu, 16 Aug 2007 04:07:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/137181.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/137181.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/137181.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/137181.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/137181.html</trackback:ping><description><![CDATA[包含一个有效的程序段. <br>JSP 语法<br>&lt;% code %&gt; <br>例子<br>&lt;% <br>String name = null; <br>if (request.getParameter("name") == null) { <br>%&gt; <br>&nbsp;&nbsp;&nbsp; &lt;%@ include file="error.html" %&gt; <br>&lt;% <br>} else { <br>&nbsp;&nbsp;&nbsp; name=request.getParameter(&#8220;name&#8221;)); <br>}<br>%&gt; <br>描述<br>&nbsp;一个scriptlet能够包含多个jsp语句，方法，变量，表达式 <br>&nbsp;因为scriptlet,我们便能做以下的事: <br>&nbsp;声明将要用到的变量或方法（参考 声明). <br>&nbsp;编写JSP表达式（参考 表达式). <br>&nbsp;使用任何隐含的对象和任何用&lt;jsp:useBean&gt;声明过的对象 <br>&nbsp;编写JSP语句 (如果你在使用Java语言，这些语句必须遵从Java Language Specification,). <br>&nbsp;任何文本,HTML标记,JSP元素必须在scriptlet之外 <br>&nbsp;当JSP收到客户的请求时，scriptlet就会被执行，如果scriptlet有显示的内容，这些显示的内容就被存在out对象中。<br>
<img src ="http://www.blogjava.net/microlab4321/aggbug/137181.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-08-16 12:07 <a href="http://www.blogjava.net/microlab4321/articles/137181.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP中的include指令 </title><link>http://www.blogjava.net/microlab4321/articles/137178.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Thu, 16 Aug 2007 04:06:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/137178.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/137178.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/137178.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/137178.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/137178.html</trackback:ping><description><![CDATA[include指令：向当前页中插入一个静态文件的内容。<br>JSP 语法格式如下：<br>&lt;%@ include file="relativeURL" %&gt; 或<br>&lt;%@ include file="相对位置" %&gt;<br>&lt;html&gt; <br>&nbsp;&lt;head&gt;<br>&nbsp;&lt;title&gt;test&lt;/title&gt;<br>&nbsp;&lt;/head&gt;<br>&nbsp;&nbsp;&lt;body bgcolor="white"&gt; <br>&nbsp;&lt;font color="blue"&gt; <br>&nbsp;The current date and time are <br>&lt;%@ include file=&#8220;peixun2.6.1.jsp" %&gt; <br>&nbsp;&lt;/font&gt;<br>&nbsp;&nbsp;&lt;/body&gt;<br>&lt;/html&gt;&nbsp;<br>&lt;%@ page import="java.util.*" %&gt; <br>&lt;%=(new java.util.Date() ).toLocaleString() %&gt; <br><br><br>包含一个静态或动态文件. <br>&nbsp;JSP 语法格式如下：<br>1．&lt;jsp:include page="{relativeURL | &lt;%=expression%&gt;}" &nbsp; flush="true" /&gt; <br>2．&lt;jsp:include page="{relativeURL | &lt;%=expression %&gt;}" &nbsp; flush="true" &gt;<br>&lt;jsp:param name="parameterName" value="{parameterValue | &lt;%= expression %&gt;}" /&gt;<br>&nbsp;&nbsp;&nbsp; [&lt;jsp:param &#8230;/&gt;]<br>&lt;/jsp:include&gt; <br>（&#8220;[&lt;jsp:param &#8230; /&gt;]&#8221;指可以有多个&#8220;&lt;jsp:param/&gt;&#8221;标记。） <br><br>1．page="{relativeURL | &lt;%=expression %&gt;}" <br>&nbsp; 参数为一相对路径，或者是代表相对路径的表达式。<br>&nbsp;<br>2．flush="true" <br>&nbsp; 这里必须使用flush="true"，不能使用false值。而缺省值为false 。&nbsp;<br>3．&lt;jsp:param name="parameterName" value="{parameterValue | &lt;%= expression %&gt; }" /&gt;<br>&#8220;&lt;jsp:param&gt;&#8221;用来传递一个或多个参数到指定的动态文件，能在一个页面中使用多个&#8220;&lt;jsp:param&gt;&#8221;来传递多个参数，<br>&lt;html&gt;<br>&nbsp;&lt;head&gt;<br>&nbsp;&nbsp;&lt;title&gt;peixun.2.10.jsp&lt;/title&gt;<br>&nbsp;&lt;/head&gt;<br>&nbsp;&lt;body&gt;&nbsp; <br>&nbsp;&lt;jsp:include page="peixun2.10.1.jsp" flush="true" &gt;<br>&nbsp;&lt;jsp:param name="User" value="HiFi King" /&gt;<br>&nbsp;&lt;/jsp:include&gt; <br>&nbsp;&lt;/body&gt;<br>&lt;/html&gt;<br>&lt;%<br>&nbsp;String username;<br>&nbsp;username=request.getParameter("User");<br>&nbsp;out.println("Username is "+username+"&lt;br&gt;");<br>%&gt;<br>
<img src ="http://www.blogjava.net/microlab4321/aggbug/137178.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-08-16 12:06 <a href="http://www.blogjava.net/microlab4321/articles/137178.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP中的Page 指令 </title><link>http://www.blogjava.net/microlab4321/articles/137042.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Wed, 15 Aug 2007 13:05:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/137042.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/137042.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/137042.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/137042.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/137042.html</trackback:ping><description><![CDATA[文章出自:http://www.blogjava.net/zhongjijun2006/archive/2007/08/15/136865.html<br>
<p>定义JSP文件中的全局属性. <br>JSP 语法<br>&lt;%@ page <br>[ language="java" ] <br>[ extends="package.class" ] <br>[ import="{package.class | package.*}, ..." ] <br>[ session="true | false" ] <br>[ buffer="none | 8kb | sizekb" ] <br>[ autoFlush="true | false" ] <br>[ isThreadSafe="true | false" ] <br>[ info="text" ] <br>[ errorPage="relativeURL" ] <br>[ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ] <br>[ isErrorPage="true | false" ] <br>%&gt; <br>例子<br>&lt;%@ page import="java.util.*, java.lang.*" %&gt; <br>&lt;%@ page buffer="5kb" autoFlush="false" %&gt; <br>&lt;%@ page errorPage="error.jsp" %&gt; <br>描述<br>&nbsp;&lt;%@ page %&gt;指令作用于整个JSP页面，同样包括静态的包含文件。但是&lt;% @ page %&gt;指令不能作用于动态的包含文件，比如 &lt;jsp:include&gt; <br>&nbsp;你可以在一个页面中用上多个&lt;% @ page %&gt;指令，但是其中的属性只能用一次，不过也有个例外，那就是import属性。因为import属性和Java中的import语句差不多(参照Java Language)，所以你就能多用此属性几次了. <br>&nbsp;无论你把&lt;% @ page %&gt;指令放在JSP的文件的哪个地方，它的作用范围都是整个JSP页面。不过，为了JSP程序的可读性，以及好的编程习惯，最好还是把它放在JSP文件的顶部.&nbsp;</p>
属性：<br>1．language="java" <br>声明脚本语言的种类，目前只能用"java" 。<br>2.import="{package.class | package.* },..." <br>&nbsp; 需要导入的Java包的列表，这些包作用于程序段，表达式，以及声明。下面的包在JSP编译时已经导入了，所以就不需要再指明了： <br>java.lang.* javax.servlet.* javax.servlet.jsp.* javax.servlet.http.*
<p>3．errorPage="relativeURL" <br>设置处理异常事件的JSP文件。 <br>&nbsp;<br>4．isErrorPage="true | false" <br>&nbsp;设置此页是否为出错页，如果被设置为true,你就能使用exception对象</p>
<img src ="http://www.blogjava.net/microlab4321/aggbug/137042.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-08-15 21:05 <a href="http://www.blogjava.net/microlab4321/articles/137042.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]jsp:include page="" 和 include file="" 的区别 </title><link>http://www.blogjava.net/microlab4321/articles/136308.html</link><dc:creator>冬天出走的猪</dc:creator><author>冬天出走的猪</author><pubDate>Mon, 13 Aug 2007 02:28:00 GMT</pubDate><guid>http://www.blogjava.net/microlab4321/articles/136308.html</guid><wfw:comment>http://www.blogjava.net/microlab4321/comments/136308.html</wfw:comment><comments>http://www.blogjava.net/microlab4321/articles/136308.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/microlab4321/comments/commentRss/136308.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/microlab4321/services/trackbacks/136308.html</trackback:ping><description><![CDATA[<p>下面用三个实验，更清淅的理解 &lt;jsp:include page=""/&gt; 和 &lt;%@ include file="" %&gt; 的区别。<br>&lt;jsp:include page=""/&gt; 包含被 include 文件的输出<br>&lt;%@ include file="" %&gt; 包含被 include 文件的代码</p>
<p>a.jsp 内容：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #0000ff">&lt;</span> <span style="COLOR: #800000">jsp:include&nbsp;</span> <span style="COLOR: #ff0000">page</span> <span style="COLOR: #0000ff">="b.jsp"</span> <span style="COLOR: #0000ff">/&gt;</span> </div>
<p>b.jsp 内容：(空)</p>
<p>_a.class a.jsp编译成类的内容:</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_13_226_Open_Image onclick="this.style.display='none'; Codehighlighter1_13_226_Open_Text.style.display='none'; Codehighlighter1_13_226_Closed_Image.style.display='inline'; Codehighlighter1_13_226_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top> <img id=Codehighlighter1_13_226_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_13_226_Closed_Text.style.display='none'; Codehighlighter1_13_226_Open_Image.style.display='inline'; Codehighlighter1_13_226_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top> <span style="COLOR: #000000">_jspService()</span> <span id=Codehighlighter1_13_226_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"> </span><span id=Codehighlighter1_13_226_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"><img src="http://www.blogjava.net/Images/dot.gif"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;JspWriter&nbsp;jspwriter&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;pagecontext.getOut();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">把b.jsp的内容输出到_a.class的jspwriter</span> <span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top> </span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;JspRuntimeLibrary.include(httpservletrequest,&nbsp;httpservletresponse,&nbsp;</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">b.jsp</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">,&nbsp;jspwriter,&nbsp;</span> <span style="COLOR: #0000ff">false</span> <span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"><img src="http://www.blogjava.net/Images/dot.gif"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span> </span><span style="COLOR: #000000">&nbsp;</span> </div>
<p>-------------------------------------------------------------------------------------<br>&nbsp;&nbsp;&nbsp;&nbsp; <br>a.jsp 内容：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_2_24_Open_Image onclick="this.style.display='none'; Codehighlighter1_2_24_Open_Text.style.display='none'; Codehighlighter1_2_24_Closed_Image.style.display='inline'; Codehighlighter1_2_24_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top> <img id=Codehighlighter1_2_24_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2_24_Closed_Text.style.display='none'; Codehighlighter1_2_24_Open_Image.style.display='inline'; Codehighlighter1_2_24_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top> <span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">&lt;%</span> <span id=Codehighlighter1_2_24_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"> </span><span id=Codehighlighter1_2_24_Open_Text><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">@&nbsp;include&nbsp;file</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">b.jsp</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span> </span><span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">%&gt;</span> <span style="COLOR: #000000">&nbsp;</span> </div>
<p>b.jsp 内容：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #000000">abcd</span> </div>
<p>_a.class a.jsp编译成类的内容</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">b.jsp中"abcd"字符串作为_a.class的成员变量</span> <span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top> </span><span style="COLOR: #0000ff">private</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">static</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">final</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #0000ff">char</span> <span style="COLOR: #000000">&nbsp;_jsp_string1[]&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">abcd</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">.toCharArray();&nbsp;<br><img id=Codehighlighter1_112_219_Open_Image onclick="this.style.display='none'; Codehighlighter1_112_219_Open_Text.style.display='none'; Codehighlighter1_112_219_Closed_Image.style.display='inline'; Codehighlighter1_112_219_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_112_219_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_112_219_Closed_Text.style.display='none'; Codehighlighter1_112_219_Open_Image.style.display='inline'; Codehighlighter1_112_219_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>_jspService()</span> <span id=Codehighlighter1_112_219_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"> </span><span id=Codehighlighter1_112_219_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"><img src="http://www.blogjava.net/Images/dot.gif"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;JspWriter&nbsp;jspwriter&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;pagecontext.getOut();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;jspwriter.write(_jsp_string1);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"><img src="http://www.blogjava.net/Images/dot.gif"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span> </span></div>
<p>-------------------------------------------------------------------------------------</p>
<p>a.jsp 内容：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_2_24_Open_Image onclick="this.style.display='none'; Codehighlighter1_2_24_Open_Text.style.display='none'; Codehighlighter1_2_24_Closed_Image.style.display='inline'; Codehighlighter1_2_24_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top> <img id=Codehighlighter1_2_24_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2_24_Closed_Text.style.display='none'; Codehighlighter1_2_24_Open_Image.style.display='inline'; Codehighlighter1_2_24_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top> <span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">&lt;%</span> <span id=Codehighlighter1_2_24_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"> </span><span id=Codehighlighter1_2_24_Open_Text><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">@&nbsp;include&nbsp;file</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">=</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">b.jsp</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">&nbsp;</span> </span><span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">%&gt;</span> <span style="COLOR: #000000">&nbsp;</span> </div>
<p>b.jsp 内容：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_2_20_Open_Image onclick="this.style.display='none'; Codehighlighter1_2_20_Open_Text.style.display='none'; Codehighlighter1_2_20_Closed_Image.style.display='inline'; Codehighlighter1_2_20_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top> <img id=Codehighlighter1_2_20_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_2_20_Closed_Text.style.display='none'; Codehighlighter1_2_20_Open_Image.style.display='inline'; Codehighlighter1_2_20_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top> <span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">&lt;%</span> <span id=Codehighlighter1_2_20_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"> </span><span id=Codehighlighter1_2_20_Open_Text><span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">out.println(</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">efg</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">"</span> <span style="COLOR: #000000; BACKGROUND-COLOR: #f5f5f5">);</span> </span><span style="COLOR: #000000; BACKGROUND-COLOR: #ffff00">%&gt;</span> </div>
<p>_a.class a.jsp编译成类的内容</p>
<p>&#160;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_13_67_Open_Image onclick="this.style.display='none'; Codehighlighter1_13_67_Open_Text.style.display='none'; Codehighlighter1_13_67_Closed_Image.style.display='inline'; Codehighlighter1_13_67_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top> <img id=Codehighlighter1_13_67_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_13_67_Closed_Text.style.display='none'; Codehighlighter1_13_67_Open_Image.style.display='inline'; Codehighlighter1_13_67_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top> <span style="COLOR: #000000">_jspService()</span> <span id=Codehighlighter1_13_67_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"> </span><span id=Codehighlighter1_13_67_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"><img src="http://www.blogjava.net/Images/dot.gif"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;jspwriter.println(</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">efg</span> <span style="COLOR: #000000">"</span> <span style="COLOR: #000000">);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"><img src="http://www.blogjava.net/Images/dot.gif"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span> </span></div>
<p>以上是在用 WebSphere Application Server 6.1 编译生成的代码反编译出来的 _a.class。<br><br>接下来要看看 jsp 指令，如：<br>&lt;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#64;&#112;&#97;&#103;&#101;"><font color=#000080>%@page</font></a> contentType="text/html; charset=UTF-8" %&gt;<br>&lt;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#64;&#112;&#97;&#103;&#101;"><font color=#000080>%@page</font></a> autoFlush="false" %&gt;<br>&lt;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#64;&#112;&#97;&#103;&#101;"><font color=#000080>%@page</font></a> buffer="20kb" %&gt;<br>&lt;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#64;&#112;&#97;&#103;&#101;"><font color=#000080>%@page</font></a> isThreadSafe="true" %&gt;<br>&lt;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#64;&#112;&#97;&#103;&#101;"><font color=#000080>%@page</font></a> errorPage="" %&gt;<br>&lt;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#37;&#64;&#112;&#97;&#103;&#101;"><font color=#000080>%@page</font></a> extends="" %&gt;<br>....................<br><br>会体现在生成的 class 文件的何处，分别起什么作用。<br></p>
<img src ="http://www.blogjava.net/microlab4321/aggbug/136308.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/microlab4321/" target="_blank">冬天出走的猪</a> 2007-08-13 10:28 <a href="http://www.blogjava.net/microlab4321/articles/136308.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>