﻿<?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-liuyz2006-文章分类-jsp</title><link>http://www.blogjava.net/liuyz2006/category/50544.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 06 Jul 2013 18:08:58 GMT</lastBuildDate><pubDate>Sat, 06 Jul 2013 18:08:58 GMT</pubDate><ttl>60</ttl><item><title>Servlet生命周期与工作原理(转）</title><link>http://www.blogjava.net/liuyz2006/articles/401094.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Sun, 30 Jun 2013 15:54:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/401094.html</guid><description><![CDATA[<h1 class="postTitle"><a id="cb_post_title_url" class="postTitle2" href="http://www.cnblogs.com/cuiliang/archive/2011/10/21/2220671.html"><span style="font-size: 12pt">Servlet生命周期与工作原理</span></a> </h1>
<div class="clear"></div>
<div class="postBody">
<div id="cnblogs_post_body">
<p>Servlet生命周期分为三个阶段：</p>
<p>　　1，初始化阶段&nbsp; 调用init()方法</p>
<p>　　2，响应客户请求阶段　　调用service()方法</p>
<p>　　3，终止阶段　　调用destroy()方法</p>
<p>&nbsp;</p>
<p>Servlet初始化阶段：</p>
<p>　　在下列时刻Servlet容器装载Servlet：</p>
<p>　　　　1，Servlet容器启动时自动装载某些Servlet，实现它只需要在web.XML文件中的&lt;Servlet&gt;&lt;/Servlet&gt;之间添加如下代码：</p>
<div class="cnblogs_Highlighter">
<div>
<div id="highlighter_907573" class="syntaxhighlighter nogutter  java ie">
<div class="toolbar"><span><a class="toolbar_item command_help help" href="http://www.cnblogs.com/cuiliang/archive/2011/10/21/2220671.html#">?</a></span></div>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="java plain">&lt;loadon-startup&gt;</code><code class="java value">1</code><code class="java plain">&lt;/loadon-startup&gt;</code></div></div></td></tr></tbody></table></div></div></div>
<p>　　　　2，在Servlet容器启动后，客户首次向Servlet发送请求</p>
<p>　　　　3，Servlet类文件被更新后，重新装载Servlet</p>
<p>　　Servlet被装载后，Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期内，init()方法只被调用一次。</p>
<p>　　　　</p>
<p>Servlet工作原理：</p>
<p>　　首先简单解释一下Servlet接收和响应客户请求的过程，首先客户发送一个请求，Servlet是调用service()方法对请求进行响应的，通过源代码可见，service()方法中对请求的方式进行了匹配，选择调用doGet,doPost等这些方法，然后再进入对应的方法中调用逻辑层的方法，实现对客户的响应。在Servlet接口和GenericServlet中是没有doGet,doPost等等这些方法的，HttpServlet中定义了这些方法，但是都是返回error信息，所以，我们每次定义一个Servlet的时候，都必须实现doGet或doPost等这些方法。</p>
<p>　　每一个自定义的Servlet都必须实现Servlet的接口，Servlet接口中定义了五个方法，其中比较重要的三个方法涉及到Servlet的生命周期，分别是上文提到的init(),service(),destroy()方法。GenericServlet是一个通用的，不特定于任何协议的Servlet,它实现了Servlet接口。而HttpServlet继承于GenericServlet，因此HttpServlet也实现了Servlet接口。所以我们定义Servlet的时候只需要继承HttpServlet即可。</p>
<p>　　Servlet接口和GenericServlet是不特定于任何协议的，而HttpServlet是特定于HTTP协议的类，所以HttpServlet中实现了service()方法，并将请求ServletRequest,ServletResponse强转为HttpRequest和HttpResponse。</p>
<div class="cnblogs_Highlighter">
<div>
<div id="highlighter_102646" class="syntaxhighlighter nogutter  java ie">
<div class="toolbar"><span><a class="toolbar_item command_help help" href="http://www.cnblogs.com/cuiliang/archive/2011/10/21/2220671.html#">?</a></span></div>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="java keyword">public</code> <code class="java keyword">void</code> <code class="java plain">service(ServletRequest req,ServletResponse res)&nbsp; </code></div>
<div class="line number2 index1 alt1"><code class="java spaces">&nbsp;&nbsp;</code><code class="java keyword">throws</code> <code class="java plain">ServletException,IOException </code></div>
<div class="line number3 index2 alt2"><code class="java plain">{ </code></div>
<div class="line number4 index3 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">HttpRequest request; </code></div>
<div class="line number5 index4 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">HttpResponse response; </code></div>
<div class="line number6 index5 alt1"><code class="java spaces">&nbsp;</code>&nbsp;</div>
<div class="line number7 index6 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">try</code></div>
<div class="line number8 index7 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">{ </code></div>
<div class="line number9 index8 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">req = (HttpRequest)request; </code></div>
<div class="line number10 index9 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">res = (HttpResponse)response; </code></div>
<div class="line number11 index10 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">}</code><code class="java keyword">catch</code><code class="java plain">(ClassCastException e) </code></div>
<div class="line number12 index11 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">{ </code></div>
<div class="line number13 index12 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">throw</code> <code class="java keyword">new</code> <code class="java plain">ServletException(</code><code class="java string">"non-HTTP request response"</code><code class="java plain">);&nbsp; </code></div>
<div class="line number14 index13 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">} </code></div>
<div class="line number15 index14 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">service(request,response); </code></div>
<div class="line number16 index15 alt1"><code class="java plain">}</code></div></div></td></tr></tbody></table></div></div></div>
<p>&nbsp;&nbsp;&nbsp; 代码的最后调用了HTTPServlet自己的service(request,response)方法，然后根据请求去调用对应的doXXX方法，因为HttpServlet中的doXXX方法都是返回错误信息，</p>
<div class="cnblogs_Highlighter">
<div>
<div id="highlighter_485324" class="syntaxhighlighter nogutter  java ie">
<div class="toolbar"><span><a class="toolbar_item command_help help" href="http://www.cnblogs.com/cuiliang/archive/2011/10/21/2220671.html#">?</a></span></div>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="java keyword">protected</code> <code class="java keyword">void</code> <code class="java plain">doGet(HttpServletRequest res,HttpServletResponse resp) </code></div>
<div class="line number2 index1 alt1"><code class="java spaces">&nbsp;&nbsp;</code><code class="java keyword">throws</code> <code class="java plain">ServletException,IOException </code></div>
<div class="line number3 index2 alt2"><code class="java plain">{ </code></div>
<div class="line number4 index3 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;</code><code class="java plain">String protocol = req.getProtocol(); </code></div>
<div class="line number5 index4 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;</code><code class="java plain">String msg = IStrings.getString(</code><code class="java string">"http.method_get_not_supported"</code><code class="java plain">); </code></div>
<div class="line number6 index5 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;</code><code class="java keyword">if</code><code class="java plain">(protocol.equals(</code><code class="java string">"1.1"</code><code class="java plain">)) </code></div>
<div class="line number7 index6 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;</code><code class="java plain">{ </code></div>
<div class="line number8 index7 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">resp.sendError(HttpServletResponse.SC.METHOD.NOT.ALLOWED,msg); </code></div>
<div class="line number9 index8 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">} </code></div>
<div class="line number10 index9 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;</code><code class="java plain">esle </code></div>
<div class="line number11 index10 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">{ </code></div>
<div class="line number12 index11 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">resp.sendError(HttpServletResponse.SC_BAD_REQUEST,msg); </code></div>
<div class="line number13 index12 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">} </code></div>
<div class="line number14 index13 alt1"><code class="java plain">}</code></div></div></td></tr></tbody></table></div></div></div>
<p>所以需要我们在自定义的Servlet中override这些方法！</p>
<p>&nbsp;</p>
<p>　　　　<strong><span style="color: #ff0000">源码面前，了无秘密！</span></strong></p>
<p><span style="color: #000000">---------------------------------------------------------------------------------------------------------------------------------<strong></strong></span></p>
<p><span style="color: #000000"><strong></strong>Servlet响应请求阶段：</span></p>
<p><span style="color: #000000">　　对于用户到达Servlet的请求，Servlet容器会创建<span style="color: #ff0000">特定于这个请求的ServletRequest对象和ServletResponse对象</span>，然后调用Servlet的service方法。service方法从ServletRequest对象获得客户请求信息，处理该请求，并通过ServletResponse对象向客户返回响应信息。</span></p>
<p><span style="color: #000000">　　对于Tomcat来说，它会将传递过来的参数放在一个Hashtable中，该Hashtable的定义是：</span></p>
<p>&nbsp;</p>
<div class="cnblogs_Highlighter">
<div>
<div id="highlighter_371356" class="syntaxhighlighter nogutter  java ie">
<div class="toolbar"><span><a class="toolbar_item command_help help" href="http://www.cnblogs.com/cuiliang/archive/2011/10/21/2220671.html#">?</a></span></div>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="java keyword">private</code> <code class="java plain">Hashtable&lt;String String[]&gt; paramHashStringArray = </code><code class="java keyword">new</code> <code class="java plain">Hashtable&lt;String String[]&gt;();</code></div></div></td></tr></tbody></table></div></div></div>
<p>&nbsp;</p>
<p>　　这是一个String--&gt;String[]的键值映射。</p>
<p>　　HashMap线程不安全的，Hashtable线程安全。</p>
<p>-----------------------------------------------------------------------------------------------------------------------------------</p>
<p>Servlet终止阶段：</p>
<p>　　当WEB应用被终止，或Servlet容器终止运行，或Servlet容器重新装载Servlet新实例时，Servlet容器会先调用Servlet的destroy()方法，在destroy()方法中可以释放掉Servlet所占用的资源。</p>
<p>&nbsp;</p>
<p><span style="color: #000000">-----------------------------------------------------------------------------------------------------------------------------------</span></p>
<p><span style="color: #000000">Servlet何时被创建：</span></p>
<p><span style="color: #000000">　　1，默认情况下，当WEB客户第一次请求访问某个Servlet的时候，WEB容器将创建这个Servlet的实例。</span></p>
<p><span style="color: #000000">　　2，当web.xml文件中如果&lt;servlet&gt;元素中指定了&lt;load-on-startup&gt;子元素时，Servlet容器在启动web服务器时，将按照顺序创建并初始化Servlet对象。</span></p>
<p><span style="color: #000000">　　注意：在web.xml文件中，某些Servlet只有&lt;serlvet&gt;元素，没有&lt;servlet-mapping&gt;元素，这样我们无法通过url的方式访问这些Servlet，这种Servlet通常会在&lt;servlet&gt;元素中配置一个&lt;load-on-startup&gt;子元素，让容器在启动的时候自动加载这些Servlet并调用init()方法，完成一些全局性的初始化工作。</span></p>
<p><span style="color: #000000"><br /></span></p>
<p><span style="color: #000000">Web应用何时被启动：</span></p>
<p><span style="color: #000000">　　1，当Servlet容器启动的时候，所有的Web应用都会被启动</span></p>
<p><span style="color: #000000">　　2，控制器启动web应用<br /></span></p>
<p><span style="color: #000000">-----------------------------------------------------------------------------------------------------------------------------------------------<br /></span></p>
<p><span style="color: #000000">Servlet与JSP的比较：</span></p>
<p><span style="color: #000000">　　有许多相似之处，都可以生成动态网页。</span></p>
<p><span style="color: #000000">　　JSP的优点是擅长于网页制作，生成动态页面比较直观，缺点是不容易跟踪与排错。</span></p>
<p><span style="color: #000000">　　Servlet是纯Java语言，擅长于处理流程和业务逻辑，缺点是生成动态网页不直观。<br /></span></p></div></div><img src ="http://www.blogjava.net/liuyz2006/aggbug/401094.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2013-06-30 23:54 <a href="http://www.blogjava.net/liuyz2006/articles/401094.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsp教程：深入分析 JSP/Serverlet中的编码问题(转）</title><link>http://www.blogjava.net/liuyz2006/articles/401093.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Sun, 30 Jun 2013 13:32:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/401093.html</guid><description><![CDATA[<div class="title">
<h2>jsp教程：深入分析 JSP/Serverlet中的编码问题</h2></div><!-- /title -->

<div class="info"><small>时间:</small>2012-12-02 10:25<small>来源:</small>我爱IT技术网 <small>作者:</small>52ij <small>点击:</small> 158 次</div><!-- /info -->

<div class="intro">(1) jsp页面中的pageEncoding: 指定jsp编写时所用的编码（源文件编码） 如果你用的是win98或winme的记事本来编写的jsp, 则一定是常用的big5或gb2312; 如果用的是win2000或winXP的记事本时， 保存时就可以选择不同的编码，包括ANSI(BIG5/GB2312)、UTF-8或Unic</div>
<div class="content">
<table width="100%">
<tbody>
<tr>
<td><!--<div id="contentMidPicAD" style="float:right; clear:both; top:0; vertical-align:top;"><script type="text/javascript" src="http://ad.dedecms.com/adsview/?action=single&key=contentmidpicad&charset=gbk"></script></div>-->

<p>&nbsp;(1)&nbsp; jsp页面中的pageEncoding:&nbsp;&nbsp; 指定jsp编写时所用的编码（源文件编码）</p>
<p style="text-align: center"><img style="width: 279px; height: 261px" alt="JSP/Serverlet中的编码问题" src="http://www.52ij.com/uploads/allimg/121202/1-121202102PbK.jpg" /></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果你用的是win98或winme的记事本来编写的jsp, 则一定是常用的big5或gb2312;&nbsp; 如果用的是win2000或winXP的记事本时， 保存时就可以选择不同的编码，包括ANSI(BIG5/GB2312)、UTF-8或Unicode(utf-16)<br />(2) jsp页面中的contentType:&nbsp;&nbsp; 它指定的是jsp页面最终在客户端浏览器呈现时所见到的内容的编码。就是mozilla的charactrer encoding或是IE6的encoding等。</p>
<p>Jsp从源文件到最终用户看到的html文件，会大致经历如下阶段:<br />&#9312;&nbsp; 所编写的源文件的保存, 由于计算机只能保存二进制形式的内容，而我们所写的都是字符串形式的内容，所以这里进行的第一个阶段即是由字符串到字节的编码过程，这个阶段所采用的就是PageEnco<br />ding所指定的编码, 如这时指定的是GBK, 则会将一个汉字拆分成二个字节来保存，如果用的是utf-8则会用三个字节来保存。[jsp页面的pageEncoding的默认值是iso8859-1]<br />&#9313; 本阶段是从.jsp文件中读取二进制信息并翻译成.java文件的过程(这一过程由服务器如tomcat在运行<br />时时完成), 服务器读取出二进制信息（字节）, 然后用其保存时所使用的字符编码来重新进行解码，将其还原成原始字串.&nbsp;&nbsp; 这时系统再使用UTF-8对字符串重新进行编码，并将其得到的字节信息写入到x.java文件中(这与src中的.java文件不同，src中的.java文件采用的是平台使用的字符集，而这里统一都用UTF-8)。<br />&#9314;&nbsp; 这一阶段是完成从.java文件到源文件.class文件的编译过程，这时系统会从.java文件中读出字节数<br />据，然后直接将其写入.class文件中，所用编码方式仍为UTF-8。<br />&#9315;&nbsp; 本阶段是由tomcat从class文件中读取二进制信息，然后通过网络发送出去， 具体用来实施这个工作的对象是response对象。而这个对象在发送数据前先要将数据根据UTF-8还原成原始字串，然后再按<br />contentType 所指定的编码(如果没设则与pageEncoding一样)将字串编码为字节流，然后再通过网<br />络发送出去。<br />&#9316;&nbsp; 这阶段的主要工作将由浏览器来完成.&nbsp; 此阶段浏览器接收到字节流后，要负责将其解码为字符串，而解码所使用的字符码式仍为contentType所指定的编码方式。<br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 至此用户就可以看到我们原先写的字符串了。 其实上面几步中前面几步都没可以省略不看，我们关<br />键要看的是最后两步（即网络发送前的编码和到达浏览器后的解码过程）来看下面几种情况:<br />(1) &lt;%@ page pageEncoding="GBK" contentType="text/html; charset=iso8859-1"%&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp; 假设页面中有:&nbsp; &lt;h1&gt;中&lt;/h1&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当走到第4步时，服务器会读取出字节并正确还原成字符串&#8221;&lt;h1&gt;中&lt;/h1&gt;&#8221;, 这时response在发送前需要先将其变为字节序列，所使用的编码标准就是iso8859-1(由charset指定), 它会将一个英文解析为一个字节，将一个中文也解析为一个字节，这样数据在发送前就已经丢失了，所以到达浏览器时也必然为少了一个字节了。故我们会看到?输出.<br />(2) &lt;%@ page pageEncoding="GBK" contentType="text/html; charset=utf-8"%&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp; 假设页面中有:&nbsp; &lt;h1&gt;中&lt;/h1&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp; 发送前会将所有中文字符编码为三个字节、英文字母和数字仍为1个字节，然后送出，到浏览器后，再用同样的字符编码将字节解码为字符串（中文三个一组）,所以数据不会丢失，不会出现乱码。编码本身提供了一套标准来识别某个字节是否是中文字符的开始部分.<br />(3) &lt;%@ page pageEncoding="utf-8" contentType="text/html; charset= GBK"%&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp; 假设页面中有:&nbsp; &lt;h1&gt;中&lt;/h1&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp; 发送前会将所有中文字符编码为二个字节、英文字母和数字仍为1个字节，然后送出，到浏览器后，再用同样的字符编码将字节解码为字符串（中文二个一组）,所以数据不会丢失，不会出现乱码。<br />&nbsp;<br />Jsp向servlet提交数据时的编码问题：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 前面部分都一致，关键问题是字节流到达服务器后的解码(字节-&gt;字符)过程, 与页面不同的是它不采用contentType指定的字符编码方式来解码字节，而是采用服务器(tomcat默认值为iso8859-1)来解析，这样一个字节就被还原成了一个字符, 这时如果我们的jsp指定的contentType是UTF-8, 就会出现本来是一个字符的三个字节被分别解析成了三个字符，所以乱码也就产生了。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们可以通过手工的方式来设置字节的解码方式，具体做法是在用request的getParameter方法前调用request的 setCharacterEncoding(&#8220;解码方式&#8221;); 将编码和解码的码式设为一致，如前面contentType设置为utf-8, 此处也就设置为utf-8, 这样信息就能顺利还原了。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注：在tomcat中对于get方式提交的数据不论request的setCharacterEncoding设置的是何种字符编码方式，服务器均采用ISO8859-1方式对其进行解码，所以我们要想得到正确数据，就可以通过:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String str =&nbsp; request.getParameter(&#8220;xxx&#8221;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str =&nbsp; new&nbsp; String (str.getBytes(&#8220;ISO8859-1&#8221;,&#8221;contentType指定的编码&#8221;);<br />这样先将数据还原，然后再用发送时的字符集来进行解码，这样就可将数据还原了.</p>(责任编辑：admin)</td></tr></tbody></table></div><img src ="http://www.blogjava.net/liuyz2006/aggbug/401093.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2013-06-30 21:32 <a href="http://www.blogjava.net/liuyz2006/articles/401093.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP中文编码问题解决方法详解</title><link>http://www.blogjava.net/liuyz2006/articles/401092.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Sun, 30 Jun 2013 13:31:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/401092.html</guid><description><![CDATA[<div class="desinfo">
<div class="intro">最基本的乱码问题 这个乱码问题是最简单的乱码问题。一般新会出现。就是页面编码不一致导致的乱码。 Html代码： ＜%@ page language=java pageEncoding=UTF-8%＞ ＜%@ page contentType=text/html;charset=iso8859-1%＞ ＜html＞ ＜head＞ ＜title＞中文问题</div></div>
<div class="content">
<div style="float: right; clear: both; vertical-align: top; top: 0px" id="contentMidPicAD">
<div style="display: none">-</div></div><u><strong>最基本的乱码问题</strong></u><br />这个乱码问题是最简单的乱码问题。一般新会出现。就是页面编码不一致导致的乱码。<br />Html代码：<br /><pre>＜%@ page language="java" pageEncoding="UTF-8"%＞&nbsp; 
＜%@ page contentType="text/html;charset=iso8859-1"%＞&nbsp; 
＜html＞&nbsp; 
＜head＞&nbsp; 
＜title＞中文问题＜/title＞&nbsp; 
＜meta http-equiv="Content-Type" content="text/html; charset=UTF-8"＞&nbsp; 
＜/head＞&nbsp; 
＜/head＞&nbsp; 
＜body＞&nbsp; 
我是个好人&nbsp; 
＜/body＞&nbsp; 
＜/html＞&nbsp; </pre><u><strong>三个地方的编码</strong></u><br />第一个地方的编码格式为jsp文件的存储格式。Ecljpse会根据这个编码格式保存文件。并编译jsp文件，包括里面的汉字。<br />第二处编码为解码格式。因为存为UTF-8的文件被解码为iso8859-1，这样如有中文肯定出乱码。也就是必须一致。而第二处所在的这一行，可以没有。缺省也是使用iso8859-1的编码格式。所以如果没有这一行的话，&#8220;我是个好人&#8221;也会出现乱码。必须一致才可以。<br />第三处编码为控制浏览器的解码方式。如果前面的解码都一致并且无误的话，这个编码格式没有关系。有的网页出现乱码，就是因为浏览器不能确定使用哪种编码格式。因为页面有时候会嵌入页面，导致浏览器混淆了编码格式。出现了乱码。<br /><br />
<div class="desinfo">
<div class="intro">表单使用Post方式提交后接收到的乱码问题 这个问题也是一个常见的问题。这个乱码也是tomcat的内部编码格式iso8859-1在捣乱，也就是说post提交时，如果没有设置提交的编码 格式，则会以iso8859-1方式进行提交，接受</div></div>
<div class="content">
<div style="float: right; clear: both; vertical-align: top; top: 0px" id="contentMidPicAD">
<div style="display: none">-</div></div><br /><u><strong>表单使用Post方式提交后接收到的乱码问题</strong></u>这个问题也是一个常见的问题。这个乱码也是tomcat的内部编码格式iso8859-1在捣乱，也就是说post提交时，如果没有设置提交的编码 格式，则会以iso8859-1方式进行提交，接受的jsp却以utf-8的方式接受。导致乱码。既然这样的原因，下面有几种解决方式，并比较。<br /><strong>a.</strong> 接受参数时进行编码转换</font><br /><pre>String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8") ； </pre>这样的话，每一个参数都必须这样进行转码。很麻烦。但确实可以拿到汉字。<br /><strong>b.</strong> 在请求页面上开始处，执行请求的编码代码<br /><pre>request.setCharacterEncoding("UTF-8") </pre>把提交内容的字符集设为UTF－8。这样的话，接受此参数的页面就不必在转码了。直接使用<br /><pre>String str = request.getParameter("something")；</pre>即可得到汉字参数。但每页都需要执行这句话。这个方法也就对post提交的有效果，对于get提交和上传文件时的enctype="multipart/form-data"是无效的。稍后下面单独对这个两个的乱码情况再进行说明。<br /><strong>c.</strong> 为了避免每页都要写request.setCharacterEncoding("UTF-8")，建议使用过滤器对所有jsp进行编码处理。这个网上有很多例子。请大家自己查阅。<br /><u><strong>表单get提交方式的乱码处理方式</strong></u><br />如果使用get方式提交中文，接受参数的页面也会出现乱码，这个乱码的原因也是tomcat的内部编码格式iso8859-1导致。Tomcat会以get的缺省编码方式iso8859-1对汉字进行编码，编码后追加到url，导致接受页面得到的参数为乱码/、。<br /><strong>解决办法：</strong><br /><strong>a.</strong> 使用上例中的第一种方式，对接受到的字符进行解码，再转码。<br /><strong>b.</strong> Get走的是url提交，而在进入url之前已经进行了iso8859-1的编码处理。要想影响这个编码则需要在server.xml的 Connector节点增加useBodyEncodingForURI="true"属性配置，即可控制tomcat对get方式的汉字编码方式，上面 这个属性控制get提交也是用request.setCharacterEncoding("UTF-8")所设置的编码格式进行编码。所以自动编码为 utf-8，接受页面正常接受就可以了。但我认为真正的编码过程是，tomcat又要根据<br /><pre>＜Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000" useBodyEncodingForURI="true"
disableUploadTimeout="true" URIEncoding=&#8221;UTF-8&#8221;/＞</pre>里面所设置的URIEncoding=&#8221;UTF-8&#8221;再进行一次编码，但是由于已经编码为utf-8，再编码也不会有变化了。如果是从url获取编码，接受页面则是根据URIEncoding=&#8221;UTF-8&#8221;来进行解码的。<br /></div><br /></div><img src ="http://www.blogjava.net/liuyz2006/aggbug/401092.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2013-06-30 21:31 <a href="http://www.blogjava.net/liuyz2006/articles/401092.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP和Servlet中的几个编码的感化及道理(转)</title><link>http://www.blogjava.net/liuyz2006/articles/401091.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Sun, 30 Jun 2013 13:29:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/401091.html</guid><description><![CDATA[<p>起首，说说JSP和Servlet中的几个编码的感化。</p><br />
<p>在JSP和Servlet中首要有以下几个处所可以设置编码，pageEncoding="UTF-8"、contentType="text/html;charset=UTF- 8"、request.setCharacterEncoding（"UTF-8"）和 response.setCharacterEncoding（"UTF-8"），此中前两个只能用于JSP中，而后两个可以用于JSP和Servlet中。</p><br />
<p>1、pageEncoding="UTF-8"的感化是设置JSP编译成Servlet时应用的编码。</p><br />
<p>众所周知，JSP在办事器上是要先被编译成Servlet的。pageEncoding="UTF-8"的感化就是告诉JSP编译器在将JSP文件编译成Servlet时应用的编码。凡是，在JSP内部定义的字符串（直接在JSP中定义，而不是从浏览器提交的数据）呈现乱码时，很多都是因为该参数设置错误引起的。例如，你的JSP文件是以GBK为编码保存的，而在JSP中却指定pageEncoding="UTF-8"，就会引起JSP内部定义的字符串为乱码。</p><br />
<p>别的，该参数还有一个功能，就是在JSP中不指定contentType参数，也不应用response.setCharacterEncoding办法时，指定对办事器响应进行从头编码的编码。</p><br />
<p>2、contentType="text/html;charset=UTF-8"的感化是指定对办事器响应进行从头编码的编码。</p><br />
<p>在不应用response.setCharacterEncoding办法时，用该参数指定对办事器响应进行从头编码的编码。3、request.setCharacterEncoding（"UTF-8"）的感化是设置对客户端恳求进行从头编码的编码。</p><br />
<p>该办法用来指定对浏览器发送来的数据进行从头编码（或者称为解码）时，应用的编码。</p><br />
<p>4、response.setCharacterEncoding（"UTF-8"）的感化是指定对办事器响应进行从头编码的编码。</p><br />
<p>办事器在将数据发送到浏览器前，对数据进行从头编码时，应用的就是该编码。</p><br />
<p>其次，要说一说浏览器是怎么样对接管和发送的数据进行编码的</p><br />
<p>response.setCharacterEncoding（"UTF-8"）的感化是指定对办事器响应进行从头编码的编码。同时，浏览器也是按照这个参数来对其接管到的数据进行从头编码（或者称为解码）。所以在无论你在JSP中设置response.setCharacterEncoding（"UTF-8"）或者 response.setCharacterEncoding（"GBK"），浏览器均能正确显示中文（前提是你发送到浏览器的数据编码是正确的，比如正确设置了pageEncoding参数等）。读者可以做个实验，在JSP中设置response.setCharacterEncoding（"UTF-8"），在IE中显示该页面时，在IE的菜单中选择"查看（V）"&#224;"编码（D）"中可以查看到是" Unicode（UTF-8）"，而在在JSP中设置response.setCharacterEncoding（"GBK"），在IE中显示该页面时，在IE的菜单中选择"查看（V）"&#224;"编码（D）"中可以查看到是"简体中文（GB2312）"。</p><br />
<p>浏览器在发送数据时，对URL和参数会进行URL编码，对参数中的中文，浏览器也是使 response.setCharacterEncoding参数来进行URL编码的。以百度和GOOGLE为例，若是你在百度中搜刮"汉字"，百度会将其编码为"％BA％BA％D7％D6"。而在GOOGLE中搜刮"汉字"，GOOGLE会将其编码为"％E6％B1％89％E5％AD％97"，这是因为百度的response.setCharacterEncoding参数为GBK，而GOOGLE的的 response.setCharacterEncoding参数为UTF-8。</p><br />
<p>浏览器在接管办事器数据和发送数据到办事器时所应用的编码是雷同的，默认景象下均为JSP页面的response.setCharacterEncoding参数（或者contentType和pageEncoding参数），我们称其为浏览器编码。当然，在IE中可以批改浏览器编码（在IE的菜单中选择"查看（V）"&#224;"编码（D）"中批改），但凡是景象下，批改该参数会使底本正确的页面中呈现乱码。一个有趣的例子是，在IE中浏览GOOGLE的主页时，将浏览器编码批改为"简体中文（GB2312）"，此时，页面上的中文会变成乱码，不睬它，在文本框中输入"汉字"，提交，GOOGLE会将其编码为"％BA％BA％D7％D6"，可见，浏览器在对中文进行URL编码时，应用的就是浏览器编码。</p><br />
<p>弄清了浏览器是在接管和发送数据时，是如何对数据进行编码的了，我们再来看看办事器是在接管和发送数据时，是如何对数据进行编码的。</p><br />
<p>对于发送数据，办事器遵守response.setCharacterEncoding&#8212;contentType&#8212;pageEncoding的优先次序，对要发送的数据进行编码。</p><br />
<p>对于接管数据，要分三种景象。一种是浏览器直接用URL提交的数据，别的两种是用表单的GET和POST体式格式提交的数据。</p><br />
<p>因为各类WEB办事器对这三种体式格式的处理惩罚也不雷同，所以我们以Tomcat5.0为例。</p><br />
<p>无论应用那种体式格式提交，若是参数中包含中文，浏览器都邑应用当前浏览器编码对其进行URL编码。</p><br />
<p>对于表单中POST体式格式提交的数据，只要在接管数据的JSP中正确request.setCharacterEncoding参数，即将对客户端恳求进行从头编码的编码设置成浏览器编码，就可以包管获得的参数编码正确。有写读者可能会问，那如何获得浏览器编码呢？上方我们提过了，在默认请景象下，浏览器编码就是你在响应当恳求的JSP页面中response.setCharacterEncoding设置的值。所以对于POST表单提交的数据，在获得数据的JSP页面中request.setCharacterEncoding要和生成提交该表单的JSP页面的response.setCharacterEncoding设置成雷同的值。</p><br />
<p>对于URL提交的数据和表单中GET体式格式提交的数据，在接管数据的JSP中设置request.setCharacterEncoding参数是不可的，因为在Tomcat5.0中，默认景象下应用ISO-8859-1对URL 提交的数据和表单中GET体式格式提交的数据进行从头编码（解码），而不应用该参数对URL提交的数据和表单中GET体式格式提交的数据进行从头编码（解码）。要解决该题目，应当在Tomcat的设备文件的Connector标签中设置useBodyEncodingForURI或者URIEncoding属性，此中useBodyEncodingForURI参数默示是否用request.setCharacterEncoding参数对URL提交的数据和表单中GET体式格式提交的数据进行从头编码，在默认景象下，该参数为false（Tomcat4.0中该参数默认为true）；URIEncoding参数指定对所有GET体式格式恳求（包含URL提交的数据和表单中GET体式格式提交的数据）进行同一的从头编码（解码）的编码。URIEncoding和 useBodyEncodingForURI差别是，URIEncoding是对所有GET体式格式的恳求的数据进行同一的从头编码（解码），而 useBodyEncodingForURI则是按照响应当恳求的页面的request.setCharacterEncoding参数对数据进行的从头编码（解码），不合的页面可以有不合的从头编码（解码）的编码。所以对于URL提交的数据和表单中GET体式格式提交的数据，可以批改URIEncoding 参数为浏览器编码或者批改useBodyEncodingForURI为true，并且在获得数据的JSP页面中request.setCharacterEncoding参数设置成浏览器编码。</p><br />
<p>下面总结下，以Tomcat5.0为WEB办事器时，如何防止中文乱码。</p><br />
<p>1、对于同一个应用，最好同一编码，推荐为UTF-8，当然GBK也可以。</p><br />
<p>2、正确设置JSP的pageEncoding参数</p><br />
<p>3、在所有的JSP和Servlet中设置contentType="text/html;charset=UTF-8"或response.setCharacterEncoding（"UTF-8"），从而间接实现对浏览器编码的设置。</p><br />
<p>4、对于恳求，可以应用过滤器或者在每个JSP和Servlet中设置request.setCharacterEncoding（"UTF-8"）。同时，要批改Tomcat的默认设备，推荐将 useBodyEncodingForURI参数设置为true，也可以将URIEncoding参数设置为UTF-8（有可能影响其他应用，所以不推荐）。</p><img src ="http://www.blogjava.net/liuyz2006/aggbug/401091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2013-06-30 21:29 <a href="http://www.blogjava.net/liuyz2006/articles/401091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从HelloWorld.jsp理解JSP技术的运行内幕</title><link>http://www.blogjava.net/liuyz2006/articles/384776.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Sat, 04 Aug 2012 13:26:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/384776.html</guid><wfw:comment>http://www.blogjava.net/liuyz2006/comments/384776.html</wfw:comment><comments>http://www.blogjava.net/liuyz2006/articles/384776.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuyz2006/comments/commentRss/384776.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuyz2006/services/trackbacks/384776.html</trackback:ping><description><![CDATA[<h2 class="title content-title">从HelloWorld.jsp理解JSP技术的运行内幕</h2>
<div class="content text-content clearfix" id="content">
<p>众所周知，JSP和Servlet之间有着内在的血缘关系。</p>
<p>1.HelloWorld.jsp代码：<br />&nbsp;&nbsp;&nbsp; &lt;%<br />&nbsp;&nbsp;&nbsp;&nbsp; String message = "Hello World!";<br />&nbsp;&nbsp;&nbsp; %&gt;<br />&nbsp;&nbsp;&nbsp; &lt;%=message%&gt;</p>
<p>这个文件非常简单，仅仅定义了一个String的变量，并且输出。把这个文件放到Tomcat的webapps\ROOT\目录下，启动Tomcat，在浏览器中访问<a href="http://localhost:8080/HelloWorld.jsp">http://localhost:8080/HelloWorld.jsp</a>，浏览器中的输出为&#8220;HelloWorld!&#8221;</p>
<p>2.HelloWorld_jsp.java代码：</p>
<p>&nbsp;&nbsp;&nbsp; import javax.servlet.*;<br />&nbsp;&nbsp;&nbsp; import javax.servlet.http.*;<br />&nbsp;&nbsp;&nbsp; import javax.servlet.jsp.*;<br />&nbsp;&nbsp;&nbsp; import org.apache.jasper.runtime.*;</p>
<p>&nbsp;&nbsp;&nbsp; public class HelloWorld_jsp extends HttpJspBase {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static java.util.List _jspx_dependants;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public Object getDependants() {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return _jspx_dependants;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void _jspService(HttpServletRequest request, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpServletResponse response)throws java.io.IOException, ServletException{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JspFactory _jspxFactory = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; javax.servlet.jsp.PageContext pageContext = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpSession session = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServletContext application = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServletConfig config = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JspWriter out = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object page = this;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JspWriter _jspx_out = null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _jspxFactory = JspFactory.getDefaultFactory();//调用JspFactory的getDefaultFactory()方法获取容器实现的一个JspFactory对象的引用<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.setContentType("text/html;charset=ISO-8859-1");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pageContext = _jspxFactory.getPageContext(this, request, response,null, true, 8192, true);//填充一个PageContext返回，并赋给内置变量 pageConext<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; application = pageContext.getServletContext();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; config = pageContext.getServletConfig();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session = pageContext.getSession();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out = pageContext.getOut();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _jspx_out = out;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String message = "Hello World!";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.print(message);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Throwable t) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out = _jspx_out;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (out != null &amp;&amp; out.getBufferSize() != 0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.clearBuffer();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (pageContext != null) pageContext.handlePageException(t);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } finally {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (_jspxFactory != null) _jspxFactory.releasePageContext(pageContext);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 转到Tomcat的\work\Standalone\localhost\_目录下，可以找到如下的HelloWorld_jsp.java，这个文件就是Tomcat解析HelloWorld.jsp时生成的源文件。由此可见，HelloWorld.jsp在运行时首先解析成一个Java类HelloWorld_jsp.java，该类继承于org.apache.jasper.runtime.HttpJspBase基类，HttpJspBase实现了HttpServlet接口。因此，JSP在运行前首先将编译为一个Servlet，这就是理解JSP技术的关键。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先，调用JspFactory的getDefaultFactory()方法获取容器实现的一个JspFactory对象的引用。JspFactory是javax.servlet.jsp包中定义的一个抽象类，其中定义了两个静态方法setDefaultFactory()/getDefaultFactory()。set方法由JSP容器（Tomcat）实例化该页面Servlet（即 HelloWorld_jsp类）的时候置入，所以可以直接调用JspFactory.getDefaultFactory()方法得到这个JSP工厂的实现类。Tomcat是调用org.apache.jasper.runtime.JspFactoryImpl类。</p>
<p>　　然后，调用这个JspFactoryImpl的getPageContext()方法，填充一个PageContext返回，并赋给内置变量 pageConext。其它内置对象都经由该pageContext得到。具体过程见上面的代码，这里不再赘述。该页面Servlet的环境设置完毕，开始对页面进行解析。HelloWorld.jsp页面仅仅定义了一个String变量，然后直接输出。解析后的代码如下：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String message = "Hello World!";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.print(message);</p></div><img src ="http://www.blogjava.net/liuyz2006/aggbug/384776.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-08-04 21:26 <a href="http://www.blogjava.net/liuyz2006/articles/384776.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse的web工程转myeclipse的web工程(转)</title><link>http://www.blogjava.net/liuyz2006/articles/382480.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Sat, 07 Jul 2012 14:27:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/382480.html</guid><wfw:comment>http://www.blogjava.net/liuyz2006/comments/382480.html</wfw:comment><comments>http://www.blogjava.net/liuyz2006/articles/382480.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuyz2006/comments/commentRss/382480.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuyz2006/services/trackbacks/382480.html</trackback:ping><description><![CDATA[<div class="postTitle">　　eclipse的web工程转myeclipse的web工程<br /></div>
<div id="cnblogs_post_body"><pre class="reply-text mb10">1.原eclipse工程叫netschool 
2.在myeclipse中新建一个工程叫netschool 并在新建的时修改 web root folder为WebContent 
3.备份在myeclipse新建的netschool工程下的.classpath 和.mymetadata和.project以及.myeclipse文件夹 
4.删除在myeclipse新建的netschool工程 
5.通过svn 或cvs checkout 原eclipse工程netschool  拷贝第三步备份的文件到netschool工程根目录下 
6.刷新工程即可&nbsp;</pre><pre class="reply-text mb10">　　myeclipse的web工程转eclipse的web工程</pre><pre class="reply-text mb10">1.先在eclipse里创建一个同名项目,eg:pjt,然后将pjt改名为pjt.bak.<br />2.从svn上check out这个项目pjt。<br />3.打开pjt.bak,复制.settings文件夹、.classpath、.project这个三个文件覆盖pjt项目下的同名文件。</pre></div><img src ="http://www.blogjava.net/liuyz2006/aggbug/382480.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-07-07 22:27 <a href="http://www.blogjava.net/liuyz2006/articles/382480.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在MyEclipse中配置Tomcat服务器 </title><link>http://www.blogjava.net/liuyz2006/articles/381910.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Sun, 01 Jul 2012 02:22:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/381910.html</guid><wfw:comment>http://www.blogjava.net/liuyz2006/comments/381910.html</wfw:comment><comments>http://www.blogjava.net/liuyz2006/articles/381910.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuyz2006/comments/commentRss/381910.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuyz2006/services/trackbacks/381910.html</trackback:ping><description><![CDATA[<div class="article_title" sizcache="1" sizset="27"><span class="ico ico_type_Original"></span>
<h3 sizcache="1" sizset="27"><span class="link_title" sizcache="1" sizset="27"><a href="http://blog.csdn.net/standlww/article/details/2029480">在MyEclipse中配置Tomcat服务器 </a></span></h3></div>
<div class="article_manage" sizcache="1" sizset="28"><span class="link_postdate">2008-01-07 23:00</span> <span class="link_view" title="阅读次数">28806人阅读</span> <span class="link_comments" title="评论次数" sizcache="1" sizset="28"><a href="http://blog.csdn.net/standlww/article/details/2029480#comments">评论</a>(14)</span> <span class="link_collect" sizcache="1" sizset="29"><a title="收藏" href="javascript:void(0);">收藏</a></span> <span class="link_report" sizcache="1" sizset="30"><a title="举报" href="http://blog.csdn.net/standlww/article/details/2029480#report">举报</a></span> </div>
<div class="article_content" id="article_content">
<div>郁闷！为了在MyEclipse配置Tomcat 服务器，竟然弄了我几乎一个上午，也没弄成功，最后才注意到本该早注意到Tomcat 5.x还有个JDK这个东东，才成功了。一上午辛辛苦苦也没解决就是因为没注意到他害的，其实配置是很简单的。下面是其步骤：<br />&nbsp; 一、单击工具栏的<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/standlww/0.jpg" />的黑小三角或者单击 菜单栏窗口&#8212;&gt;首选项，出现首选项对话框，在对话框的左边框中找到MyEclipse&#8212;&gt;Application Servers下找到Tomcat选项，如下图，</div>
<div><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/standlww/1.jpg" /></div>
<div>二、根据自己的Tomcat版本选择相应的Tomcat选项（我的是5.0版本），然后在对话框右侧的Tomcat home directory选项选择Tomcat的安装目录，下面的Tomcat base directory和Tomcat temp directory系统会自动为你填上，Optional&nbsp; program arguments可以不用填,我也不知道这是做什么用的,再选上Enable选项，要不然在待会儿在Server中看不到Tomcat服务器</div>
<div>三、千万别忘了Tomcat 选项下面的JDK，我就是因为没注意到它才一直不成功，单击JDK,弹出如下对话框，</div>
<div>Notes会提示你怎么做，</div>
<div><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/standlww/2.jpg" /></div>
<div>四、点击Tomcat JDK name旁的"Add"，弹出如下对话框：</div>
<div><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/standlww/5.jpg" /></div>
<div>JRE名称(N)选项填上名字（可以随便取），在JRE主目录选项选择你的jdk安装目录(仅仅只是jdk,不包含jre)，JRE系统库系统会自动添加,缺省JVM参数可以不用填,按&#8220;确定&#8221;回到上级再按&#8220;确定&#8221;就OK了。</div>
<div>如果你配置的不对的话会弹出出错提示对话框</div>
<div><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/standlww/9.jpg" /></div>
<div>就是Notes提示的第一条。</div>
<div>五、回到MyEclipse主界面，在Server下多了个Tomcat选项，右键单击Tomcat，选择Mannage Deployment（如果你不配置的话等一下你是运行不了项目的），弹出Srever Deployments对话框，在Server选项上选择你刚刚配置的Tomcat服务，点击"Add"，弹出New Deployment对话框，</div>
<div><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/standlww/8.jpg" /></div>
<div>在Project上选择你要运行的项目，单击&#8220;完成&#8221;返回上一级按&#8220;确定&#8221;就可以了。</div>
<div><span>&nbsp; </span>最后启动Tomcat服务器，在Web Browser输入地址，到这里就大功告成了。</div>
<div>是不是发现原来很简单呢!</div>
<div style="text-indent: 10.5pt">提醒一下，在New Deployment对话框中的Packaged Archive选项是把项目打包成.war形式运行的。</div>
<div><span>&nbsp;</span>　刚开始是因为MyEclipse自带的Derby不会用，才去配置Tomcat的，等Tomcat配置成功后，也就明白怎么用Derby了，其实很简单，配置都不用你去配，系统已经帮你配好了，你只要启动它就行了。</div>
<div>只是感觉MyEclipse这方面没Lomboz&#8212;Elipse那么方便，只要在想要执行的jsp文件上选择&#8220;Run on Server&#8221;就行了，在MyEclipse下不行。</div>
<div>&nbsp;</div></div><img src ="http://www.blogjava.net/liuyz2006/aggbug/381910.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-07-01 10:22 <a href="http://www.blogjava.net/liuyz2006/articles/381910.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spket在Eclipse/MyEclipse下的安装和配置（图文教程） </title><link>http://www.blogjava.net/liuyz2006/articles/381909.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Sun, 01 Jul 2012 01:40:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/381909.html</guid><wfw:comment>http://www.blogjava.net/liuyz2006/comments/381909.html</wfw:comment><comments>http://www.blogjava.net/liuyz2006/articles/381909.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuyz2006/comments/commentRss/381909.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuyz2006/services/trackbacks/381909.html</trackback:ping><description><![CDATA[<div class="article_title" sizset="27" sizcache="1"><span class="ico ico_type_Original"></span>
<h3 sizset="27" sizcache="1"><span class="link_title" sizset="27" sizcache="1"><a href="http://blog.csdn.net/elifefly/article/details/3745637">Spket在Eclipse/MyEclipse下的安装和配置（图文教程） </a></span></h3></div>
<div class="article_manage" sizset="28" sizcache="1"><span class="link_categories" sizset="28" sizcache="1">分类： <a href="http://blog.csdn.net/elifefly/article/category/347185">1.1J2se</a> <a href="http://blog.csdn.net/elifefly/article/category/485092">6.2-ExtJS</a> </span><span class="link_postdate">2009-01-10 12:05</span> <span class="link_view" title="阅读次数">13586人阅读</span> <span class="link_comments" title="评论次数" sizset="30" sizcache="1"><a href="http://blog.csdn.net/elifefly/article/details/3745637#comments">评论</a>(14)</span> <span class="link_collect" sizset="31" sizcache="1"><a title="收藏" href="javascript:void(0);">收藏</a></span> <span class="link_report" sizset="32" sizcache="1"><a title="举报" href="http://blog.csdn.net/elifefly/article/details/3745637#report">举报</a></span> </div>
<div id="article_content" class="article_content" sizset="33" sizcache="1">
<p style="font-size: 15pt"><font color="#ff6600">&nbsp;一、安装Spket</font></p>
<p><font color="#0000ff">第一种方法：网上更新方式</font></p>
<p sizset="33" sizcache="1">1.插件首页：<a href="http://www.spket.com/">http://www.spket.com</a><br />2.插件名称：Spket IDE<br />3.更新连接（Update Site）：<a href="http://www.spket.com/update/">http://www.spket.com/update/</a> <br />更新安装方法：</p>
<p>1.[Help]-[Software Updates]-[Find and Install...]</p>
<p>2.[Search for new features to install] -&gt; [Next] </p>
<p sizset="35" sizcache="1">3.[New Remote Site...] Name: "什么都行，spketjs" URL: <a href="http://www.spket.com/update/">http://www.spket.com/update/</a>--&gt; [Finish]</p>
<p>&nbsp;</p>
<p><font color="#0000ff">第二种方法：网上下载spket-1.6.16.jar破解版（目前最新版本）</font> 
<p><font color="#0000ff"></font>
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/elifefly/EntryImages/20090110/1.jpg" /></p>
<p>1.如果你的JDK在1.6以上，可以直接双击<font color="#0000ff">spket-1.6.16.jar</font>运行安装。</p>
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/elifefly/EntryImages/20090110/2.jpg" width="520" height="502" /> 
<p>其它，使用命令行方式。（注意：自己切换命令行到<font color="#0000ff">spket-1.6.16.jar</font>所在目录） 
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/elifefly/EntryImages/20090110/3.jpg" /> 
<p>2. 
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/elifefly/EntryImages/20090110/4.jpg" /> 
<p>
<p>
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/elifefly/EntryImages/20090110/5.jpg" />&nbsp;<br /><strong><span style="color: red">myeclipse10 中无eclipse,要选中MyEclipse 10</span><br /></strong>
<p>
<p>
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/elifefly/EntryImages/20090110/6.jpg" />&nbsp; 
<p>
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/elifefly/EntryImages/20090110/7.jpg" /> 
<p>
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/elifefly/EntryImages/20090110/11.jpg" /> 
<p>至此，安装完成。 
<p>
<p>
<p><font color="#0000ff"></font>
<p style="font-size: 15pt"><font color="#ff6600">二、配置Spket</font></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><font color="#ff0000">注意：如果在安装spket过程中，你的eclipse或者Myeclipse是打开的，请重启eclipse或者Myeclipse。以便初始化插件，下面才会在Preferences中看到 Spket选项。</font></p>
<p>基本步骤如下：<br />1)Window &#8594; Preferences &#8594; Spket ； </p>
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/elifefly/EntryImages/20090110/12.jpg" /><br /></p>
<p>&nbsp;</p>
<p>2)Spket &#8594; JavaScript Profiles &#8594; New， 输入&#8220;ExtJS&#8221;点击OK； </p>
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/elifefly/EntryImages/20090110/13.jpg" /><br />3)选择&#8220;ExtJS&#8221; 并点击&#8220;Add Library&#8221;然后在下拉条中选取&#8220;ExtJS&#8221;； </p>
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/elifefly/EntryImages/20090110/14.jpg" width="617" height="429" /><br />4)选择 &#8220;ExtJS&#8221;并点击&#8220;Add File&#8221;，然后在你的./ext-2.x/source目录中选取&#8220;ext.jsb&#8221; 文件；</p>
<p>&nbsp;<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/elifefly/EntryImages/20090110/15.jpg" /><br />5)设置新的ExtJS Profile，选中并点击&#8220;JavaScript Profiles&#8221; 对话框右手边的&#8220;Defalut&#8221;按钮；</p>
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/elifefly/EntryImages/20090110/17.jpg" /></p>
<p>下面这个操作，根据自己需要设置（可以全选）。</p>
<p>&nbsp;<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/elifefly/EntryImages/20090110/16.jpg" /><br />6)重启eclipse或者Myeclipse；</p>
<p><br />7)创建新的JS文件并输入： Ext这样就可设置Ext Code代码自动完成的功能。</p>
<p>效果如下：</p>
<p><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/elifefly/EntryImages/20090110/18.jpg" /></p>
<p>&nbsp;</p>
<p><img alt="" src="http://www.blogjava.net/images/blogjava_net/redhatlinux/spket.gif" width="744" height="377" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p></div><img src ="http://www.blogjava.net/liuyz2006/aggbug/381909.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-07-01 09:40 <a href="http://www.blogjava.net/liuyz2006/articles/381909.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaBean+Servlet+jsp真分页实现</title><link>http://www.blogjava.net/liuyz2006/articles/368522.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Sat, 14 Jan 2012 14:40:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/368522.html</guid><wfw:comment>http://www.blogjava.net/liuyz2006/comments/368522.html</wfw:comment><comments>http://www.blogjava.net/liuyz2006/articles/368522.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/liuyz2006/comments/commentRss/368522.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuyz2006/services/trackbacks/368522.html</trackback:ping><description><![CDATA[<div class="articalTitle">
<h2 class="titName SG_txta" id="t_62b7c2210100j4im">JavaBean+Servlet+jsp真分页实现</h2></div>
<div class="articalTag" id="sina_keyword_ad_area">&nbsp;</div><!-- 正文开始 -->

<div class="articalContent  " id="sina_keyword_ad_area2">
<p>JavaBean</p>
<p>package Bean;<br />//物品类<br />public class Goods<br />{<br />&nbsp;<wbr>private int goodsid; &nbsp;<wbr>// 物品编号<br />&nbsp;<wbr>public String goodsname;&nbsp;<wbr> &nbsp;<wbr>// 物品名称<br />&nbsp;<wbr>private float price;&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &nbsp;<wbr>// 物品单件</p>
<p>&nbsp;<wbr>public void setGoodsid(int goodsid)<br />&nbsp;<wbr>{<br />&nbsp;<wbr>&nbsp;<wbr>this.goodsid = goodsid;<br />&nbsp;<wbr>}<br />&nbsp;<wbr>public int getGoodsid()<br />&nbsp;<wbr>{<br />&nbsp;<wbr>&nbsp;<wbr>return goodsid;<br />&nbsp;<wbr>}<br />&nbsp;<wbr>// 物品名称<br />&nbsp;<wbr>public void setGoodsname(String goodsname)<br />&nbsp;<wbr>{<br />&nbsp;<wbr>&nbsp;<wbr>this.goodsname = goodsname;<br />&nbsp;<wbr>}<br />&nbsp;<wbr>public String getGoodsname()<br />&nbsp;<wbr>{<br />&nbsp;<wbr>&nbsp;<wbr>return goodsname;<br />&nbsp;<wbr>}<br />&nbsp;<wbr>// 物品价格<br />&nbsp;<wbr>public void setPrice(float price)<br />&nbsp;<wbr>{<br />&nbsp;<wbr>&nbsp;<wbr>this.price = price;<br />&nbsp;<wbr>}<br />&nbsp;<wbr>public float getPrice()<br />&nbsp;<wbr>{<br />&nbsp;<wbr>&nbsp;<wbr>return price;<br />&nbsp;<wbr>}<br />}</p>
<p>单例类</p>
<p>package util;</p>
<p>import java.sql.Connection;<br />import java.sql.DriverManager;<br />import java.sql.SQLException;</p>
<p>public class DbConnection {<br />&nbsp;<wbr>private static Connection conn=null;<br />&nbsp;<wbr>private String driver="com.mysql.jdbc.Driver";<br />&nbsp;<wbr>private String url="jdbc:mysql://localhost:3306/mydata";<br />&nbsp;<wbr>private String user="root";<br />&nbsp;<wbr>private String password="1234567";<br />&nbsp;<wbr><br />&nbsp;<wbr>private DbConnection(){<br />&nbsp;<wbr>&nbsp;<wbr>try {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>Class.forName(driver);<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>conn=DriverManager.getConnection(url, user, password);<br />&nbsp;<wbr>&nbsp;<wbr>} catch (ClassNotFoundException e) {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>e.printStackTrace();<br />&nbsp;<wbr>&nbsp;<wbr>} catch (SQLException e) {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>e.printStackTrace();<br />&nbsp;<wbr>&nbsp;<wbr>}<br />&nbsp;<wbr>}<br />&nbsp;<wbr><br />&nbsp;<wbr>public static Connection getConnection() {<br />&nbsp;<wbr>&nbsp;<wbr>if(conn==null){<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>new DbConnection();<br />&nbsp;<wbr>&nbsp;<wbr>}<br />&nbsp;<wbr>&nbsp;<wbr>return conn;<br />&nbsp;<wbr>}<br />}<br /></p>
<p>数据库访问实现</p>
<p>package DAO;</p>
<p>import java.sql.Connection;<br />import java.sql.ResultSet;<br />import java.sql.SQLException;<br />import java.sql.Statement;<br />import java.util.ArrayList;</p>
<p>import Bean.Goods;</p>
<p>import util.DbConnection;</p>
<p>public class Dao {<br />&nbsp;<wbr>private static Connection conn;<br />&nbsp;<wbr>private static ResultSet rs;<br />&nbsp;<wbr>private static Statement stmt;<br />&nbsp;<wbr>private static int pagesize=5;<br />&nbsp;<wbr>static{<br />&nbsp;<wbr>&nbsp;<wbr>conn=DbConnection.getConnection();<br />&nbsp;<wbr>}<br />&nbsp;<wbr><br />&nbsp;<wbr>//通用的查询方法<br />&nbsp;<wbr>public static ResultSet ExecuteQuery(String sql) {<br />&nbsp;<wbr>&nbsp;<wbr>try {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>stmt=conn.createStatement();<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>rs=stmt.executeQuery(sql);<br />&nbsp;<wbr>&nbsp;<wbr>} catch (SQLException e) {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>e.printStackTrace();<br />&nbsp;<wbr>&nbsp;<wbr>}<br />&nbsp;<wbr>&nbsp;<wbr>return rs;<br />&nbsp;<wbr>}<br />&nbsp;<wbr><br />&nbsp;<wbr>//分页逻辑<br />&nbsp;<wbr>public static ArrayList&lt;Goods&gt; getGoodsList(int currentpageno){<br />&nbsp;<wbr>&nbsp;<wbr>ArrayList&lt;Goods&gt; GoodsList=new ArrayList&lt;Goods&gt;();<br />&nbsp;<wbr>&nbsp;<wbr>int BeginRecord=(currentpageno-1)*pagesize;<br />&nbsp;<wbr>&nbsp;<wbr>int EndRecord=currentpageno*pagesize;<br />&nbsp;<wbr>&nbsp;<wbr>rs=ExecuteQuery("select * from goods limit "+BeginRecord+","+EndRecord);<br />&nbsp;<wbr>&nbsp;<wbr>try {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>while(rs.next()){<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>Goods goods=new Goods();<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>goods.setGoodsid(rs.getInt(1));<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>goods.setGoodsname(rs.getString(2));<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>goods.setPrice(rs.getFloat(3));<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>GoodsList.add(goods);<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>}<br />&nbsp;<wbr>&nbsp;<wbr>} catch (SQLException e) {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>e.printStackTrace();<br />&nbsp;<wbr>&nbsp;<wbr>}<br />&nbsp;<wbr>&nbsp;<wbr>return GoodsList;<br />&nbsp;<wbr>}<br />&nbsp;<wbr><br />&nbsp;<wbr>//统计记录数<br />&nbsp;<wbr>public static int getPageCount(){<br />&nbsp;<wbr>&nbsp;<wbr>int total=0;<br />&nbsp;<wbr>&nbsp;<wbr>int PageCount=0;<br />&nbsp;<wbr>&nbsp;<wbr>rs=ExecuteQuery("select count(*) from goods");<br />&nbsp;<wbr>&nbsp;<wbr>try {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>if(rs.next()){<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>total=rs.getInt(1);<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>PageCount=(total-1)/pagesize+1;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>}<br />&nbsp;<wbr>&nbsp;<wbr>} catch (SQLException e) {<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>e.printStackTrace();<br />&nbsp;<wbr>&nbsp;<wbr>}<br />&nbsp;<wbr>&nbsp;<wbr>return PageCount;<br />&nbsp;<wbr>}<br />}<br /></p>
<p>servlet控制器</p>
<p>package servlet;</p>
<p>import java.io.IOException;<br />import java.io.PrintWriter;<br />import java.util.ArrayList;</p>
<p>import javax.servlet.ServletException;<br />import javax.servlet.http.HttpServlet;<br />import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;</p>
<p>import Bean.Goods;<br />import DAO.Dao;</p>
<p>public class GetLimiteGoods extends HttpServlet {<br />&nbsp;<wbr>private static final long serialVersionUID = 1L;<br />&nbsp;<wbr>public void doGet(HttpServletRequest request, HttpServletResponse response)<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>throws ServletException, IOException {<br />&nbsp;<wbr>&nbsp;<wbr>response.setContentType("text/html");<br />&nbsp;<wbr>&nbsp;<wbr>String pageno= request.getParameter("currentpageno");<br />&nbsp;<wbr>&nbsp;<wbr>int currentpageno=1;<br />&nbsp;<wbr>&nbsp;<wbr>if(pageno!=null){<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>currentpageno=Integer.parseInt(pageno);<br />&nbsp;<wbr>&nbsp;<wbr>}<br />&nbsp;<wbr>&nbsp;<wbr>ArrayList&lt;Goods&gt; GoodsList=Dao.getGoodsList(currentpageno);<br />&nbsp;<wbr>&nbsp;<wbr>request.setAttribute("GoodsList", GoodsList);<br />&nbsp;<wbr>&nbsp;<wbr>request.setAttribute("currentpageno", currentpageno);<br />&nbsp;<wbr>&nbsp;<wbr>request.setAttribute("PageCount", Dao.getPageCount());<br />&nbsp;<wbr>&nbsp;<wbr>request.getRequestDispatcher("/LimiteGoods.jsp").forward(request, response);<br />&nbsp;<wbr>}</p>
<p>&nbsp;<wbr>public void doPost(HttpServletRequest request, HttpServletResponse response)<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>throws ServletException, IOException {</p>
<p>&nbsp;<wbr>&nbsp;<wbr>response.setContentType("text/html");<br />&nbsp;<wbr>&nbsp;<wbr>PrintWriter out = response.getWriter();<br />&nbsp;<wbr>&nbsp;<wbr>out<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>.println("&lt;!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"&gt;");<br />&nbsp;<wbr>&nbsp;<wbr>out.println("&lt;HTML&gt;");<br />&nbsp;<wbr>&nbsp;<wbr>out.println("&nbsp;<wbr> &lt;HEAD&gt;&lt;TITLE&gt;A Servlet&lt;/TITLE&gt;&lt;/HEAD&gt;");<br />&nbsp;<wbr>&nbsp;<wbr>out.println("&nbsp;<wbr> &lt;BODY&gt;");<br />&nbsp;<wbr>&nbsp;<wbr>out.print("&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> This is ");<br />&nbsp;<wbr>&nbsp;<wbr>out.print(this.getClass());<br />&nbsp;<wbr>&nbsp;<wbr>out.println(", using the POST method");<br />&nbsp;<wbr>&nbsp;<wbr>out.println("&nbsp;<wbr> &lt;/BODY&gt;");<br />&nbsp;<wbr>&nbsp;<wbr>out.println("&lt;/HTML&gt;");<br />&nbsp;<wbr>&nbsp;<wbr>out.flush();<br />&nbsp;<wbr>&nbsp;<wbr>out.close();<br />&nbsp;<wbr>}<br />}</p>
<p>&nbsp;<wbr></p>
<p>xml配置：</p>
<p>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;web-app version="2.5" xmlns="<a href="http://java.sun.com/xml/ns/javaee">http://java.sun.com/xml/ns/javaee</a>"<br />&nbsp;<wbr>xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>"<br />&nbsp;<wbr>xsi:schemaLocation="<a href="http://java.sun.com/xml/ns/javaee">http://java.sun.com/xml/ns/javaee</a><br />&nbsp;<wbr><a href="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd</a>"&gt;<br />&nbsp;<wbr> &lt;servlet&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &lt;description&gt;This is the description of my J2EE component&lt;/description&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &lt;display-name&gt;This is the display name of my J2EE component&lt;/display-name&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &lt;servlet-name&gt;GetLimiteGoods&lt;/servlet-name&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &lt;servlet-class&gt;servlet.GetLimiteGoods&lt;/servlet-class&gt;<br />&nbsp;<wbr> &lt;/servlet&gt;</p>
<p>&nbsp;<wbr> &lt;servlet-mapping&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &lt;servlet-name&gt;GetLimiteGoods&lt;/servlet-name&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> &lt;url-pattern&gt;/servlet/GetLimiteGoods&lt;/url-pattern&gt;<br />&nbsp;<wbr> &lt;/servlet-mapping&gt;<br />&lt;/web-app&gt;</p>
<p><br />表现层jsp</p>
<p>&lt;%@ page language="java" contentType="text/html; charset=UTF-8"<br />&nbsp;<wbr>pageEncoding="UTF-8"%&gt;<br />&nbsp;<wbr>&lt;%@ taglib prefix="c" uri="<a href="http://java.sun.com/jsp/jstl/core">http://java.sun.com/jsp/jstl/core</a>" %&gt;<br />&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "<a href="http://www.w3.org/TR/html4/loose.dtd">http://www.w3.org/TR/html4/loose.dtd</a>"&gt;<br />&lt;html&gt;<br />&nbsp;<wbr>&lt;head&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&lt;title&gt;Insert title here&lt;/title&gt;<br />&nbsp;<wbr>&lt;/head&gt;<br />&nbsp;<wbr>&lt;body&gt;<br />&nbsp;<wbr>&lt;center&gt;<br />&nbsp;<wbr>&lt;c:if test="${currentpageno&gt;=1}"&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;a href="GetLimiteGoods?currentpageno=1"&gt;首页&lt;/a&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;a href="GetLimiteGoods?currentpageno=${currentpageno-1}"&gt;上一页&lt;/a&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&lt;/c:if&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&lt;c:if test="${currentpageno==1}"&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;a href="GetLimiteGoods?currentpageno=${currentpageno+1}"&gt;下一页&lt;/a&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;a href="GetLimiteGoods?currentpageno=${PageCount}"&gt;尾页&lt;/a&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&lt;/c:if&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&lt;table width="80%" border="1" height="56"&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;tr align="center"&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;td&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>商品编号<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;/td&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;td&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>商品名称<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;/td&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;td&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>商品价格<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;/td&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;/tr&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;c:forEach var="goods" items="${GoodsList}"&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;tr align="center"&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;td&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>${goods.goodsid}<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;/td&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;td&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>${goods.goodsname}<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;/td&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;td&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>${goods.price}<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;/td&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;/tr&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&lt;/c:forEach&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&lt;/table&gt;<br />&nbsp;<wbr>&nbsp;<wbr>&lt;/center&gt;<br />&nbsp;<wbr>&lt;/body&gt;<br />&lt;/html&gt;</p></div><img src ="http://www.blogjava.net/liuyz2006/aggbug/368522.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-01-14 22:40 <a href="http://www.blogjava.net/liuyz2006/articles/368522.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsp通过jdbc访问oracle数据库之异常jre路径错误（转）</title><link>http://www.blogjava.net/liuyz2006/articles/368516.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Sat, 14 Jan 2012 13:57:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/368516.html</guid><wfw:comment>http://www.blogjava.net/liuyz2006/comments/368516.html</wfw:comment><comments>http://www.blogjava.net/liuyz2006/articles/368516.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuyz2006/comments/commentRss/368516.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuyz2006/services/trackbacks/368516.html</trackback:ping><description><![CDATA[<div class="articalTitle">
<h2 class="titName SG_txta" id="t_62b7c2210100hx1c">jsp通过jdbc访问oracle数据库之异常jre路径错误（转）</h2></div><!-- 正文开始 -->

<div class="articalContent  " id="sina_keyword_ad_area2">
<p>jsp通过jdbc访问oracle数据库之异常</p>
<p>HTTP Status 500 -</p>
<p>--------------------------------------------------------------------------------</p>
<p>type Exception report</p>
<p>message</p>
<p>description The server encountered an internal error () that prevented it from fulfilling this request.</p>
<p>exception</p>
<p>org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver<br />&nbsp;<wbr>org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522)<br />&nbsp;<wbr>org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:398)<br />&nbsp;<wbr>org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)<br />&nbsp;<wbr>org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)<br />&nbsp;<wbr>javax.servlet.http.HttpServlet.service(HttpServlet.java:803)</p>
<p><br />root cause</p>
<p>javax.servlet.ServletException: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver<br />&nbsp;<wbr>org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:850)<br />&nbsp;<wbr>org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779)<br />&nbsp;<wbr>org.apache.jsp.jsp.DbConn_jsp._jspService(DbConn_jsp.java:122)<br />&nbsp;<wbr>org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)<br />&nbsp;<wbr>javax.servlet.http.HttpServlet.service(HttpServlet.java:803)<br />&nbsp;<wbr>org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)<br />&nbsp;<wbr>org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)<br />&nbsp;<wbr>org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)<br />&nbsp;<wbr>javax.servlet.http.HttpServlet.service(HttpServlet.java:803)</p>
<p><br />root cause</p>
<p>java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver<br />&nbsp;<wbr>org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1360)<br />&nbsp;<wbr>org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1206)<br />&nbsp;<wbr>org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:128)<br />&nbsp;<wbr>org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:66)<br />&nbsp;<wbr>java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)<br />&nbsp;<wbr>java.lang.Class.forName0(Native Method)<br />&nbsp;<wbr>java.lang.Class.forName(Class.java:169)<br />&nbsp;<wbr>org.apache.jsp.jsp.DbConn_jsp._jspService(DbConn_jsp.java:88)<br />&nbsp;<wbr>org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)<br />&nbsp;<wbr>javax.servlet.http.HttpServlet.service(HttpServlet.java:803)<br />&nbsp;<wbr>org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)<br />&nbsp;<wbr>org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)<br />&nbsp;<wbr>org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)<br />&nbsp;<wbr>javax.servlet.http.HttpServlet.service(HttpServlet.java:803)</p>
<p><br />note The full stack trace of the root cause is available in the Apache Tomcat/6.0.16 logs.</p>
<p><br />--------------------------------------------------------------------------------</p>
<p>Apache Tomcat/6.0.16</p>
<p>很明显：<br />classes12.jre未导入或导入路径出错。<br />解决方案：<br />将classes12.jre文件放到以下路径（二选一）：<br />1.apache-tomcat-6.0.16\lib\(此种方法以后不必单独未某个工程添加classes12.jre文件)<br />2.放在apache-tomcat-6.0.16\webapps\你的工程\WEB-INF\lib\</p></div><img src ="http://www.blogjava.net/liuyz2006/aggbug/368516.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-01-14 21:57 <a href="http://www.blogjava.net/liuyz2006/articles/368516.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsp:useBean挖掘(转）</title><link>http://www.blogjava.net/liuyz2006/articles/368515.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Sat, 14 Jan 2012 13:54:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/368515.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;只有注册用户登录后才能阅读该文。<a href='http://www.blogjava.net/liuyz2006/articles/368515.html'>阅读全文</a><img src ="http://www.blogjava.net/liuyz2006/aggbug/368515.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-01-14 21:54 <a href="http://www.blogjava.net/liuyz2006/articles/368515.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javabean向jsp返回文本即json格式文本</title><link>http://www.blogjava.net/liuyz2006/articles/368514.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Sat, 14 Jan 2012 13:41:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/368514.html</guid><description><![CDATA[<p>------------------------fast.jsp----------------------------<br />/*<br />fast.jsp 放于ROOT目录下<br />*/<br />&lt;%@ page contentType="text/html;charset=gb2312" %&gt;<br />&lt;html&gt; <br />&lt;head&gt; <br />&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt; <br />&lt;title&gt; 我的F测试网页&lt;/title&gt; <br />&lt;/head&gt; <br />&lt;body&gt; <br />&lt;p&gt;&lt;b&gt;我的F测试网页&lt;/b&gt;&lt;/p&gt; </p>
<p>&lt;%@ page language="java" import="java.sql.*" %&gt; </p>
<p>&lt;jsp:useBean id="Hello1"&nbsp;&nbsp; scope="session" class="Test.Hello" /&gt; <br />&lt;% <br />String str = "Hello,欢迎学习JSP！ 我的F测试网页 "; <br />Hello1.setHello(str); <br />out.println(Hello1.getHello() + "&lt;br&gt;"); <br />%&gt; </p>
<p><br />&lt;jsp:useBean id="mybean"&nbsp; scope="session" class="fast.FastJson" /&gt; <br />&lt;% <br />//ResultSet RS = mybean.executeQuery("SELECT * FROM&nbsp; work_log"); <br />String s="";<br />s=mybean.getS();<br />out.println(s);<br />%&gt; <br />&lt;/body&gt; <br />&lt;/html&gt;<br />-------------------------- Hello.java------------------<br />/*<br />javac Hello.java 生成Hello.class 放于&nbsp;WEB-INF/classes/Test目录下&nbsp;<br />*/</p>
<p>//java bean <br />//file name: faq.java <br />package Test;</p>
<p>public class Hello { <br />String h="test"; </p>
<p>public void setHello(String s) <br />{ <br />h=s;<br />} </p>
<p>public String getHello() <br />{ <br />return h;<br />} </p>
<p>public static void main (String[] args)<br />{<br />Hello ho= new Hello();<br />System.out.println(ho.h);<br />}</p>
<p>}<br /></p>
<p>-------------------User.java-----------------<br />/*<br />javac User.java 产生 User.class 放于WEB-INF/classes/fast目录下<br />*/</p>
<p>package fast;<br />public class User {<br />&nbsp; public String name;<br />&nbsp; public int age;<br />&nbsp; public User() {}<br />&nbsp; public User(String name, int age) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.name = name;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.age = age;<br />&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;public String getName() {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return name;</p>
<p>&nbsp;&nbsp;&nbsp; }<br />&nbsp;public void setName(String name) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.name = name;<br />&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;public int getAge() {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return age;<br />&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;public void setAge(int age) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.age = age;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp; <br />&nbsp;&nbsp;&nbsp; @Override<br />&nbsp;public String toString() {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return name + ": " + age;<br />&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<p>----------------------------FastJson.java<br />/*<br />javac FastJson.java 产生FastJson.class 放于 WEB-INF/classes/fast目录下<br />fast目录下同时有com和META-INF目录 放fastjson等class<br />*/</p>
<p>package fast;<br />import com.alibaba.fastjson.JSON;<br />public class FastJson {<br />String s;</p>
<p>&nbsp;&nbsp;&nbsp; public static void main(String[] args) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //User u = new User("Biao", 23);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //System.out.println(JSON.toJSONString(u));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //String js = "{\"name\":\"Bi\\\"ao\",\"age\":23}";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //u = JSON.parseObject(js, User.class);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //System.out.println(u);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FastJson fj= new FastJson();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(fj.getS() );<br />&nbsp;&nbsp;&nbsp; }</p>
<p>public String getS()<br />{<br />User u = new User("liuyz2006", 39);<br />return JSON.toJSONString(u);<br />}<br />}<br />============================<br /><span style="color: red">注意：C:\Tomcat\webapps\ROOT\WEB-INF\classes目录下放com和META-INF目录，如此两目录放于classes\fast目录下是</span><br /><span style="color: red">出现&#8220;Exception in thread "main" java.lang.NoClassDefFoundError: FastJson/java&#8221;错误的</span><br /><br /><br /><a href="http://127.0.0.1:8080/fast.jsp">http://127.0.0.1:8080/fast.jsp</a> <br /></p>
<p><strong>我的F测试网页</strong></p>
<p>Hello,欢迎学习JSP！ 我的F测试网页 <br />{"age":39,"name":"liuyz2006"} <br /></p>
<p><br />&nbsp;</p><img src ="http://www.blogjava.net/liuyz2006/aggbug/368514.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-01-14 21:41 <a href="http://www.blogjava.net/liuyz2006/articles/368514.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP中通过JavaBean访问数据库</title><link>http://www.blogjava.net/liuyz2006/articles/367943.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Thu, 05 Jan 2012 11:37:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/367943.html</guid><wfw:comment>http://www.blogjava.net/liuyz2006/comments/367943.html</wfw:comment><comments>http://www.blogjava.net/liuyz2006/articles/367943.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuyz2006/comments/commentRss/367943.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuyz2006/services/trackbacks/367943.html</trackback:ping><description><![CDATA[<p>-----------------faq.java<br />//java bean <br />//file name: faq.java </p>
<p>package Test;<br />import java.sql.*; <br />public class faq { <br />String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver"; <br />String sConnStr = "jdbc:odbc:wz"; <br />Connection conn = null; <br />ResultSet rs = null; </p>
<p>public faq() { <br />try { <br />Class.forName(sDBDriver); <br />}catch(java.lang.ClassNotFoundException e) { <br />System.err.println("faq(): " + e.getMessage()); <br />} <br />} </p>
<p>public ResultSet executeQuery(String sql) { <br />rs = null; <br />try { <br />conn = DriverManager.getConnection(sConnStr,"liuyz","liuyz1"); <br />Statement stmt = conn.createStatement(); <br />rs = stmt.executeQuery(sql); <br />}catch(SQLException ex) { <br />System.err.println("aq.executeQuery: " + ex.getMessage()); <br />} <br />return rs; <br />} <br />} <br />----------------------Hello.java</p>
<p>//java bean <br />//file name: faq.java <br />package Test;</p>
<p>public class Hello { <br />String h="test"; </p>
<p>public void setHello(String s) <br />{ <br />h=s;<br />} </p>
<p>public String getHello() <br />{ <br />return h;<br />} </p>
<p>public static void main (String[] args)<br />{<br />Hello ho= new Hello();<br />System.out.println(ho.h);<br />}</p>
<p>}</p>
<p><br />---------------------testfaq2.jsp<br /></p>
<p>&lt;%@ page contentType="text/html;charset=gb2312" %&gt;<br />&lt;html&gt; <br />&lt;head&gt; <br />&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt; <br />&lt;title&gt;我的FAQ !&lt;/title&gt; <br />&lt;/head&gt; <br />&lt;body&gt; <br />&lt;p&gt;&lt;b&gt;这是我的FAQ!&lt;/b&gt;&lt;/p&gt; </p>
<p>&lt;%@ page language="java" import="java.sql.*" %&gt; </p>
<p>&lt;jsp:useBean id="Hello1"&nbsp;&nbsp; scope="session" class="Test.Hello" /&gt; </p>
<p><br />&lt;% <br />String str = "Hello,欢迎学习JSP！"; <br />Hello1.setHello(str); <br />out.println(Hello1.getHello() + "&lt;br&gt;"); <br />%&gt; </p>
<p>&lt;jsp:useBean id="mybean"&nbsp; scope="session" class="Test.faq" /&gt; </p>
<p>&lt;% <br />ResultSet RS = mybean.executeQuery("SELECT * FROM&nbsp; work_log"); <br />String tt; <br />while (RS.next()) { <br />tt = RS.getString("proc_name"); <br />out.print("&lt;LI&gt;" + RS.getString("begin_time") + "&lt;/LI&gt;"); <br />out.print("&lt;pre&gt;" + tt + "&lt;/pre&gt;"); <br />} <br />RS.close(); <br />%&gt; </p>
<p><br />&lt;/body&gt; <br />&lt;/html&gt;</p>
<p><br />1、javac -d . faq.java&nbsp; -&gt;faq.class<br />&nbsp;&nbsp;&nbsp; javac -d . Hello.java -&gt;Hello.class<br />2、把faq.class,Hello.class放于Tomcat 6.0\webapps\ROOT\WEB-INF\classes\Test下<br />3、编辑testfaq2.jsp，调用javabean访问数据库<br /><br /><br /><br /></p><img src ="http://www.blogjava.net/liuyz2006/aggbug/367943.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-01-05 19:37 <a href="http://www.blogjava.net/liuyz2006/articles/367943.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsp中访问数据库</title><link>http://www.blogjava.net/liuyz2006/articles/367941.html</link><dc:creator>阿者</dc:creator><author>阿者</author><pubDate>Thu, 05 Jan 2012 11:19:00 GMT</pubDate><guid>http://www.blogjava.net/liuyz2006/articles/367941.html</guid><wfw:comment>http://www.blogjava.net/liuyz2006/comments/367941.html</wfw:comment><comments>http://www.blogjava.net/liuyz2006/articles/367941.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liuyz2006/comments/commentRss/367941.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liuyz2006/services/trackbacks/367941.html</trackback:ping><description><![CDATA[java中访问数据库，常用两种连接方式：建立JDBC-ODBC桥接器和加载Java数据库驱动程序<br />1、JDBC-ODBC桥接器<br />机制：应用程序只需建立JDBC和ODBC之间的连接，即JDBC-ODBC桥接器，而与数据库的连接由ODBC去完成<br />优点：由于ODBC驱动程序广泛使用，建立这种桥接后，使得JDBC有能力访问几乎所有类型的数据库<br />缺点：依赖ODBC，移植性差，即应用程序所驻留的计算机必须提供ODBC<br />步骤：<br />（1）建立JDBC-ODBC桥接器 java.lang.Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") <br />（2）创建ODBC数据源&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ODBC数据库管理器<br />（3）和ODBC数据源建立连接&nbsp;DriverManager.getConnection("jdbc:odbc:数据源名字","login name","password");<br />例一<br />------------------------------<br />
<p>&lt;%@ page contentType="text/html;charset=gb2312" %&gt;<br />&lt;%@ page import="java.sql.*" %&gt;<br />&lt;html&gt;&lt;body&gt;<br />&lt;%<br />Connection con =null;<br />Statement sql=null;<br />ResultSet rs=null;</p>
<p><br />try{<br />Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");<br />&nbsp;&nbsp; try{<br />&nbsp;&nbsp; con=DriverManager.getConnection("jdbc:odbc:wz","liuyz","liuyz1");<br />&nbsp;&nbsp; }<br />&nbsp;&nbsp; catch(SQLException e)<br />&nbsp;&nbsp; { e.printStackTrace();}<br />&nbsp;&nbsp; }<br />&nbsp;&nbsp; catch(ClassNotFoundException e)<br />&nbsp;&nbsp; { e.printStackTrace();}</p>
<p>try{<br />sql=con.createStatement();<br />rs=sql.executeQuery("select * from work_log");</p>
<p>out.print("&lt;table boder&gt;");<br />out.print("&lt;tr&gt;");<br />out.print("&lt;th width=100&gt;"+"proc_name");<br />out.print("&lt;th width=50&gt;"+"sql_desc");<br />out.print("&lt;/tr&gt;");<br />while(rs.next())<br />{<br />out.print("&lt;tr&gt;");<br />String s1=rs.getString(1);<br />String s2=rs.getString(2);<br />out.print("&lt;td&gt;"+s1+"&lt;/td&gt;"+"&lt;td&gt;"+s2+"&lt;/td&gt;");<br />out.print("&lt;/tr&gt;");<br />}<br />out.print("&lt;/table&gt;");<br />con.close();<br />}<br />catch (SQLException e)<br />{<br />out.print(e);<br />}<br />%&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</p>
<p>&nbsp;<br />2、使用纯Java数据库驱动程序<br /><br /><span style="color: red">注意把ojdbc14.jar</span><br /><span style="color: red">copy ORACLE_HOME/jdbc/lib/ojdbc14.jar&nbsp; TOMCAT_HOME/webapps/ROOT/WEB_INF/lib <br /></span><font color="#ff0000"><span style="color: red">或者</span></font><br /><span style="color: red">copy ORACLE_HOME/jdbc/lib/ojdbc14.jar TOMCAT_HOME/common/lib<br /></span><span style="color: red">任一都可以</span><br /><br />机制：JDBC调用本地纯Java驱动程序和相应的数据库建立连接<br />优点：不依赖ODBC，移植性好<br />步骤：<br />（1）加载纯Java数据库驱动程序 Class.forName("oracle.jdbc.driver.OracleDriver")<br />（2）和指定的数据库建立连接&nbsp;&nbsp;&nbsp;&nbsp;DriverManager.getConnection("jdbc:oracle:thin:@10.77.xx.xx:1521:wzdata","liuyz","liuyz1")<br />例二<br />----------</p>
<p>&lt;%@ page contentType="text/html;charset=gb2312" %&gt;<br />&lt;%@ page import="java.sql.*" %&gt;<br />&lt;html&gt;&lt;body&gt;<br />&lt;%<br />Connection con =null;<br />Statement sql=null;<br />ResultSet rs=null;</p>
<p>try{ Class.forName("oracle.jdbc.driver.OracleDriver");}<br />&nbsp;&nbsp; catch(ClassNotFoundException e)<br />&nbsp;&nbsp; { e.printStackTrace();}</p>
<p><br />try {con=DriverManager.getConnection("jdbc:oracle:thin:@10.77.xx.xx:1521:wzdata","liuyz","liuyz1");}</p>
<p>&nbsp;&nbsp; catch(SQLException e)<br />&nbsp;&nbsp; { e.printStackTrace();}</p>
<p>&nbsp;</p>
<p>try{<br />sql=con.createStatement();<br />rs=sql.executeQuery("select * from work_log");</p>
<p>out.print("&lt;table boder&gt;");<br />out.print("&lt;tr&gt;");<br />out.print("&lt;th width=100&gt;"+"proc_name");<br />out.print("&lt;th width=50&gt;"+"sql_desc");<br />out.print("&lt;/tr&gt;");<br />while(rs.next())<br />{<br />out.print("&lt;tr&gt;");<br />String s1=rs.getString(1);<br />String s2=rs.getString(2);<br />out.print("&lt;td&gt;"+s1+"&lt;/td&gt;"+"&lt;td&gt;"+s2+"&lt;/td&gt;");<br />out.print("&lt;/tr&gt;");<br />}<br />out.print("&lt;/table&gt;");<br />con.close();<br />}<br />catch (SQLException e)<br />{<br />out.print(e);<br />}<br />%&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br /></p>
<p>-------------------网络文摘-----------<br />oracle9i<br />copy $ORACLE_HOME/jdbc/lib/classes12.jar to $TOMCAT_HOME/webapps/ROOT/WEB_INF/lib<br />copy $ORACLE_HOME/jdbc/lib/ojdbc14.jar to $TOMCAT_HOME/common/lib<br />restart tomcat<br /><br />connect.jsp<br /><br />&lt;%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %&gt;<br />&lt;html&gt; <br />&lt;body&gt; <br />&lt;%Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); <br />String url="jdbc:oracle:thin:@ora_server:1521:orcl"; <br />//orcl为你的数据库的SID <br />String user="usr"; <br />String password="pwd"; <br />Connection conn= DriverManager.getConnection(url,user,password); <br />Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); <br />String sql="select * from table"; <br />ResultSet rs=stmt.executeQuery(sql); <br />while(rs.next()) {%&gt; <br />您的第一个字段内容为：&lt;%=rs.getString(1)%&gt; <br />您的第二个字段内容为：&lt;%=rs.getString(2)%&gt; <br />&lt;%}%&gt; <br />&lt;%out.print("数据库操作成功，恭喜你");%&gt; <br />&lt;%<br />rs.close(); <br />stmt.close(); <br />conn.close(); <br />%&gt; <br />&lt;/body&gt; <br />&lt;/html&gt;&nbsp;<br />&nbsp; <br /></p><img src ="http://www.blogjava.net/liuyz2006/aggbug/367941.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liuyz2006/" target="_blank">阿者</a> 2012-01-05 19:19 <a href="http://www.blogjava.net/liuyz2006/articles/367941.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>