﻿<?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/Servlet</title><link>http://www.blogjava.net/tianlinux/category/22962.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 01 Jun 2007 19:00:40 GMT</lastBuildDate><pubDate>Fri, 01 Jun 2007 19:00:40 GMT</pubDate><ttl>60</ttl><item><title>JSP-Servlet学习笔记（二）——JSP到Servlet</title><link>http://www.blogjava.net/tianlinux/archive/2007/05/31/121249.html</link><dc:creator>tianlinux</dc:creator><author>tianlinux</author><pubDate>Thu, 31 May 2007 13:28:00 GMT</pubDate><guid>http://www.blogjava.net/tianlinux/archive/2007/05/31/121249.html</guid><wfw:comment>http://www.blogjava.net/tianlinux/comments/121249.html</wfw:comment><comments>http://www.blogjava.net/tianlinux/archive/2007/05/31/121249.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/tianlinux/comments/commentRss/121249.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tianlinux/services/trackbacks/121249.html</trackback:ping><description><![CDATA[<p>原本的打算是在第二篇介绍JSP的基本语法，逛了一些坛子，这类的文章实在是太多了。就在blogjava里面，都有博友正在推出系列的讲座。我一一翻阅过，所以觉得这里应该讲一些他们没有讲到的地方。如果您还不了解JSP的语法，并且对这个部分比较关注，您可以去<a title=JSP基本语法参考 href="http://www.blogjava.net/alecwen/" target=_blank><u><font color=#0000ff>alecwen的博客</font></u></a> 看看，那里有alecwen博友有关JSP基本语法＆用法的文章，比较简洁实用。 </p>
<p>选择什么样的题材来写第二篇呢？我在第一篇里面有提到&#8220;JSP需要经过转译成servlet&#8221;，那干脆就在这里讲讲这个转译过程。对于网页设计人员来说，这个部分的知识比较多余，也不适合没有程序设计基础的人看，对于程序设计人员来说，应该可以加深您对JSP＆Servlet的理解，最最重要的，我认为有了这个部分的知识，可以方便你进行JSP的相关调试。从我现在的经验来讲，在不借助于大型的IDE的情况下（只为学习目的的话，我是不喜欢用大型IDE的，比如Netbean，Eclipse等等，一是太占资源，偶的本本跑起比较慢:(；二是对于新手往往会在太多的菜单选项里面迷失方向，甚至花很大精力在建立工程、添加\删除工程文件等等事情上，难以专注于要学习的东西），JSP的调试是比较难的。虽然运行方式非常的简单，您只需要在浏览器地址栏输入您发布的jsp文件路径，回车即可测试，但如果JSP包含有错误（包括编译式错误＆运行时异常），都会输出一堆看不太懂的调用堆栈。堆栈里面往往会提及xxx.java文件的xxx行，但对于JSP开发来说，看不到这些文件，甚至不知道有这些文件的存在。所以，大多数情况下，JSP里面是不提倡写太过复杂的java代码的。 </p>
<p>好了，正式开始研究JSP到Servlet的转换过程。接着上篇讲的例子。在/webapp/hello.jsp（<a href="http://localhost:8080/tianlinux/hello.jsp"><u><font color=#0000ff>http://localhost:8080/tianlinux/hello.jsp</font></u></a>）里边有如下的代码：</p>
<p>&nbsp;</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"><span style="COLOR: #008080">1</span><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&lt;%</span><span style="COLOR: #000000">&nbsp;out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Hello,&nbsp;JSP/Servlet</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">%&gt;</span><span style="COLOR: #000000">&nbsp;</span></div>
<p>&nbsp;</p>
<p>简单的，只有一句代码。我们在初学java的时候，写一个hello world应该都远远不止这点代码，里面一定有文章。并且，您发现了吗：第一次访问hello.jsp，浏览器停顿了一下下，才显示出了"Hello, JSP/Servlet"这句话，后面再次访问，就不会再停顿了。是的，这正是因为第一次访问jsp的时候，JSP有个转译的过程。这个过程包括以下几个步骤：</p>
<p>1、根据jsp文件生成java文件；</p>
<p>2、调用编译器对java文件进行编译；</p>
<p>3、如果编译通过，载入JVM运行；</p>
<p>4、将执行结果返回。</p>
<p>我们先看第一个步骤。由jsp转化而成的java文件在什么位置呢？我们在Tomcat的安装目录下搜索一下，比如刚才的hello.jap，%tomcat%表示tomcat的安装目录，则在如下的路径%tomcat%\work\Catalina\localhost\tianlinux\org\apache\jsp\找到了hello_jsp.java文件。打开看看。这里我们偏偏题，看看大家一般用什么文本编辑器？不要告诉我说您写一个简单的java文件都要用IDE哦，也不要告诉我您还在使用寒碜的notepad哦^_^，我推荐使用<a title="Notepad-plus home" href="http://notepad-plus.sourceforge.net/tw/site.htm" target=_blank><u><font color=#0000ff>notepad++</font></u></a>。功能跟UltraEdit基本类似，但UE是付费的（虽然在伟大的祖国，基本上没有需要真正付费的，但谁知道这种天堂般的日子什么时候会到头呢？），notepad++是完全免费的，并且加入了sourceforge，遵从GPL，作者是台湾人侯今吾，侯工可是学法国文学出生的哦~。在台湾企业工作了2年多，跟很多台湾籍工程师有所接触，别的不说，感觉在敬业精神＆技术能力上，大陆工程师还是普遍落后于海峡那边的同胞的，这跟受到的教育＆经济水平是有直接联系的。扯远了，反正为了一句话，为了民族xxx产业，为了实现自我xxx，也为了大把的银子，大家一起努力了~。好了，打开那个hello_jsp.java了吗？我们看到如下的代码：<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"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000">&nbsp;org.apache.jsp;<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;javax.servlet.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;javax.servlet.http.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;javax.servlet.jsp.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;hello_jsp&nbsp;</span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000">&nbsp;org.apache.jasper.runtime.HttpJspBase<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img id=Codehighlighter1_242_1681_Open_Image onclick="this.style.display='none'; Codehighlighter1_242_1681_Open_Text.style.display='none'; Codehighlighter1_242_1681_Closed_Image.style.display='inline'; Codehighlighter1_242_1681_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_242_1681_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_242_1681_Closed_Text.style.display='none'; Codehighlighter1_242_1681_Open_Image.style.display='inline'; Codehighlighter1_242_1681_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000">&nbsp;org.apache.jasper.runtime.JspSourceDependent&nbsp;</span><span id=Codehighlighter1_242_1681_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_242_1681_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;java.util.List&nbsp;_jspx_dependants;<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img id=Codehighlighter1_328_361_Open_Image onclick="this.style.display='none'; Codehighlighter1_328_361_Open_Text.style.display='none'; Codehighlighter1_328_361_Closed_Image.style.display='inline'; Codehighlighter1_328_361_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_328_361_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_328_361_Closed_Text.style.display='none'; Codehighlighter1_328_361_Open_Image.style.display='inline'; Codehighlighter1_328_361_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Object&nbsp;getDependants()&nbsp;</span><span id=Codehighlighter1_328_361_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_328_361_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;_jspx_dependants;<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;_jspService(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img id=Codehighlighter1_501_1679_Open_Image onclick="this.style.display='none'; Codehighlighter1_501_1679_Open_Text.style.display='none'; Codehighlighter1_501_1679_Closed_Image.style.display='inline'; Codehighlighter1_501_1679_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_501_1679_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_501_1679_Closed_Text.style.display='none'; Codehighlighter1_501_1679_Open_Image.style.display='inline'; Codehighlighter1_501_1679_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;java.io.IOException,&nbsp;ServletException&nbsp;</span><span id=Codehighlighter1_501_1679_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_501_1679_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;JspFactory&nbsp;_jspxFactory&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PageContext&nbsp;pageContext&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;HttpSession&nbsp;session&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;ServletContext&nbsp;application&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;ServletConfig&nbsp;config&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;JspWriter&nbsp;out&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;page&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;JspWriter&nbsp;_jspx_out&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;PageContext&nbsp;_jspx_page_context&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img id=Codehighlighter1_815_1302_Open_Image onclick="this.style.display='none'; Codehighlighter1_815_1302_Open_Text.style.display='none'; Codehighlighter1_815_1302_Closed_Image.style.display='inline'; Codehighlighter1_815_1302_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_815_1302_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_815_1302_Closed_Text.style.display='none'; Codehighlighter1_815_1302_Open_Image.style.display='inline'; Codehighlighter1_815_1302_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_815_1302_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_815_1302_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_jspxFactory&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;JspFactory.getDefaultFactory();<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setContentType(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">text/html</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pageContext&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;_jspxFactory.getPageContext(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">,&nbsp;request,&nbsp;response,<br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">8192</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_jspx_page_context&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pageContext;<br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;application&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pageContext.getServletContext();<br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;config&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pageContext.getServletConfig();<br></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pageContext.getSession();<br></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pageContext.getOut();<br></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_jspx_out&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;out;<br></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Hello,&nbsp;JSP/Servlet</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;<br></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img id=Codehighlighter1_1324_1574_Open_Image onclick="this.style.display='none'; Codehighlighter1_1324_1574_Open_Text.style.display='none'; Codehighlighter1_1324_1574_Closed_Image.style.display='inline'; Codehighlighter1_1324_1574_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1324_1574_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1324_1574_Closed_Text.style.display='none'; Codehighlighter1_1324_1574_Open_Image.style.display='inline'; Codehighlighter1_1324_1574_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(Throwable&nbsp;t)&nbsp;</span><span id=Codehighlighter1_1324_1574_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_1324_1574_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img id=Codehighlighter1_1370_1568_Open_Image onclick="this.style.display='none'; Codehighlighter1_1370_1568_Open_Text.style.display='none'; Codehighlighter1_1370_1568_Closed_Image.style.display='inline'; Codehighlighter1_1370_1568_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1370_1568_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1370_1568_Closed_Text.style.display='none'; Codehighlighter1_1370_1568_Open_Image.style.display='inline'; Codehighlighter1_1370_1568_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">(t&nbsp;</span><span style="COLOR: #0000ff">instanceof</span><span style="COLOR: #000000">&nbsp;SkipPageException))</span><span id=Codehighlighter1_1370_1568_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_1370_1568_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;_jspx_out;<br></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(out&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;out.getBufferSize()&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.clearBuffer();<br></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(_jspx_page_context&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)&nbsp;_jspx_page_context.handlePageException(t);<br></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">50</span><span style="COLOR: #000000"><img id=Codehighlighter1_1584_1675_Open_Image onclick="this.style.display='none'; Codehighlighter1_1584_1675_Open_Text.style.display='none'; Codehighlighter1_1584_1675_Closed_Image.style.display='inline'; Codehighlighter1_1584_1675_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1584_1675_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1584_1675_Closed_Text.style.display='none'; Codehighlighter1_1584_1675_Open_Image.style.display='inline'; Codehighlighter1_1584_1675_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">finally</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_1584_1675_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_1584_1675_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">51</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(_jspxFactory&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)&nbsp;_jspxFactory.releasePageContext(_jspx_page_context);<br></span><span style="COLOR: #008080">52</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">53</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">54</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">55</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">56</span><span style="COLOR: #000000"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<p><br>以目前的情况，我们并没有必要把代码一句一句的都去搞懂。因为大部分的代码所有jsp文件转换出来都是相同，是JSP容器已经设定好的。所以我们只关注其中的部分。</p>
<p>首先是import语句组。这里import了javax.servlet，注意这个包并不是JDK里面默认包含的包，所以现在如果在cmd里面输入javac hello_jsp.java（当然要在这个文件的路径下输入！）可能会出现下面的画面</p>
<p><img src="http://docs.google.com/FilePage?id=dchz9tb3_10c2nq9gcs">&nbsp;</p>
<p>出现了找不到javax.servlet这个包的情况，我的机机上就是这种情况。怎么办呢？赶紧google一下解决办法。</p>
<p>1、在环境变量设置里面找到classpath，然后把%tomcat%/common/lib添加进去。注意Tomcat的版本更新十分频繁，如果版本不是5.5.12，可能文件名或者路径稍有不同，请注意变通。还有需要提醒的是，完成环境变量的设置以后，需要重新开启cmd哦。</p>
<p>2、运气好的GGMM现在已经可以正确编译了吧^_^，但偶不是。目前没有搞清楚是什么原因，我将/common/lib加入到classpath后仍然找不到servlet等包，所以我采用了笨办法，将/common/lib下的这三个文件：servlet-api.jar，jsp-api.jar，jasper-runtime.jar都手动加到了classpath里面，就OK了~各位有没有更好的方法或者知道1不能成功的原因的，还望不吝赐教哦。</p>
<p>不知道您发现没有，我在写这篇博客的时候正在听林忆莲的《<a title=我坐在这里 href="http://music.cnnb.com.cn/music/l/林忆莲/最好的&#8230;林忆莲/林忆莲-我坐在这里.wma" target=_blank><u><font color=#0000ff>我坐在这里</font></u></a>》，一首很好听的，快节奏的歌，翻唱自Lene Martin的《<a title="Sitting down here" href="http://zxs.kdhrb.com/music/yingwen/may_it_be_sitting_down_here.mp3" target=_blank><u><font color=#0000ff>Sitting down here</font></u></a>》。我喜欢在工作的时候听歌，这里推荐给大家这两首:)。</p>
<p>接着我们会关注的是_jspService这个函数，这个函数源自javax.servlet.Servlet的HttpJSPPage，对于JSP/Servlet创建者，不用重新定义，只需要重载，如果是JSP创建的，那么重载的过程由JSP容器来完成了。这个函数大家可以把它看作是一个callback，由用户编写，但由系统来调用。</p>
<p>最后我们来看看那句在JSP里面的"out.println"在java代码里面再次出现了。out对实质是JSPWriter的实例，这个对象负责将字符串等等发送到客户端显示。</p>
<p>步骤3＆4不属于本文的范畴，不过我想在将来对这个部分做进一步的解释，因为我对JVM还蛮有兴趣的哦。</p>
<p>以上就是今天的分享，包括jsp到java文件的转换＆javax包的import方法。希望大家觉得有用。<br>PS:有朋友留言在第一篇，要求介绍一些其他的JSP容器，由于这个部分我目前只用过Tomcat，所以将在未来对其他的JSP容器有了使用经验再向大家介绍。</p>
<img src ="http://www.blogjava.net/tianlinux/aggbug/121249.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tianlinux/" target="_blank">tianlinux</a> 2007-05-31 21:28 <a href="http://www.blogjava.net/tianlinux/archive/2007/05/31/121249.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP/Servlet学习笔记（一）——JSP容器</title><link>http://www.blogjava.net/tianlinux/archive/2007/05/29/JSP-Servlet.html</link><dc:creator>tianlinux</dc:creator><author>tianlinux</author><pubDate>Tue, 29 May 2007 14:58:00 GMT</pubDate><guid>http://www.blogjava.net/tianlinux/archive/2007/05/29/JSP-Servlet.html</guid><wfw:comment>http://www.blogjava.net/tianlinux/comments/120767.html</wfw:comment><comments>http://www.blogjava.net/tianlinux/archive/2007/05/29/JSP-Servlet.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/tianlinux/comments/commentRss/120767.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tianlinux/services/trackbacks/120767.html</trackback:ping><description><![CDATA[出于工作＆兴趣，最近在学习研究jsp/servlet ，结合理论再编程实践，感觉学到的东西多而杂，需要好好梳理一下<wbr>，于是写下这篇心得，与大家一起分享。由于初涉java ，很多总结出的仅仅是经验或个人感受，加上第一次写技术博，紧张得流汗，谬误难免，欢迎大家多多指教。我的联系方式是：tianlinux at gmail dot com 。MSN 帐号：tianlinx at hotmail dot com 。 我假设了您已经熟悉基本的java 语法，并且对Web 应用程序的概念也有基本的了解了。我还假设了您的计算机已经安装了JDK1.4以上，如果还没有装，就到sun的官网去下载吧，或者google一下，应该很好找到的。当您准备好这一切，我们就可以开始一起学习JSP/Servlet了。
<p>&nbsp;</p>
<p>JSP/Servlet 的关系 </p>
<p>JSP ＆Servlet 属于java web 层的技术，作用都是用来实现动态网页。JSP 主要面向的是网页设计人员，Servlet 主要面向的是程序设计人员。无论你采用两者中哪一种单一的技术<wbr>，你都可以解决所有动态网页呈现的问题。从运行方式上讲，JSP 事实上需要转译为Servlet 才能运行，所以，有一种说法说它们是"一面两体"，这是很恰当的。Servlet 从本质上讲，就是java 程序片段。 </p>
<p>&nbsp;</p>
<p>JSP/Servlet 容器 </p>
<p>既然 Servlet是 java程序片段，那么它当然是不能直接运行的，必须把它放到某种运行环境<wbr>当中，它才能发挥它的作用。这个环境就是我们讲的"容器"<wbr>。容器也是 java 程序，它的主要功能除了为Servlet 提供运行环境，还有更重要的，就是提供网络传输协议与java 程序实体的相互转换。为什么需要这种转换呢？因为Web 应用程序是分布式的，客户端和服务器端之间需要交换数据<wbr>，就要通过网络，并在一定的通讯协议下进行。最常见和常用的协议是HTTP 。客户端向服务器发送数据，遵循的是HTTP 协议的数据格式，服务器向客户端发送数据也是遵循HTTP协议的。在客户端和服务器端，可能存在着不同的编程语言编写的程序，比如java，C++等等。各种语言都有自己用于处理HTTP协议数据的方法（类），为了使用java提供的各种HTTP处理相关的类，必须将HTTP协议下的数据做一定的转换，转换成一些java object，这样才能使用java的方法进行数据处理。同理，当这些处理完成，又需要将这些java object转换回HTTP协议下的数据，反馈给客户端（JSP/Servlet当然存在与服务器端）。JSP/Servlet容器就扮演了完成这个双向转换的角色。至于JSP/Servlet容器为java程序片段提供运行环境的细节，我们在后面再讨论这个问题。<br>我用的JSP/Servlet容器是Tomcat 5.5.12。这里给大家一个google上找到的链接，下载源比较稳定。<a href="http://leshui.clwind.com/Download/apache-tomcat-5.5.12.exe">http://leshui.clwind.com/Download/apache-tomcat-5.5.12.exe</a>。<br><span style="FONT-SIZE: 12pt">下载完成后，即可安装。<br>安装过程没有太大问题，中间有步需要输入一个管理员密码，自己随便设吧，这里我们只是针对学习，不针对商业应用，所以设个傻瓜密码也无所谓。这个密码在你配置服务器的时候会用到。</span> </p>
<p><img height=393 alt="" src="http://www.blogjava.net/images/blogjava_net/tianlinux/setpwd.JPG" width=503 border=0 longDesc=设定登录密码></p>
<p>完成了Tomcat的安装，您马上就可以启动您自己的服务器了，^_^，如果以前没有做过，有点紧张吧。<br>在启动以前，让我们先打开web浏览器，输入：<a href="http://localhost:8080/">http://localhost:8080</a>，回车，看到了什么？&#8220;该页无法显示&#8221;一类的显示吧，呵呵，不要急，马上给您一个惊喜。<br>很简单：开始-&gt;程序-&gt;Apache Tomcat 5.5-&gt;configure tomcat。会看到下面那个对话框：</p>
<p><img height=399 alt="" src="http://www.blogjava.net/images/blogjava_net/tianlinux/startserver.JPG" width=416 border=0 longDesc=启动服务器></p>
<p>为了快点体验到自己建服务器的快感，我们不做任何设置，先点了Start再说吧，等待启动完成。好了，现在您的计算机已经作为服务器启动了。刚才那个&#8220;该页无法显示&#8221;呢？刷新一下试试。如果您在左上角看到那只黄猫，您的服务器就已经启动了！</p>
<p>在这个网页的左边，Administration里面，有Tomcat Manager的链接，点击它，会弹出一个输入用户和密码的对话框，输入刚才安装的时候的帐号密码。默认帐号是admin，密码。。。不会就忘了吧:)。</p>
<p>进入了Manager的页面了吗？好了，您可以浏览一下这个网页的内容，在Applications这个列表里面，列出了在当前服务器上可以浏览的所有路径。您可以随意浏览一下，里面如果有一些jsp的例子您现在无法理解，没有关系，我们现在先抛开它。今天要做的最后一件事就是在这个服务器上建立自己的一个web文件夹，以后我们将在这个文件夹中部署我们自己的写的小web应用程序（JSP/Servlet）。目前列表中的所有路径，都是在Tomcat的安装路径下，/webapp/xxx下面。</p>
<p>好了，言归正传，我们现在来建自己的文件夹，并发布到服务器上。在您的本地硬盘上任意地新建一个文件夹，并任意命名。我这里以D:/webapp/为例子。我想把这个文件夹作为我的webapp文件夹，并且在服务器上，这个文件夹的名字叫"tianlinux"。在刚才那个manager的页面下面，Deploy栏，里面Context Path (optional): 填上"/tianlinux"（不要引号！），在WAR or Directory URL:填上"file:d:/webapp"，然后点击"Deploy"，好了，看这个网页的最上面Message栏，是否已经显示"OK - Deployed application at context path /tianlinux"？好了，现在在Applications列表里面也有/tianlinux这个子项了。点击它，会跳转到directories list的页面。当然，现在这个文件夹里面没有任何的文件和文件夹，怪可怜的，新建一个txt文档，改名为：hello.jsp，在里面添加如下一句代码<br></p>
<div><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&lt;%&nbsp;out.println("Hello,&nbsp;JSP/Servlet");&nbsp;%&gt;</div>
<p><br>保存，关闭。这时你需要reload一下这个文件夹，就在Applications的列表里就有链接~或者干脆把/tianlinux文件夹Undeploy，再重新deploy一次也可以。<br>访问：<a href="http://localhost:8080/tianlinux/hello.jsp">http://localhost:8080/tianlinux/hello.jsp</a>。如果显示出"Hello, JSP/Servlet"，今天就打完收工了。。。第一次写，好累。如果没有搞定。。。给我留言或写信吧。</p>
<p>&nbsp;</p>
<p>下期：JSP基础。</p>
<img src ="http://www.blogjava.net/tianlinux/aggbug/120767.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tianlinux/" target="_blank">tianlinux</a> 2007-05-29 22:58 <a href="http://www.blogjava.net/tianlinux/archive/2007/05/29/JSP-Servlet.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>