﻿<?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-codingliyi-随笔分类-Java EE</title><link>http://www.blogjava.net/codingliyi/category/35117.html</link><description>用技术改变人们的生活</description><language>zh-cn</language><lastBuildDate>Mon, 16 Nov 2009 12:56:57 GMT</lastBuildDate><pubDate>Mon, 16 Nov 2009 12:56:57 GMT</pubDate><ttl>60</ttl><item><title>Spring技术手册笔记（六）:Spring MVC 下</title><link>http://www.blogjava.net/codingliyi/archive/2009/11/16/302597.html</link><dc:creator>codingliyi</dc:creator><author>codingliyi</author><pubDate>Mon, 16 Nov 2009 11:26:00 GMT</pubDate><guid>http://www.blogjava.net/codingliyi/archive/2009/11/16/302597.html</guid><wfw:comment>http://www.blogjava.net/codingliyi/comments/302597.html</wfw:comment><comments>http://www.blogjava.net/codingliyi/archive/2009/11/16/302597.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/codingliyi/comments/commentRss/302597.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/codingliyi/services/trackbacks/302597.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 搭配Controller的相关类<br><br>一、实现Validator<br>二、文件上传<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/codingliyi/archive/2009/11/16/302597.html'>阅读全文</a><img src ="http://www.blogjava.net/codingliyi/aggbug/302597.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/codingliyi/" target="_blank">codingliyi</a> 2009-11-16 19:26 <a href="http://www.blogjava.net/codingliyi/archive/2009/11/16/302597.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring技术手册笔记（五）:Spring MVC 中</title><link>http://www.blogjava.net/codingliyi/archive/2009/11/16/302565.html</link><dc:creator>codingliyi</dc:creator><author>codingliyi</author><pubDate>Mon, 16 Nov 2009 07:49:00 GMT</pubDate><guid>http://www.blogjava.net/codingliyi/archive/2009/11/16/302565.html</guid><wfw:comment>http://www.blogjava.net/codingliyi/comments/302565.html</wfw:comment><comments>http://www.blogjava.net/codingliyi/archive/2009/11/16/302565.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/codingliyi/comments/commentRss/302565.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/codingliyi/services/trackbacks/302565.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Controller实现类<br><br>AbstractController:使用Template Method模式，包括了对缓存标头的处理、检验对请求方法（POST、GET）的支持，Session的取得与同步化等。<br>使用方式：继承AbstractController类，覆盖handleRequestInternal()方法。<br><br>MultiActionController与ParameterMethodNameResolver<br>在一个Controller类中定义多个方法，并根据使用者的请求来执行当中的某个方法，相当于Struts的DispatcherAction。<br>使用MultiActionController需要配个一个MethodNameResolver实例，默认使用ParameterMethodNameResolver，他会根据所给的网址中，最后请求的文件名称来判断执行Controller中的哪一个方法。&nbsp;&nbsp;<a href='http://www.blogjava.net/codingliyi/archive/2009/11/16/302565.html'>阅读全文</a><img src ="http://www.blogjava.net/codingliyi/aggbug/302565.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/codingliyi/" target="_blank">codingliyi</a> 2009-11-16 15:49 <a href="http://www.blogjava.net/codingliyi/archive/2009/11/16/302565.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring技术手册笔记（四）:Spring MVC 上</title><link>http://www.blogjava.net/codingliyi/archive/2009/11/15/302448.html</link><dc:creator>codingliyi</dc:creator><author>codingliyi</author><pubDate>Sun, 15 Nov 2009 14:32:00 GMT</pubDate><guid>http://www.blogjava.net/codingliyi/archive/2009/11/15/302448.html</guid><wfw:comment>http://www.blogjava.net/codingliyi/comments/302448.html</wfw:comment><comments>http://www.blogjava.net/codingliyi/archive/2009/11/15/302448.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/codingliyi/comments/commentRss/302448.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/codingliyi/services/trackbacks/302448.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在SpringMVC框架中，担任前端控制器的org.springframework.web.servlet.DispatcherServlet。Web.xml文件配置代码如下：&nbsp;&nbsp;<a href='http://www.blogjava.net/codingliyi/archive/2009/11/15/302448.html'>阅读全文</a><img src ="http://www.blogjava.net/codingliyi/aggbug/302448.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/codingliyi/" target="_blank">codingliyi</a> 2009-11-15 22:32 <a href="http://www.blogjava.net/codingliyi/archive/2009/11/15/302448.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring技术手册笔记（二）:Spring AOP</title><link>http://www.blogjava.net/codingliyi/archive/2009/11/08/301634.html</link><dc:creator>codingliyi</dc:creator><author>codingliyi</author><pubDate>Sun, 08 Nov 2009 12:12:00 GMT</pubDate><guid>http://www.blogjava.net/codingliyi/archive/2009/11/08/301634.html</guid><wfw:comment>http://www.blogjava.net/codingliyi/comments/301634.html</wfw:comment><comments>http://www.blogjava.net/codingliyi/archive/2009/11/08/301634.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/codingliyi/comments/commentRss/301634.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/codingliyi/services/trackbacks/301634.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 四、SpringAOP<br>学习AOP必须首先要学习代理模式。详见我的上一篇笔记:AOP基础：动态代理<br><br>AOP观念与术语<br><br>1.横切关注点（Cross-cutting concern）<br>类似于日志记录、安全检查、事务等系统层面的服务，在一些应用程序中常被尖刀安插至各个对象的处理流程中，这些动作在AOP术语中被称为横切关注点。<br><br>2.切面（Aspect）<br>将散落于各个业务对象中的横切关注点（如日志记录）收集起来，设计各个独立可重用的对象，这些对象被称为切面。如上篇笔记中的Handler类。在需要该服务时，织入（Weave）应用程序之上。<br><br>3.Advice<br>Aspect的具体实现被称之为Advice。例如，Advice中会包括日志记录程序代码是如何实现的。Advice中包含了横切关注点的行为或提供的服务。<br><br>4.Joinpoint<br>Aspect在应用程序执行时加入业务流程的点或时机。这个时机可能是某个方法执行之前或之后或两者都有，或是某个异常发生的时候。<br><br&nbsp;&nbsp;<a href='http://www.blogjava.net/codingliyi/archive/2009/11/08/301634.html'>阅读全文</a><img src ="http://www.blogjava.net/codingliyi/aggbug/301634.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/codingliyi/" target="_blank">codingliyi</a> 2009-11-08 20:12 <a href="http://www.blogjava.net/codingliyi/archive/2009/11/08/301634.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring技术手册笔记（一）:入门、Bean、消息、事件</title><link>http://www.blogjava.net/codingliyi/archive/2009/11/06/301478.html</link><dc:creator>codingliyi</dc:creator><author>codingliyi</author><pubDate>Fri, 06 Nov 2009 10:43:00 GMT</pubDate><guid>http://www.blogjava.net/codingliyi/archive/2009/11/06/301478.html</guid><wfw:comment>http://www.blogjava.net/codingliyi/comments/301478.html</wfw:comment><comments>http://www.blogjava.net/codingliyi/archive/2009/11/06/301478.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/codingliyi/comments/commentRss/301478.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/codingliyi/services/trackbacks/301478.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Spring的核心是个lightweitht 的container，他是实现IOC容器、非侵入性（No Intrusive）的框架，并提供AOP概念的实现方式，提供Persistence、transaction的支持，提供MVC Web框架的实现，并对一些常用的企业服务API提供一致的模型封装，是一个全方位的Application Framework。<br><br><br>一、Spring部分术语介绍<br><br><br>No Intrusive：应用程序几乎感觉不到框架的存在，减低应用程序在框架移植时的负担，进一步增加应用程序组件的Reusability。<br><br><br>控制反转（IoC）：依赖关系的转移。程序不应依赖实现，而是依赖于接口。<br><br>即如果A依赖B，则B拥有控制权。依赖关系的反转即是控制关系的反转，将控制权由实现的一方转移至抽象的一方，藉由让抽象方拥有控制权，可以获得组件的壳重用性。<br><br>在例子中，整个控制权从实际的FloppyWriter转移到抽象的IDeviceWriter接口上m而让Business依赖于ID&nbsp;&nbsp;<a href='http://www.blogjava.net/codingliyi/archive/2009/11/06/301478.html'>阅读全文</a><img src ="http://www.blogjava.net/codingliyi/aggbug/301478.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/codingliyi/" target="_blank">codingliyi</a> 2009-11-06 18:43 <a href="http://www.blogjava.net/codingliyi/archive/2009/11/06/301478.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Servlet复习笔记（二）</title><link>http://www.blogjava.net/codingliyi/archive/2008/10/10/233665.html</link><dc:creator>codingliyi</dc:creator><author>codingliyi</author><pubDate>Fri, 10 Oct 2008 12:05:00 GMT</pubDate><guid>http://www.blogjava.net/codingliyi/archive/2008/10/10/233665.html</guid><wfw:comment>http://www.blogjava.net/codingliyi/comments/233665.html</wfw:comment><comments>http://www.blogjava.net/codingliyi/archive/2008/10/10/233665.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/codingliyi/comments/commentRss/233665.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/codingliyi/services/trackbacks/233665.html</trackback:ping><description><![CDATA[<p dir="ltr" style="margin-right: 0px"><span style="color: #0000ff"><strong>幂等</strong></span><br />
doGet()只是要得到一些东西，不会修改服务器上的任何内容。doGet()是幂等的，能执行多次，不会产生任何不好的副作用；doPost()不是幂等的，Post体中提交的数据可能用于不可逆转的事务。<br />
幂等：表示同一个请求可以做两次，而不会对服务器产生负面作用。<br />
简单的超链接往往意味着Get,若表单属性注明method="POST"，则就是一个Post；若未注明，则是Get。</p>
<p><span style="color: #0000ff"><strong>Servlet中doGet()和doPost()<br />
</strong></span>从请求中得到参数：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">request.getParameter(</span><span style="color: #000000">"</span><span style="color: #000000">color</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">返回的是一个String。</span></div>
<p>返回多个值的参数：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">String&nbsp;one&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;request.getParameterValues(</span><span style="color: #000000">"</span><span style="color: #000000">size</span><span style="color: #000000">"</span><span style="color: #000000">)[</span><span style="color: #000000">0</span><span style="color: #000000">];<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />String[]&nbsp;sizes&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;request.getParameterValues(</span><span style="color: #000000">"</span><span style="color: #000000">size</span><span style="color: #000000">"</span><span style="color: #000000">);</span></div>
<p><br />
<strong style="color: #0000ff">除了参数还能从request对象中得到：</strong><br />
1.客户的平台和浏览器信息</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;String&nbsp;client&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;request.getHeader(</span><span style="color: #000000">"</span><span style="color: #000000">User-Agent</span><span style="color: #000000">"</span><span style="color: #000000">);</span></div>
<p>2.与请求相关的cookie</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;Cookie[]&nbsp;cookies&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;request.getCookies();</span></div>
<p>3.与客户相关的会话</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;HttpSession&nbsp;sessions&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;request.getSession();</span></div>
<p>4.请求的HTTP方法</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;String&nbsp;theMethod&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;request.getMethod();</span></div>
<p>5.请求的输入流</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;InputStream&nbsp;input&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;request.getInputStream();</span></div>
<p><br />
<span style="color: #0000ff"><strong>其他常用方法：<br />
</strong></span>response.getWriter();<br />
response.setContentType();<br />
上一个方法是设置返回的MIME类型，常见的MIME类型有：text/html,application/pdf,video/quicktime,image/jpeg</p>
<p>输出：<br />
ServletOutputStream用于输出字节（可写任何内容）<br />
out.write(aByteArray);<br />
PrintWriter用于输出字符流（专门用于处理字符数据）<br />
out.println(string);</p>
<p>设置相应首部：<br />
response.setHeader("foo","bar");<br />
response.setIntHeader("foo",20);<br />
增加相应首部：<br />
response.addHeader("foo","bar");</p>
<p><span style="color: #0000ff"><strong>Servlet重定向</strong></span>：response.sendRedirect("http://www.sina.com.cn");<br />
不能在写到相应之后再调用sendRedirect(),否则会抛出IllegalStateException异常。即在Servlet中，要么处理请求，要么调用sendRedirect()让&#8220;别人&#8221;处理。</p>
<p><strong style="color: #0000ff">关于相对URL</strong><br />
若访问者键入的url地址是：http://www.blogjava.net/codingliyi/app.do，在Servlet中执行sendRedirect("files/download.html")，浏览器的地址栏将跳转到http://www.blogjava.net/codingliyi/files/download.html页面；如果在Servlet中执行sendRedirect("/files/download.html")，浏览器的地址栏将跳转到http://www.blogjava.net/files/download.html页面。（注意&#8220;file/download.html&#8221;前<strong>有无斜杠</strong>的区别）</p>
<p><strong style="color: #0000ff">重定向和请求分派的的区别</strong><br />
重定向是客户来完成工作，请求分派是要求服务器的某某来完成任务。</p>
<img src ="http://www.blogjava.net/codingliyi/aggbug/233665.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/codingliyi/" target="_blank">codingliyi</a> 2008-10-10 20:05 <a href="http://www.blogjava.net/codingliyi/archive/2008/10/10/233665.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Servlet复习笔记（一）</title><link>http://www.blogjava.net/codingliyi/archive/2008/10/10/233578.html</link><dc:creator>codingliyi</dc:creator><author>codingliyi</author><pubDate>Fri, 10 Oct 2008 05:41:00 GMT</pubDate><guid>http://www.blogjava.net/codingliyi/archive/2008/10/10/233578.html</guid><wfw:comment>http://www.blogjava.net/codingliyi/comments/233578.html</wfw:comment><comments>http://www.blogjava.net/codingliyi/archive/2008/10/10/233578.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/codingliyi/comments/commentRss/233578.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/codingliyi/services/trackbacks/233578.html</trackback:ping><description><![CDATA[<blockquote dir="ltr" style="margin-right: 0px">
<p align="left">最近从图书馆找到一本《Head First Servlets &amp; JSP》,就当是对Servlet进行一下复习。<br />
<br />
<span style="color: #0000ff"><strong>web.xml配置<br />
</strong></span>用于URL映射的两个部署描述文件：<br />
&lt;servlet&gt; 用内部名映射到完全限定类名<br />
&lt;servlet-mapping&gt; 把内部名映射到公共URL名<br />
eg:</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 alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">myServlet</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;&nbsp;&nbsp;&nbsp; //这个名字只在这个部署描述文件真的其他部分中使用</span><span style="color: #000000"><br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">firstServlet</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">&gt;&nbsp; //类的完全限定名，但不加class后缀</span><span style="color: #000000"><br />
</span><span style="color: #008080">4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">5</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">6</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">7</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">myServlet</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #008080">8</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/first</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;&nbsp;&nbsp; //这是客户看到和使用的Servlet名</span><span style="color: #000000"><br />
</span><span style="color: #008080">9</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">&gt;</span></div>
<p><br />
<strong style="color: #0000ff">简单MVC架构流程：</strong></p>
<p>1.浏览器把请求数据发送到网络；<br />
2.容器根据URL找到正确的Servlet（控制器）；并把请求传递给这个Servlet;<br />
3.Servlet调用一个&#8220;专家&#8221;类（模型）寻求其&#8220;帮助&#8221;；<br />
4.这个&#8220;专家&#8221;类返回一个&#8220;回答&#8221;，Servlet把这个回答增加到requset对象；<br />
5.Servlet把请求转发给JSP（视图）；<br />
6.JSP从request对象得到&#8220;回答&#8221;；<br />
7.JSP根据&#8220;回答&#8221;为容器生成一个页面；<br />
8.容器把页面返回给用户。<br />
<br />
<span style="color: #0000ff"><strong>Servlet把回答增加到request对象：</strong></span></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">request.setAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">styles</span><span style="color: #000000">"</span><span style="color: #000000">,result);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />RequestDispatcher&nbsp;view&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;request.getRequestDispatcher(</span><span style="color: #000000">"</span><span style="color: #000000">result.jsp</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />view.forward(request,response);</span></div>
<p align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<strong style="color: #0000ff">Servlet受容器控制</strong><br />
&nbsp;<img height="46" alt="" src="http://www.blogjava.net/images/blogjava_net/codingliyi/1.png" width="585" border="0" /><br />
过程：<br />
1.加载Servlet类；<br />
2.实例化Servlet(构造函数执行)；<br />
3.执行init()；//在Servlet一生中只调用一次，在调用service（）之前完成；<br />
4.执行service(),调用Servlet对象的doGet(),doPost()等方法；<br />
5.执行destroy();<br />
<span style="color: #0000ff">Tips:</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在有初始化代码的情况下，可能覆盖init()方法，例如需得到一个数据库连接，或向其他对象注册；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不应该覆盖service()方法，只需覆盖doGet()、doPost()等方法；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;记住，容器运行多个线程来处理一个Servlet的多个请求。</p>
</blockquote>
 <img src ="http://www.blogjava.net/codingliyi/aggbug/233578.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/codingliyi/" target="_blank">codingliyi</a> 2008-10-10 13:41 <a href="http://www.blogjava.net/codingliyi/archive/2008/10/10/233578.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>