﻿<?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的技术博客</title><link>http://www.blogjava.net/codingliyi/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 18:54:56 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 18:54:56 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 持久层</title><link>http://www.blogjava.net/codingliyi/archive/2009/11/09/301736.html</link><dc:creator>codingliyi</dc:creator><author>codingliyi</author><pubDate>Mon, 09 Nov 2009 12:30:00 GMT</pubDate><guid>http://www.blogjava.net/codingliyi/archive/2009/11/09/301736.html</guid><wfw:comment>http://www.blogjava.net/codingliyi/comments/301736.html</wfw:comment><comments>http://www.blogjava.net/codingliyi/archive/2009/11/09/301736.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/codingliyi/comments/commentRss/301736.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/codingliyi/services/trackbacks/301736.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 五、Spring 持久层<br><br>对于不同的数据库技术，某些步骤是固定的，只有少部分不同。Spring运用Template Method模式，将固定的流程编写与Temp类（JdbcTemplate、HibernateTemplate）之中，对不同的一些细节步骤，依托特定DAO支持对象来处理。<br><br>Spring的DAO框架并不抛出与数据库技术相关的异常，Spring所有异常都是DataAccessException的子类，一个与数据库技术无关的通用异常类，该类继承至RuntimeException。<br><br>对于Jdbc存取，Spring将SQLException等转化为自己的DAO异常对象。<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/codingliyi/archive/2009/11/09/301736.html'>阅读全文</a><img src ="http://www.blogjava.net/codingliyi/aggbug/301736.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-09 20:30 <a href="http://www.blogjava.net/codingliyi/archive/2009/11/09/301736.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>AOP基础：动态代理</title><link>http://www.blogjava.net/codingliyi/archive/2009/11/07/301569.html</link><dc:creator>codingliyi</dc:creator><author>codingliyi</author><pubDate>Sat, 07 Nov 2009 13:27:00 GMT</pubDate><guid>http://www.blogjava.net/codingliyi/archive/2009/11/07/301569.html</guid><wfw:comment>http://www.blogjava.net/codingliyi/comments/301569.html</wfw:comment><comments>http://www.blogjava.net/codingliyi/archive/2009/11/07/301569.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/codingliyi/comments/commentRss/301569.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/codingliyi/services/trackbacks/301569.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在了解动态代理之前，有必要先知道什么是静态代理。<br><br>1. 静态代理<br><br>在静态代理的实现中，代理对象与被代理对象都必须实现同一个借口，在代理对象中可以实现日志记录等相关服务，并在需要的时候在呼叫被代理对象。如此代理对象中就可以仅保留业务相关职责。<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/codingliyi/archive/2009/11/07/301569.html'>阅读全文</a><img src ="http://www.blogjava.net/codingliyi/aggbug/301569.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-07 21:27 <a href="http://www.blogjava.net/codingliyi/archive/2009/11/07/301569.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>CD Manager 0.99发布</title><link>http://www.blogjava.net/codingliyi/archive/2008/12/16/246706.html</link><dc:creator>codingliyi</dc:creator><author>codingliyi</author><pubDate>Tue, 16 Dec 2008 10:47:00 GMT</pubDate><guid>http://www.blogjava.net/codingliyi/archive/2008/12/16/246706.html</guid><wfw:comment>http://www.blogjava.net/codingliyi/comments/246706.html</wfw:comment><comments>http://www.blogjava.net/codingliyi/archive/2008/12/16/246706.html#Feedback</comments><slash:comments>29</slash:comments><wfw:commentRss>http://www.blogjava.net/codingliyi/comments/commentRss/246706.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/codingliyi/services/trackbacks/246706.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这是参加NWPU&#8220;富士通&#8221;杯软件设计大赛的作品，谢谢姜哲，谢谢自己，谢谢我们的合作。虽然软件有很多的缺陷，我们也有许多尚未完成的遗憾，但是，我们一起把它做出来了。从11月份开始，近20天里，我们一起经历了从构思、分析、设计、编码、测试的过程，就像看着自己孩子一样一点点看着它从无到有、慢慢成长，这就够了。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 之所以命名为0.99版，主要是受雷军先生Bitlok的影响。我们也觉得确实它还有许多不足，不愿意贸然就赋予它1.0的称谓。这也算是一个鞭策，我们希望以此为起点，奋然前行。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 软件是用Java编写的，经过多次查询资料和实验，我们最终将80M的JRE精简到6M，制成了可以完全脱离Java环境独立执行的发布版。如果有人需要Jar版（约4M），请与我联系。<br />
<br />
<span style="color: red">源码在此下载：</span><br />
<a title="CD Manager源码" href="/Files/codingliyi/CDManagerSrc.rar">CD Manager源码</a><br />
<a title="CD Manager文档" href="/Files/codingliyi/CDManagerDoc.rar">CD Manager文档</a><br />
</p>
<p>(由于我还是大三学生，代码质量不高，还请大家多多支持理解。我也希望和大家展开交流。)<br />
<br />
CD Manager 0.99 下载地址：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 华军软件：<a href="http://www.onlinedown.net/soft/77809.htm" target="_blank">http://www.onlinedown.net/soft/77809.htm</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 新浪科技：<a href="http://down1.tech.sina.com.cn/download/downContent/2004-03-16/1744.shtml" target="_blank">http://down1.tech.sina.com.cn/download/downContent/2004-03-16/1744.shtml</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 中关村在线：<a href="http://xiazai.zol.com.cn/detail/34/337774.shtml" target="_blank">http://xiazai.zol.com.cn/detail/34/337774.shtml</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 绿色软件联盟：<a href="http://www.xdowns.com/soft/10/147/2008/Soft_48601.html" target="_blank">http://www.xdowns.com/soft/10/147/2008/Soft_48601.html</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SupFree: <a href="http://www.supfree.com/soft/soft.asp?v_id=50660" target="_blank">http://www.supfree.com/soft/soft.asp?v_id=50660</a></p>
<p>CD Manager 简介：<br />
　　CD Manager是一款使用简单、功能强大的个人光盘管理软件。它采用Java语言编写，具有以下强大功能：<br />
　　一、光盘扫描。随着电脑硬件技术的不断发展，各类刻录设备渐渐成为电脑的标准配置。光盘以其大容量、低成本、高安全的特点成为了使用最为广泛的数据存储工具。随着时间的推移，用户手中可能已经积累了数十上百张光盘。如何对它们进行有效管理便成为了一大难题。CD Manager将为用户解决这一烦恼！用户只需把光盘放入光驱，启动CD Manager对其扫描，光盘上的文档相关信息便被建立成索引文件存储起来。<br />
　　二、光盘查看。对于建立索引后的光盘，用户不需要将其放入光驱，就可以在CD Manager中直接查看其目录结构，就像查看本地硬盘文件一般便捷简单。用户也可以删除、修改曾经创建过的光盘。<br />
　　三、光盘搜索。如果用户要查找某个文件，只需在搜索栏中输入关键字，只要该文件所在的光盘已被创建过索引，那么用户便能瞬间得到查得该文件在哪一张光盘上。CD Manager支持通配符搜索、模糊搜索、组合搜索等多种搜索方式。<br />
　　四、导出索引。光盘的索引包含了该光盘上所有文件的文件名及文件路径等信息。CD Manager可以把他们导出为txt文件，方便用户作其他使用。<br />
　　五、硬盘搜索。同建立光盘索引类似，只要用户对本地硬盘(也可以是硬盘上的一个分区或是一个文件夹)建立了索引，那么也可以在不到一秒的时间内瞬间搜索到所需要的结果。<br />
　　六、密码设置。用户可以设置CD Manager的启动密码，保障个人光盘数据不被他人查看，有效的保护了用户的隐私。<br />
　　七、日志记录。对于用户的每一个关键操作，CD Manager都会生成日志记录下来。用户可以随时查看，也可以将日志记录导出为txt文件。</p>
<p>CD Manager 运行界面</p>
<img alt="" src="http://www.blogjava.net/images/blogjava_net/codingliyi/2832201215663732300.png" border="0" /> 
<img src ="http://www.blogjava.net/codingliyi/aggbug/246706.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-12-16 18:47 <a href="http://www.blogjava.net/codingliyi/archive/2008/12/16/246706.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>