﻿<?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-paulwong-随笔分类-SPRING MVC</title><link>http://www.blogjava.net/paulwong/category/50899.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 02 Nov 2014 09:56:26 GMT</lastBuildDate><pubDate>Sun, 02 Nov 2014 09:56:26 GMT</pubDate><ttl>60</ttl><item><title>springMVC 文件下载</title><link>http://www.blogjava.net/paulwong/archive/2014/10/29/419177.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Wed, 29 Oct 2014 09:17:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2014/10/29/419177.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/419177.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2014/10/29/419177.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/419177.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/419177.html</trackback:ping><description><![CDATA[<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000FF; ">import</span>&nbsp;java.io.File;&nbsp;&nbsp;<br />
<span style="color: #0000FF; ">import</span>&nbsp;java.io.IOException;&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
<span style="color: #0000FF; ">import</span>&nbsp;org.apache.commons.io.FileUtils;&nbsp;&nbsp;<br />
<span style="color: #0000FF; ">import</span>&nbsp;org.springframework.context.annotation.Scope;&nbsp;&nbsp;<br />
<span style="color: #0000FF; ">import</span>&nbsp;org.springframework.http.HttpHeaders;&nbsp;&nbsp;<br />
<span style="color: #0000FF; ">import</span>&nbsp;org.springframework.http.HttpStatus;&nbsp;&nbsp;<br />
<span style="color: #0000FF; ">import</span>&nbsp;org.springframework.http.MediaType;&nbsp;&nbsp;<br />
<span style="color: #0000FF; ">import</span>&nbsp;org.springframework.http.ResponseEntity;&nbsp;&nbsp;<br />
<span style="color: #0000FF; ">import</span>&nbsp;org.springframework.stereotype.Component;&nbsp;&nbsp;<br />
<span style="color: #0000FF; ">import</span>&nbsp;org.springframework.web.bind.annotation.RequestMapping;&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
<span style="color: #008000; ">/**</span><span style="color: #008000; ">&nbsp;<br />
&nbsp;*&nbsp;&lt;一句话功能简述&gt;&nbsp;<br />
&nbsp;*&nbsp;&lt;功能详细描述&gt;&nbsp;<br />
&nbsp;*&nbsp;&nbsp;<br />
&nbsp;*&nbsp;</span><span style="color: #808080; ">@author</span><span style="color: #008000; ">&nbsp;&nbsp;Administrator&nbsp;<br />
&nbsp;*&nbsp;</span><span style="color: #808080; ">@version</span><span style="color: #008000; ">&nbsp;&nbsp;[版本号,&nbsp;2014年3月7日]&nbsp;<br />
&nbsp;*&nbsp;</span><span style="color: #808080; ">@see</span><span style="color: #008000; ">&nbsp;&nbsp;[相关类/方法]&nbsp;<br />
&nbsp;*&nbsp;</span><span style="color: #808080; ">@since</span><span style="color: #008000; ">&nbsp;&nbsp;[产品/模块版本]&nbsp;<br />
&nbsp;</span><span style="color: #008000; ">*/</span>&nbsp;&nbsp;<br />
@Component&nbsp;&nbsp;<br />
@Scope("prototype")&nbsp;&nbsp;&nbsp;<br />
@RequestMapping("/downloadFile")&nbsp;&nbsp;<br />
<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;DownloadAction&nbsp;&nbsp;<br />
{&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;@RequestMapping("download")&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;ResponseEntity&lt;<span style="color: #0000FF; ">byte</span>[]&gt;&nbsp;download()&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;IOException&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;path="D:\\workspace\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp0\\wtpwebapps\\springMVC\\WEB-INF\\upload\\图片10（定价后）.xlsx";&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;File&nbsp;file=<span style="color: #0000FF; ">new</span>&nbsp;File(path);&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpHeaders&nbsp;headers&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;HttpHeaders();&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;fileName=<span style="color: #0000FF; ">new</span>&nbsp;String("你好.xlsx".getBytes("UTF-8"),"iso-8859-1");<span style="color: #008000; ">//</span><span style="color: #008000; ">为了解决中文名称乱码问题&nbsp;&nbsp;</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;headers.setContentDispositionFormData("attachment",&nbsp;fileName);&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;ResponseEntity&lt;<span style="color: #0000FF; ">byte</span>[]&gt;(FileUtils.readFileToByteArray(file),&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;headers,&nbsp;HttpStatus.CREATED);&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />
} &nbsp;</div><br /><br />JSP<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">a&nbsp;</span><span style="color: #FF0000; ">href</span><span style="color: #0000FF; ">="./downloadFile/download"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">&gt;</span>下载<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">a</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;</div><img src ="http://www.blogjava.net/paulwong/aggbug/419177.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2014-10-29 17:17 <a href="http://www.blogjava.net/paulwong/archive/2014/10/29/419177.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring对HttpSession的重新封闭</title><link>http://www.blogjava.net/paulwong/archive/2014/08/19/417090.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Tue, 19 Aug 2014 01:13:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2014/08/19/417090.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/417090.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2014/08/19/417090.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/417090.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/417090.html</trackback:ping><description><![CDATA[<a href="https://github.com/spring-projects/spring-session/tree/master/samples" target="_blank">https://github.com/spring-projects/spring-session/tree/master/samples</a><img src ="http://www.blogjava.net/paulwong/aggbug/417090.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2014-08-19 09:13 <a href="http://www.blogjava.net/paulwong/archive/2014/08/19/417090.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring Data REST，Spring MVC的REST扩展</title><link>http://www.blogjava.net/paulwong/archive/2014/07/09/415635.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Wed, 09 Jul 2014 09:36:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2014/07/09/415635.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/415635.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2014/07/09/415635.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/415635.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/415635.html</trackback:ping><description><![CDATA[<a href="http://spring.io/blog/2012/06/26/spring-data-rest-1-0-0-rc1-released">http://spring.io/blog/2012/06/26/spring-data-rest-1-0-0-rc1-released</a><br /><br />RESTify your JPA Entities <br /><a href="https://www.openshift.com/blogs/restify-your-jpa-entities" target="_blank">https://www.openshift.com/blogs/restify-your-jpa-entities</a><br /><br />babdev-spring<br /><a href="https://github.com/gregorriegler/babdev-spring/tree/master/spring-data-rest" target="_blank">https://github.com/gregorriegler/babdev-spring/tree/master/spring-data-rest</a><br /><br /><a href="https://github.com/spring-projects/spring-data-rest" target="_blank">https://github.com/spring-projects/spring-data-rest</a><img src ="http://www.blogjava.net/paulwong/aggbug/415635.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2014-07-09 17:36 <a href="http://www.blogjava.net/paulwong/archive/2014/07/09/415635.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于springMVC+springSecurity3.x+Mybaits3.x的权限系统</title><link>http://www.blogjava.net/paulwong/archive/2013/11/24/406757.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Sun, 24 Nov 2013 12:54:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/11/24/406757.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/406757.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/11/24/406757.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/406757.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/406757.html</trackback:ping><description><![CDATA[<a href="https://github.com/lanyuancom/lanyuan" target="_blank">https://github.com/lanyuancom/lanyuan</a>
@import url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);<img src ="http://www.blogjava.net/paulwong/aggbug/406757.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-11-24 20:54 <a href="http://www.blogjava.net/paulwong/archive/2013/11/24/406757.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SPRING各种例子</title><link>http://www.blogjava.net/paulwong/archive/2013/11/11/406213.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Mon, 11 Nov 2013 06:44:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/11/11/406213.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/406213.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/11/11/406213.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/406213.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/406213.html</trackback:ping><description><![CDATA[spring-mvc-rest<br /><a href="https://github.com/skprasadu/spring-mvc-rest" target="_blank">https://github.com/skprasadu/spring-mvc-rest</a><br /><br /><br />spring-mvc-examples<br /><a href="https://github.com/skprasadu/spring-mvc-examples" target="_blank">https://github.com/skprasadu/spring-mvc-examples</a><br /><br /><br />spring-security-examples<br /><a href="https://github.com/skprasadu/spring-security-examples" target="_blank">https://github.com/skprasadu/spring-security-examples</a><br /><br /><br />pro-spring-mvc-code<br /><a href="https://github.com/mdeinum/pro-spring-mvc-code" target="_blank">https://github.com/mdeinum/pro-spring-mvc-code</a><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><img src ="http://www.blogjava.net/paulwong/aggbug/406213.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-11-11 14:44 <a href="http://www.blogjava.net/paulwong/archive/2013/11/11/406213.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SPRINGMVC增加LOGBACK</title><link>http://www.blogjava.net/paulwong/archive/2013/11/11/406209.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Mon, 11 Nov 2013 05:44:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2013/11/11/406209.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/406209.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2013/11/11/406209.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/406209.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/406209.html</trackback:ping><description><![CDATA[Maven的pom.xml增加两个JAR<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&lt;dependency&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;org.slf4j&lt;/groupId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;jcl-over-slf4j&lt;/artifactId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;version&gt;1.7.2&lt;/version&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&lt;/dependency&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&lt;dependency&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;ch.qos.logback&lt;/groupId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;logback-classic&lt;/artifactId&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;version&gt;1.0.9&lt;/version&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&lt;/dependency&gt;</div><br /><br />web.xml<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;spring&nbsp;logback&nbsp;</span><span style="color: #008000; ">--&gt;</span>&nbsp;&nbsp;<br /><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">context-param</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">param-name</span><span style="color: #0000FF; ">&gt;</span>logbackConfigLocation<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">param-name</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">param-value</span><span style="color: #0000FF; ">&gt;classpath:</span>logback.xml<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">param-value</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;<br /><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">context-param</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">listener</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">listener-class</span><span style="color: #0000FF; ">&gt;mypackage</span>.LogbackConfigListener<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">listener-class</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;<br /><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">listener</span><span style="color: #0000FF; ">&gt;</span>&nbsp;&nbsp;</div><br /><br />logback.xml<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"&nbsp;</span><span style="color: #0000FF; ">?&gt;</span><br /><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">configuration</span><span style="color: #0000FF; ">&gt;</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">appender&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="STDOUT"</span><span style="color: #FF0000; ">&nbsp;class</span><span style="color: #0000FF; ">="ch.qos.logback.core.ConsoleAppender"</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">encoder</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">pattern</span><span style="color: #0000FF; ">&gt;</span>%d{HH:mm:ss.SSS}&nbsp;[%thread]&nbsp;%-5level&nbsp;%logger{36}&nbsp;-&nbsp;%msg%n<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">pattern</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">encoder</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">appender</span><span style="color: #0000FF; ">&gt;</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">appender&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="FILE"</span><span style="color: #FF0000; ">&nbsp;class</span><span style="color: #0000FF; ">="ch.qos.logback.core.FileAppender"</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">file</span><span style="color: #0000FF; ">&gt;</span>bookstore.log<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">file</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">encoder</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">pattern</span><span style="color: #0000FF; ">&gt;</span>%d{HH:mm:ss.SSS}&nbsp;[%thread]&nbsp;%-5level&nbsp;%logger{36}&nbsp;-&nbsp;%msg%n<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">pattern</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">encoder</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">appender</span><span style="color: #0000FF; ">&gt;</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">logger&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="org.springframework"</span><span style="color: #FF0000; ">&nbsp;level</span><span style="color: #0000FF; ">="INFO"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">logger&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="org.springframework.web"</span><span style="color: #FF0000; ">&nbsp;level</span><span style="color: #0000FF; ">="INFO"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">root&nbsp;</span><span style="color: #FF0000; ">level</span><span style="color: #0000FF; ">="INFO"</span><span style="color: #0000FF; ">&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">appender-ref&nbsp;</span><span style="color: #FF0000; ">ref</span><span style="color: #0000FF; ">="STDOUT"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">&lt;!--</span><span style="color: #008000; ">&nbsp;&lt;appender-ref&nbsp;ref="FILE"&nbsp;/&gt;&nbsp;</span><span style="color: #008000; ">--&gt;</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">root</span><span style="color: #0000FF; ">&gt;</span><br /><br /><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">configuration</span><span style="color: #0000FF; ">&gt;</span></div><br /><br /><br /><div>LogbackConfigurer.java</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">import</span>&nbsp;java.io.File;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.io.FileNotFoundException;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.net.URL;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;org.slf4j.LoggerFactory;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.util.ResourceUtils;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.util.SystemPropertyUtils;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;ch.qos.logback.classic.LoggerContext;<br /><span style="color: #0000FF; ">import</span>&nbsp;ch.qos.logback.classic.joran.JoranConfigurator;<br /><span style="color: #0000FF; ">import</span>&nbsp;ch.qos.logback.core.joran.spi.JoranException;<br /><br /><br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">abstract</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;LogbackConfigurer&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; ">&nbsp;Pseudo&nbsp;URL&nbsp;prefix&nbsp;for&nbsp;loading&nbsp;from&nbsp;the&nbsp;class&nbsp;path:&nbsp;"classpath:"&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLASSPATH_URL_PREFIX&nbsp;=&nbsp;"classpath:";<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; ">&nbsp;Extension&nbsp;that&nbsp;indicates&nbsp;a&nbsp;logback&nbsp;XML&nbsp;config&nbsp;file:&nbsp;".xml"&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;String&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XML_FILE_EXTENSION&nbsp;&nbsp;&nbsp;=&nbsp;".xml";<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;LoggerContext&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;(LoggerContext)&nbsp;LoggerFactory.getILoggerFactory();<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;JoranConfigurator&nbsp;configurator&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;JoranConfigurator();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Initialize&nbsp;logback&nbsp;from&nbsp;the&nbsp;given&nbsp;file&nbsp;location,&nbsp;with&nbsp;no&nbsp;config&nbsp;file&nbsp;refreshing.&nbsp;Assumes&nbsp;an&nbsp;XML&nbsp;file&nbsp;in&nbsp;case&nbsp;of&nbsp;a&nbsp;".xml"&nbsp;file&nbsp;extension,&nbsp;and&nbsp;a&nbsp;properties&nbsp;file&nbsp;otherwise.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;location<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;location&nbsp;of&nbsp;the&nbsp;config&nbsp;file:&nbsp;either&nbsp;a&nbsp;"classpath:"&nbsp;location&nbsp;(e.g.&nbsp;"classpath:mylogback.properties"),&nbsp;an&nbsp;absolute&nbsp;file&nbsp;URL&nbsp;(e.g.&nbsp;"file:C:/logback.properties),&nbsp;or&nbsp;a&nbsp;plain&nbsp;absolute&nbsp;path&nbsp;in&nbsp;the&nbsp;file&nbsp;system&nbsp;(e.g.&nbsp;"C:/logback.properties")<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@throws</span><span style="color: #008000; ">&nbsp;FileNotFoundException<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;the&nbsp;location&nbsp;specifies&nbsp;an&nbsp;invalid&nbsp;file&nbsp;path<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;initLogging(String&nbsp;location)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;FileNotFoundException&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;resolvedLocation&nbsp;=&nbsp;SystemPropertyUtils.resolvePlaceholders(location);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URL&nbsp;url&nbsp;=&nbsp;ResourceUtils.getURL(resolvedLocation);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(resolvedLocation.toLowerCase().endsWith(XML_FILE_EXTENSION))&nbsp;{<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DOMConfigurator.configure(url);</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;configurator.setContext(lc);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lc.reset();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;configurator.doConfigure(url);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(JoranException&nbsp;ex)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">throw</span>&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;FileNotFoundException(url.getPath());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lc.start();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PropertyConfigurator.configure(url);<br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Shut&nbsp;down&nbsp;logback,&nbsp;properly&nbsp;releasing&nbsp;all&nbsp;file&nbsp;locks.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;p&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;This&nbsp;isn't&nbsp;strictly&nbsp;necessary,&nbsp;but&nbsp;recommended&nbsp;for&nbsp;shutting&nbsp;down&nbsp;logback&nbsp;in&nbsp;a&nbsp;scenario&nbsp;where&nbsp;the&nbsp;host&nbsp;VM&nbsp;stays&nbsp;alive&nbsp;(for&nbsp;example,&nbsp;when&nbsp;shutting&nbsp;down&nbsp;an&nbsp;application&nbsp;in&nbsp;a&nbsp;J2EE&nbsp;environment).<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;shutdownLogging()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lc.stop();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Set&nbsp;the&nbsp;specified&nbsp;system&nbsp;property&nbsp;to&nbsp;the&nbsp;current&nbsp;working&nbsp;directory.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;p&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;This&nbsp;can&nbsp;be&nbsp;used&nbsp;e.g.&nbsp;for&nbsp;test&nbsp;environments,&nbsp;for&nbsp;applications&nbsp;that&nbsp;leverage&nbsp;logbackWebConfigurer's&nbsp;"webAppRootKey"&nbsp;support&nbsp;in&nbsp;a&nbsp;web&nbsp;environment.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;key<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system&nbsp;property&nbsp;key&nbsp;to&nbsp;use,&nbsp;as&nbsp;expected&nbsp;in&nbsp;logback&nbsp;configuration&nbsp;(for&nbsp;example:&nbsp;"demo.root",&nbsp;used&nbsp;as&nbsp;"${demo.root}/WEB-INF/demo.log")<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@see</span><span style="color: #008000; ">&nbsp;org.springframework.web.util.logbackWebConfigurer<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;setWorkingDirSystemProperty(String&nbsp;key)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.setProperty(key,&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;File("").getAbsolutePath());<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}</div><br /><br /><div>LogbackWebConfigurer.java</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">import</span>&nbsp;java.io.FileNotFoundException;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;javax.servlet.ServletContext;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.util.ResourceUtils;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.util.SystemPropertyUtils;<br /><span style="color: #0000FF; ">import</span>&nbsp;org.springframework.web.util.WebUtils;<br /><br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">abstract</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;LogbackWebConfigurer&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; ">&nbsp;Parameter&nbsp;specifying&nbsp;the&nbsp;location&nbsp;of&nbsp;the&nbsp;logback&nbsp;config&nbsp;file&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;String&nbsp;CONFIG_LOCATION_PARAM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;"logbackConfigLocation";<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; ">&nbsp;Parameter&nbsp;specifying&nbsp;the&nbsp;refresh&nbsp;interval&nbsp;for&nbsp;checking&nbsp;the&nbsp;logback&nbsp;config&nbsp;file&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;String&nbsp;REFRESH_INTERVAL_PARAM&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;"logbackRefreshInterval";<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; ">&nbsp;Parameter&nbsp;specifying&nbsp;whether&nbsp;to&nbsp;expose&nbsp;the&nbsp;web&nbsp;app&nbsp;root&nbsp;system&nbsp;property&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;String&nbsp;EXPOSE_WEB_APP_ROOT_PARAM&nbsp;=&nbsp;"logbackExposeWebAppRoot";<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Initialize&nbsp;logback,&nbsp;including&nbsp;setting&nbsp;the&nbsp;web&nbsp;app&nbsp;root&nbsp;system&nbsp;property.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;servletContext<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;current&nbsp;ServletContext<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@see</span><span style="color: #008000; ">&nbsp;WebUtils#setWebAppRootSystemProperty<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;initLogging(ServletContext&nbsp;servletContext)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Expose&nbsp;the&nbsp;web&nbsp;app&nbsp;root&nbsp;system&nbsp;property.</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(exposeWebAppRoot(servletContext))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WebUtils.setWebAppRootSystemProperty(servletContext);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Only&nbsp;perform&nbsp;custom&nbsp;logback&nbsp;initialization&nbsp;in&nbsp;case&nbsp;of&nbsp;a&nbsp;config&nbsp;file.</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;location&nbsp;=&nbsp;servletContext.getInitParameter(CONFIG_LOCATION_PARAM);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(location&nbsp;!=&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Perform&nbsp;actual&nbsp;logback&nbsp;initialization;&nbsp;else&nbsp;rely&nbsp;on&nbsp;logback's&nbsp;default&nbsp;initialization.</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Return&nbsp;a&nbsp;URL&nbsp;(e.g.&nbsp;"classpath:"&nbsp;or&nbsp;"file:")&nbsp;as-is;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;consider&nbsp;a&nbsp;plain&nbsp;file&nbsp;path&nbsp;as&nbsp;relative&nbsp;to&nbsp;the&nbsp;web&nbsp;application&nbsp;root&nbsp;directory.</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!ResourceUtils.isUrl(location))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Resolve&nbsp;system&nbsp;property&nbsp;placeholders&nbsp;before&nbsp;resolving&nbsp;real&nbsp;path.</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;=&nbsp;SystemPropertyUtils.resolvePlaceholders(location);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;=&nbsp;WebUtils.getRealPath(servletContext,&nbsp;location);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Write&nbsp;log&nbsp;message&nbsp;to&nbsp;server&nbsp;log.</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;servletContext.log("Initializing&nbsp;logback&nbsp;from&nbsp;["&nbsp;+&nbsp;location&nbsp;+&nbsp;"]");<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Initialize&nbsp;without&nbsp;refresh&nbsp;check,&nbsp;i.e.&nbsp;without&nbsp;logback's&nbsp;watchdog&nbsp;thread.</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LogbackConfigurer.initLogging(location);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(FileNotFoundException&nbsp;ex)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">throw</span>&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;IllegalArgumentException("Invalid&nbsp;'logbackConfigLocation'&nbsp;parameter:&nbsp;"&nbsp;+&nbsp;ex.getMessage());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Shut&nbsp;down&nbsp;logback,&nbsp;properly&nbsp;releasing&nbsp;all&nbsp;file&nbsp;locks&nbsp;and&nbsp;resetting&nbsp;the&nbsp;web&nbsp;app&nbsp;root&nbsp;system&nbsp;property.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@param</span><span style="color: #008000; ">&nbsp;servletContext<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;current&nbsp;ServletContext<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@see</span><span style="color: #008000; ">&nbsp;WebUtils#removeWebAppRootSystemProperty<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;shutdownLogging(ServletContext&nbsp;servletContext)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;servletContext.log("Shutting&nbsp;down&nbsp;logback");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LogbackConfigurer.shutdownLogging();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">finally</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;Remove&nbsp;the&nbsp;web&nbsp;app&nbsp;root&nbsp;system&nbsp;property.</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(exposeWebAppRoot(servletContext))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WebUtils.removeWebAppRootSystemProperty(servletContext);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/**</span><span style="color: #008000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Return&nbsp;whether&nbsp;to&nbsp;expose&nbsp;the&nbsp;web&nbsp;app&nbsp;root&nbsp;system&nbsp;property,&nbsp;checking&nbsp;the&nbsp;corresponding&nbsp;ServletContext&nbsp;init&nbsp;parameter.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080; ">@see</span><span style="color: #008000; ">&nbsp;#EXPOSE_WEB_APP_ROOT_PARAM<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;exposeWebAppRoot(ServletContext&nbsp;servletContext)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;exposeWebAppRootParam&nbsp;=&nbsp;servletContext.getInitParameter(EXPOSE_WEB_APP_ROOT_PARAM);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;(exposeWebAppRootParam&nbsp;==&nbsp;<span style="color: #0000FF; ">null</span>&nbsp;||&nbsp;Boolean.valueOf(exposeWebAppRootParam));<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}</div><br /><br /><div>LogbackConfigListener.java</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">import</span>&nbsp;javax.servlet.ServletContextEvent;<br /><span style="color: #0000FF; ">import</span>&nbsp;javax.servlet.ServletContextListener;<br /><br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;LogbackConfigListener&nbsp;<span style="color: #0000FF; ">implements</span>&nbsp;ServletContextListener&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;contextInitialized(ServletContextEvent&nbsp;event)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LogbackWebConfigurer.initLogging(event.getServletContext());<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;contextDestroyed(ServletContextEvent&nbsp;event)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LogbackWebConfigurer.shutdownLogging(event.getServletContext());<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div><br /><br /><br /><img src ="http://www.blogjava.net/paulwong/aggbug/406209.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2013-11-11 13:44 <a href="http://www.blogjava.net/paulwong/archive/2013/11/11/406209.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring3MVC+JSON</title><link>http://www.blogjava.net/paulwong/archive/2012/05/18/378452.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Thu, 17 May 2012 16:14:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2012/05/18/378452.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/378452.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2012/05/18/378452.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/378452.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/378452.html</trackback:ping><description><![CDATA[<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;自动解析action返回值&nbsp;解析成json格式&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">context:component-scan&nbsp;</span><span style="color: #ff0000">base-package</span><span style="color: #0000ff">="com.bplow.*.web"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="messageConverters"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">util:list&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="beanList"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ref&nbsp;</span><span style="color: #ff0000">bean</span><span style="color: #0000ff">="mappingJacksonHttpMessageConverter"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">util:list</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="mappingJacksonHttpMessageConverter"</span><span style="color: #ff0000">&nbsp;class</span><span style="color: #0000ff">="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="supportedMediaTypes"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">list</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">text/html;charset=UTF-8</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">list</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;自动解析action返回值&nbsp;解析成json格式&nbsp;</span><span style="color: #008000">--&gt;</span></div><br />然后需要额外的jar包 jackson 1.1,这里让我很无语，我首先下的1.9放上去什么方法找不到，换1.8x 方法找不到 我一直试到1.6 后来怒了用最老的 好了。。。坑，这绝对是坑啊 <br /><br />然后你的action中直接返回对象，集合，map吧 非常爽啊。测试如下<br /><br /><img border="0" alt="" src="http://static.oschina.net/uploads/space/2012/0517/155141_8Nq4_105762.png" width="395" longdesc="" height="394" /><br /><img border="0" alt="" src="http://static.oschina.net/uploads/space/2012/0517/155155_Z7lY_105762.png" width="629" longdesc="" height="629" /><br /><br /><br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000"> com.bplow.test.web;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.io.UnsupportedEncodingException;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.util.HashMap;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.util.LinkedList;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.util.List;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.util.Map;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.springframework.stereotype.Controller;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.springframework.web.bind.annotation.RequestMapping;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.springframework.web.bind.annotation.RequestMethod;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> org.springframework.web.bind.annotation.ResponseBody;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif"  alt="" />@Controller<br /><img id="Codehighlighter1_448_1418_Open_Image" onclick="this.style.display='none'; Codehighlighter1_448_1418_Open_Text.style.display='none'; Codehighlighter1_448_1418_Closed_Image.style.display='inline'; Codehighlighter1_448_1418_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_448_1418_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_448_1418_Closed_Text.style.display='none'; Codehighlighter1_448_1418_Open_Image.style.display='inline'; Codehighlighter1_448_1418_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> TestAction </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_448_1418_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_448_1418_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> <br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> </span><span style="color: #008000">//</span><span style="color: #008000"> ResponseBody 对应string则对应ajax getText</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000"> @RequestMapping(value </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">/testAction</span><span style="color: #000000">"</span><span style="color: #000000">, method </span><span style="color: #000000">=</span><span style="color: #000000"> RequestMethod.GET)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> @ResponseBody<br /><img id="Codehighlighter1_645_690_Open_Image" onclick="this.style.display='none'; Codehighlighter1_645_690_Open_Text.style.display='none'; Codehighlighter1_645_690_Closed_Image.style.display='inline'; Codehighlighter1_645_690_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_645_690_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_645_690_Closed_Text.style.display='none'; Codehighlighter1_645_690_Open_Image.style.display='inline'; Codehighlighter1_645_690_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif"> </span><span style="color: #0000ff">public</span><span style="color: #000000"> String allOnActivities() </span><span style="color: #0000ff">throws</span><span style="color: #000000"> UnsupportedEncodingException </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_645_690_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_645_690_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> </span><span style="color: #0000ff">return</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">{'title':'HelloWorldGOGOGO'}</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" /> }</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> <br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> @RequestMapping(value </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">/testAction2</span><span style="color: #000000">"</span><span style="color: #000000">, method </span><span style="color: #000000">=</span><span style="color: #000000"> RequestMethod.GET)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> @ResponseBody<br /><img id="Codehighlighter1_805_871_Open_Image" onclick="this.style.display='none'; Codehighlighter1_805_871_Open_Text.style.display='none'; Codehighlighter1_805_871_Closed_Image.style.display='inline'; Codehighlighter1_805_871_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_805_871_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_805_871_Closed_Text.style.display='none'; Codehighlighter1_805_871_Open_Image.style.display='inline'; Codehighlighter1_805_871_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif"> </span><span style="color: #0000ff">public</span><span style="color: #000000"> TestVo getJsonVo() </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_805_871_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_805_871_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> TestVo vo </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> TestVo();<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> vo.setTitle(</span><span style="color: #000000">"</span><span style="color: #000000">吃吧</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> </span><span style="color: #0000ff">return</span><span style="color: #000000"> vo;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" /> }</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> <br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> @RequestMapping(value </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">/testAction3</span><span style="color: #000000">"</span><span style="color: #000000">, method </span><span style="color: #000000">=</span><span style="color: #000000"> RequestMethod.GET)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> @ResponseBody<br /><img id="Codehighlighter1_986_1145_Open_Image" onclick="this.style.display='none'; Codehighlighter1_986_1145_Open_Text.style.display='none'; Codehighlighter1_986_1145_Closed_Image.style.display='inline'; Codehighlighter1_986_1145_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_986_1145_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_986_1145_Closed_Text.style.display='none'; Codehighlighter1_986_1145_Open_Image.style.display='inline'; Codehighlighter1_986_1145_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif"> </span><span style="color: #0000ff">public</span><span style="color: #000000"> List getJsonList() </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_986_1145_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_986_1145_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> TestVo vo </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> TestVo();<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> vo.setTitle(</span><span style="color: #000000">"</span><span style="color: #000000">吃吧</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> List l </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> LinkedList();<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> l.add(vo);<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> l.add(vo);<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> l.add(vo);<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> l.add(vo);<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> l.add(vo);<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> </span><span style="color: #0000ff">return</span><span style="color: #000000"> l;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" /> }</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> <br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> @RequestMapping(value </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #000000">"</span><span style="color: #000000">/testAction4</span><span style="color: #000000">"</span><span style="color: #000000">, method </span><span style="color: #000000">=</span><span style="color: #000000"> RequestMethod.GET)<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> @ResponseBody<br /><img id="Codehighlighter1_1254_1416_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1254_1416_Open_Text.style.display='none'; Codehighlighter1_1254_1416_Closed_Image.style.display='inline'; Codehighlighter1_1254_1416_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_1254_1416_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1254_1416_Closed_Text.style.display='none'; Codehighlighter1_1254_1416_Open_Image.style.display='inline'; Codehighlighter1_1254_1416_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif"> </span><span style="color: #0000ff">public</span><span style="color: #000000"> Map getMap() </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1254_1416_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1254_1416_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> TestVo vo </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> TestVo();<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> vo.setTitle(</span><span style="color: #000000">"</span><span style="color: #000000">吃吧</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> HashMap hsm </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">new</span><span style="color: #000000"> HashMap();<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> hsm.put(</span><span style="color: #000000">"</span><span style="color: #000000">a</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #000000">123</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> hsm.put(</span><span style="color: #000000">"</span><span style="color: #000000">b</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #000000">"</span><span style="color: #000000">123</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> hsm.put(</span><span style="color: #000000">"</span><span style="color: #000000">c</span><span style="color: #000000">"</span><span style="color: #000000">, vo);<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif"  alt="" /> </span><span style="color: #0000ff">return</span><span style="color: #000000"> hsm;<br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" /> }</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"> </span></div><img src ="http://www.blogjava.net/paulwong/aggbug/378452.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2012-05-18 00:14 <a href="http://www.blogjava.net/paulwong/archive/2012/05/18/378452.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开始Spring MVC</title><link>http://www.blogjava.net/paulwong/archive/2012/03/29/373004.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Thu, 29 Mar 2012 11:06:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2012/03/29/373004.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/373004.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2012/03/29/373004.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/373004.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/373004.html</trackback:ping><description><![CDATA[建立一个web project,并导入spring 3.x的jar包配置web.xml根据上面的spring mvc流程图，我们知道DispatcherServlet是spring mvc 的一个前端控制器，所以我们当然要去配置它，以便于将请求转给DispatcherServlet处理<br /><br /><servlet>
<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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&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">dispatcher</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 /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&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">org.springframework.web.servlet.DispatcherServlet</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><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">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">contextConfigLocation</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;如果配置文件位于classpath下，可以这么写：&nbsp;classpath:dispatcher.xml&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br /><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">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">/WEB-INF/dispatcher.xml</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">init-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">load-on-startup</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">1</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">load-on-startup</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</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 /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&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">dispatcher</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 /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&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">/</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet-mapping</span><span style="color: #0000ff">&gt;</span></div><br /><servlet-name>注：由于DispatcherServlet在初始化的过程中需要一个配置文件来生产文件中的各种bean,并生成WebApplicationContext对象，保存到ServletContext中(如果DispatcherServlet有多个，那么每一个DispatcherServlet都对应一个WebApplicationContext)，我们可以在Servlet的init-param中配置配置文件的路径，当然如果我们没有配置Init-Param,它会默认到WEB-INF的文件夹中找[servletname]-servlet.xml文件，例如上面如果我们没有配置，则会去寻找dispatcher-servlet.xml这个配置文件。（在init-param中我们可以指定多个配置文件，用逗号分隔也可以使用通配符*）<br />配置上文中我们指定的所需的dispatcher.xml文件<?xml version="1.0" encoding="UTF-8"   ?><br /><br /><beans <br xmlns="http://www.springframework.org/schema/beans"  />
<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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">beans&nbsp;</span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://www.springframework.org/schema/beans"</span><span style="color: #ff0000">&nbsp;xmlns:xsi</span><span style="color: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000">&nbsp;xmlns:p</span><span style="color: #0000ff">="http://www.springframework.org/schema/p"</span><span style="color: #ff0000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />xmlns:context</span><span style="color: #0000ff">="http://www.springframework.org/schema/context"</span><span style="color: #ff0000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />xmlns:mvc</span><span style="color: #0000ff">="http://www.springframework.org/schema/mvc"</span><span style="color: #ff0000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />xsi:schemaLocation</span><span style="color: #0000ff">="<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />http://www.springframework.org/schema/beans<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />http://www.springframework.org/schema/beans/spring-beans-3.0.xsd<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />http://www.springframework.org/schema/context<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />http://www.springframework.org/schema/context/spring-context-3.0.xsd<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />http://www.springframework.org/schema/mvc<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">context:component-scan&nbsp;</span><span style="color: #ff0000">base-package</span><span style="color: #0000ff">="com.controls"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">mvc:annotation-driven&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">="org.springframework.web.servlet.view.InternalResourceViewResolver"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="prefix"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="/WEB-INF/views/"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="suffix"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">=".jsp"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="viewClass"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="org.springframework.web.servlet.view.JstlView"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">beans</span><span style="color: #0000ff">&gt;</span></div><br /></beans><br /><br />配置文件说明：<context:component-scan base-package="com.controls"></context:component-scan><br />
<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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">context:component-scan&nbsp;</span><span style="color: #ff0000">base-package</span><span style="color: #0000ff">="com.controls"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span></div>由于我们使用了基于注解的Controller，所以这里指定了需要被扫描的包路径，如果有多个可以使用逗号分隔<br />
<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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">mvc:annotation-driven&nbsp;</span><span style="color: #0000ff">/&gt;</span></div><br />上面的spring mvc流程图中我们知道DispatcherServlet接管请求后，会由HandlerMapping来执行映射，所以我们需要注册HanlderMapping，比如上面的标签会自动注册比如DefaultAnnotationHandlerMapping（执行请求到Controller的映射）和AnnotationMethodHandlerAdapter（调用controller中的方法）这样的bean，当然这个标签还提供了其他的一些支持(更多介绍请参照spring官方文档第455页)。<br /><br /><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">="org.springframework.web.servlet.view.InternalResourceViewResolver"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="prefix"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="/WEB-INF/views/"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="suffix"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">=".jsp"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="viewClass"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="org.springframework.web.servlet.view.JstlView"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span></div><br /></bean>上面spring mvc流程图的最后controller处理完毕后会交给一个ViewResolver进行处理，大体上是解析视图逻辑名并经过一定的处理获取一个视图，这里的意思是设置视图用jsp来处理(比如我们设置viewClass为JstlView)来进行处理，就是以forward的形式转发给jsp，这个地址是：/WEB-INF/views/[controller返回值].jsp ，当然视图解析器可以定义多个，（视图解析器不会处理ModelAndView中已经设置了View的请求，因为已经有View来处理了，那当然就不需要它来解析到真正的视图View啦）<br />编写Controller控制器这里我们使用例子的形式来说明<br /><br />实现一个控制器类@Controller<br />
<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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">@Controller<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />@RequestMapping(</span><span style="color: #000000">"</span><span style="color: #000000">/user</span><span style="color: #000000">"</span><span style="color: #000000">)<br /><img id="Codehighlighter1_62_65_Open_Image" onclick="this.style.display='none'; Codehighlighter1_62_65_Open_Text.style.display='none'; Codehighlighter1_62_65_Closed_Image.style.display='inline'; Codehighlighter1_62_65_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_62_65_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_62_65_Closed_Text.style.display='none'; Codehighlighter1_62_65_Open_Image.style.display='inline'; Codehighlighter1_62_65_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;UserControl&nbsp;</span><span id="Codehighlighter1_62_65_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_62_65_Open_Text"><span style="color: #000000">{<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /><br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />只要给类加上Controller的注解，并放在被扫描的包中，那么这个类就是一个控制器了，RequestMapping表明匹配的路径，可以写在类或者类的方法上，如果类上面有RequestMapping注解，那么其下面的方法就是相对于类上面注解地址的一个相对路径<br /><br /><br />定义一个接管请求的方法方法名：无任何要求<br />--------------------------------------------------------------<br />参数：(顺序以及个数无任何要求)<br />HttpServletRequest<br />HttpServletResponse<br />PrintWriter 相当于HttpResponse.getWriter()获得的对象<br />Map 其实是获得了ModelAndView中的Model<br />BindingResult 绑定数据的处理结果<br />HttpSession 如果使用此参数，需要注意如果是第一次访问还没有session的话会报错<br />@PathVariable 用于接收路径变量<br />@RequestParam 相当于调用request.getParameter(&#8220;name&#8221;)方法<br />@CookieValue 获取cookie的值<br />@RequestHeader 获取header中的值<br />实体对象 会根据请求的参数名，注入到这个对象对于得属性中，必须提供set方法<br />等等等等等<br />--------------------------------------------------------------<br />返回值：<br />void <br />返回值是void，如果接收了PrintWriter 或者 HttpServletResponse 参数，那么返回的ModelAndView就是null，也就是直接将输出流输出到客户端，如果方法没有接收输出参数，后面会默认生成一个视图名<br /><br />String 视图逻辑名<br /><br />ModelAndView 是一个视图逻辑名+Map的封装类<br />其他任意类型 存入ModelAndView中的Model<br />--------------------------------------------------------------<br /><br />不管我们的返回类型是什么，返回值会通过处理，最终返回一个ModelAndView或者null<br />例1:给方法定义一个请求映射并使用路径变量 @RequestMapping("/id/{userid}/name/{username}")<br /><br />
<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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">@RequestMapping(</span><span style="color: #000000">"</span><span style="color: #000000">/id/{userid}/name/{username}</span><span style="color: #000000">"</span><span style="color: #000000">)<br /><img id="Codehighlighter1_177_338_Open_Image" onclick="this.style.display='none'; Codehighlighter1_177_338_Open_Text.style.display='none'; Codehighlighter1_177_338_Closed_Image.style.display='inline'; Codehighlighter1_177_338_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_177_338_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_177_338_Closed_Text.style.display='none'; Codehighlighter1_177_338_Open_Image.style.display='inline'; Codehighlighter1_177_338_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;queryUser(@PathVariable(</span><span style="color: #000000">"</span><span style="color: #000000">userid</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;userID,&nbsp;@PathVariable(</span><span style="color: #000000">"</span><span style="color: #000000">username</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;String&nbsp;userName,&nbsp;Map</span><span style="color: #000000">&lt;</span><span style="color: #000000">String,&nbsp;User</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;model)&nbsp;</span><span id="Codehighlighter1_177_338_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_177_338_Open_Text"><span style="color: #000000">{<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;User();<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setUserID(userID);<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user.setUserName(userName);<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;model.put(</span><span style="color: #000000">"</span><span style="color: #000000">userInfo</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;user);<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Home</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div><br /><br />@RequestMapping定义路由映射，其中{userid} {username} 是PathVariable(路径变量)<br />这样我们只需访问 http://localhost:8080/SpringMVC/user/id/10001/name/liudehua 就能进入上面的方法<br />RequestMapping还可以使用通配符，如： /test/*/name/{name}<br /><br />例2:接受请求参数@RequestMapping("/save")<br />
<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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">@RequestMapping(</span><span style="color: #000000">"</span><span style="color: #000000">/save</span><span style="color: #000000">"</span><span style="color: #000000">)<br /><img id="Codehighlighter1_116_209_Open_Image" onclick="this.style.display='none'; Codehighlighter1_116_209_Open_Text.style.display='none'; Codehighlighter1_116_209_Closed_Image.style.display='inline'; Codehighlighter1_116_209_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_116_209_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_116_209_Closed_Text.style.display='none'; Codehighlighter1_116_209_Open_Image.style.display='inline'; Codehighlighter1_116_209_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;save(@RequestParam(</span><span style="color: #000000">"</span><span style="color: #000000">userName</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;String&nbsp;userName,@RequestParam(</span><span style="color: #000000">"</span><span style="color: #000000">Age</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;age)&nbsp;</span><span id="Codehighlighter1_116_209_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_116_209_Open_Text"><span style="color: #000000">{<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(userName);<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(age);<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Home</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br /><br />例3:请求参数直接注入到Model@RequestMapping("/save")<br />
<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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">@RequestMapping(</span><span style="color: #000000">"</span><span style="color: #000000">/save</span><span style="color: #000000">"</span><span style="color: #000000">)<br /><img id="Codehighlighter1_55_171_Open_Image" onclick="this.style.display='none'; Codehighlighter1_55_171_Open_Text.style.display='none'; Codehighlighter1_55_171_Closed_Image.style.display='inline'; Codehighlighter1_55_171_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_55_171_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_55_171_Closed_Text.style.display='none'; Codehighlighter1_55_171_Open_Image.style.display='inline'; Codehighlighter1_55_171_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;save(User&nbsp;user)&nbsp;</span><span id="Codehighlighter1_55_171_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_55_171_Open_Text"><span style="color: #000000">{<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getUserID());<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getUserName());<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Home</span><span style="color: #000000">"</span><span style="color: #000000">;<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />例4:转发与重定向转发： (相当于 request.getRequestDispatcher(&#8220;&#8221;).forward(request, response))<br />return &#8220;forward:/user/test&#8221;;<br /><br />重定向： (相当于response.redirect(&#8220;&#8221;))<br />return &#8220;redirect:/user/test&#8221;<br />return &#8220;redirect:http://www.google.com.hk&#8221;;<br /><br />例5:根据HttpMethod来过滤请求 
<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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_45_83_Open_Image" onclick="this.style.display='none'; Codehighlighter1_45_83_Open_Text.style.display='none'; Codehighlighter1_45_83_Closed_Image.style.display='inline'; Codehighlighter1_45_83_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_45_83_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_45_83_Closed_Text.style.display='none'; Codehighlighter1_45_83_Open_Image.style.display='inline'; Codehighlighter1_45_83_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"><span style="color: #000000">@RequestMapping(params</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">hello=world</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;method</span><span style="color: #000000">=</span><span id="Codehighlighter1_45_83_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_45_83_Open_Text"><span style="color: #000000">{RequestMethod.GET,&nbsp;RequestMethod.POST}</span></span><span style="color: #000000">)&nbsp;<br /><img id="Codehighlighter1_114_116_Open_Image" onclick="this.style.display='none'; Codehighlighter1_114_116_Open_Text.style.display='none'; Codehighlighter1_114_116_Closed_Image.style.display='inline'; Codehighlighter1_114_116_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_114_116_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_114_116_Closed_Text.style.display='none'; Codehighlighter1_114_116_Open_Image.style.display='inline'; Codehighlighter1_114_116_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;helloworld()&nbsp;</span><span id="Codehighlighter1_114_116_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_114_116_Open_Text"><span style="color: #000000">{<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000">&nbsp;<br /><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br /><br />例6:根据参数来进行过滤<br />
<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"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_45_83_Open_Image" onclick="this.style.display='none'; Codehighlighter1_45_83_Open_Text.style.display='none'; Codehighlighter1_45_83_Closed_Image.style.display='inline'; Codehighlighter1_45_83_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_45_83_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_45_83_Closed_Text.style.display='none'; Codehighlighter1_45_83_Open_Image.style.display='inline'; Codehighlighter1_45_83_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top"><span style="color: #000000">@RequestMapping(params</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">hello=world</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;method</span><span style="color: #000000">=</span><span id="Codehighlighter1_45_83_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_45_83_Open_Text"><span style="color: #000000">{RequestMethod.GET,&nbsp;RequestMethod.POST}</span></span><span style="color: #000000">)&nbsp;&nbsp;<br /><img id="Codehighlighter1_115_117_Open_Image" onclick="this.style.display='none'; Codehighlighter1_115_117_Open_Text.style.display='none'; Codehighlighter1_115_117_Closed_Image.style.display='inline'; Codehighlighter1_115_117_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_115_117_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_115_117_Closed_Text.style.display='none'; Codehighlighter1_115_117_Open_Image.style.display='inline'; Codehighlighter1_115_117_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;helloworld()&nbsp;</span><span id="Codehighlighter1_115_117_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_115_117_Open_Text"><span style="color: #000000">{<br /><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000">&nbsp;&nbsp;</span></div><br />必须有个hello的参数并且名称为world，而且只能是get或post请求才会进入此方法 <br /><br /><a href="http://www.cnblogs.com/zhaoyang/archive/2012/01/07/2315425.html">http://www.cnblogs.com/zhaoyang/archive/2012/01/07/2315425.html</a><img src ="http://www.blogjava.net/paulwong/aggbug/373004.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2012-03-29 19:06 <a href="http://www.blogjava.net/paulwong/archive/2012/03/29/373004.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring MVC 的请求参数获取的几种方法</title><link>http://www.blogjava.net/paulwong/archive/2012/03/23/372564.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Fri, 23 Mar 2012 09:36:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2012/03/23/372564.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/372564.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2012/03/23/372564.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/372564.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/372564.html</trackback:ping><description><![CDATA[<span style="color: #0000ff;">通过@PathVariabl注解获取路径中传递参数</span><br /><br />JAVA<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">&nbsp;@RequestMapping(value&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/{id}/{str}</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)<br />&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;ModelAndView&nbsp;helloWorld(@PathVariable&nbsp;String&nbsp;id,&nbsp;@PathVariable&nbsp;String&nbsp;str)&nbsp;{<br />&nbsp;System.out.println(id);<br />&nbsp;System.out.println(str);<br />&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;ModelAndView(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/helloWorld</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />}</span></div><br /><br /><span style="color: #0000ff;">用@ModelAttribute注解获取POST请求的FORM表单数据</span><br />JSP<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">form&nbsp;</span><span style="color: #FF0000; ">method</span><span style="color: #0000FF; ">="post"</span><span style="color: #FF0000; ">&nbsp;action</span><span style="color: #0000FF; ">="hao.do"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;a:&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">input&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="a"</span><span style="color: #FF0000; ">&nbsp;type</span><span style="color: #0000FF; ">="text"</span><span style="color: #FF0000; ">&nbsp;name</span><span style="color: #0000FF; ">="a"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />&nbsp;b:&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">input&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="b"</span><span style="color: #FF0000; ">&nbsp;type</span><span style="color: #0000FF; ">="text"</span><span style="color: #FF0000; ">&nbsp;name</span><span style="color: #0000FF; ">="b"</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">input&nbsp;</span><span style="color: #FF0000; ">type</span><span style="color: #0000FF; ">="submit"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="Submit"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">form</span><span style="color: #0000FF; ">&gt;</span></div><br /><br />JAVA pojo<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;Pojo{<br />&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;String&nbsp;a;<br />&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;b;<br />}<br /></span></div><br /><br />JAVA controller<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">@RequestMapping(method&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;RequestMethod.POST)<br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;processSubmit(@ModelAttribute(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">pojo</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)&nbsp;Pojo&nbsp;pojo)&nbsp;{<br />&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">helloWorld</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;}</span></div><br /><br /><span style="color: #0000ff;">直接用HttpServletRequest获取</span><br />JAVA<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">@RequestMapping(method&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;RequestMethod.GET)<br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;get(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;{<br />&nbsp;System.out.println(request.getParameter(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">a</span><span style="color: #000000; ">"</span><span style="color: #000000; ">));<br />&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">helloWorld</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />}</span></div><br /><br /><span style="color: #0000ff;">用注解@RequestParam绑定请求参数a到变量a</span><br />当请求参数a不存在时会有异常发生,可以通过设置属性required=false解决,<br />例如: @RequestParam(value="a", required=false)<br />JAVA<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">@RequestMapping(value&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/requestParam</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;method&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;RequestMethod.GET)<br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;setupForm(@RequestParam(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">a</span><span style="color: #000000; ">"</span><span style="color: #000000; ">)&nbsp;String&nbsp;a,&nbsp;ModelMap&nbsp;model)&nbsp;{<br />&nbsp;System.out.println(a);<br /></span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">helloWorld</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;} <br /></span></div><img src ="http://www.blogjava.net/paulwong/aggbug/372564.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2012-03-23 17:36 <a href="http://www.blogjava.net/paulwong/archive/2012/03/23/372564.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于注解的SpringMVC+freemarker环境搭建</title><link>http://www.blogjava.net/paulwong/archive/2012/03/19/372220.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Mon, 19 Mar 2012 13:32:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2012/03/19/372220.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/372220.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2012/03/19/372220.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/372220.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/372220.html</trackback:ping><description><![CDATA[<ol><li>首先用IDE建一个web工程。(这个就不详细介绍了) <br /></li><li>引入响应的jar包 <br /></li><li>web.xml
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">web-app&nbsp;</span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://java.sun.com/xml/ns/javaee"</span><span style="color: #ff0000">&nbsp;xmlns:xsi</span><span style="color: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000ff">="http://java.sun.com/xml/ns/javaee&nbsp;http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"</span><span style="color: #ff0000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;version</span><span style="color: #0000ff">="3.0"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;&nbsp;Spring&nbsp;服务层的配置文件&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">context-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">contextConfigLocation</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">classpath:applicationContext.xml</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">param-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">context-param</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;&nbsp;Spring&nbsp;容器启动监听器&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">listener</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">listener-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">org.springframework.web.context.ContextLoaderListener<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">listener-class</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">listener</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&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">springmvc</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 /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&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">org.springframework.web.servlet.DispatcherServlet<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&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"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">load-on-startup</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">1</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">load-on-startup</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">servlet</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">为DispatcherServlet建立映射&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</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 /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&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">springmvc</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 /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&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">/</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</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 /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">web-app</span><span style="color: #0000ff">&gt;</span></div><br /></li><li>SpringMVC另外一个重要的配置文件。 <br />DispatcherServlet会根绝web.xml中配置的&lt;servlet-name&gt;去找&lt;servlet-name&gt;-servlet.xml的文件来加载spring的一些配置信息。我这里就应该取名叫springmvc-servlet.xml 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">beans&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="http://www.springframework.org/schema/beans"</span><span style="color: #ff0000">&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:xsi</span><span style="color: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="color: #ff0000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:p</span><span style="color: #0000ff">="http://www.springframework.org/schema/p"</span><span style="color: #ff0000">&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;xmlns:context</span><span style="color: #0000ff">="http://www.springframework.org/schema/context"</span><span style="color: #ff0000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="color: #0000ff">="http://www.springframework.org/schema/beans&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/beans/spring-beans-2.5.xsd<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/context&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;http://www.springframework.org/schema/context/spring-context-2.5.xsd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">对web包中的所有类进行扫描，以完成Bean创建和自动依赖注入的功能&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">context:component-scan&nbsp;</span><span style="color: #ff0000">base-package</span><span style="color: #0000ff">="com.liba.spring.mvc"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;启动Spring&nbsp;MVC的注解功能，完成请求和注解POJO的映射&nbsp;&nbsp;&nbsp;请求映射</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">以下三种视图配置根据需要任选一种即可&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;&nbsp;一般的视图配置&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&lt;bean&nbsp;class="org.springframework.web.servlet.view.InternalResourceViewResolver"&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p:prefix="/WEB-INF/view/"&nbsp;p:suffix=".jsp"/&gt;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;针对freemarker的视图配置&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="viewResolver"</span><span style="color: #ff0000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000ff">="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="cache"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="prefix"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">=""</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="suffix"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">=".ftl"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="contentType"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="text/html;charset=UTF-8"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="requestContextAttribute"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="request"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="exposeSpringMacroHelpers"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="exposeRequestAttributes"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="exposeSessionAttributes"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;View&nbsp;resolvers&nbsp;can&nbsp;also&nbsp;be&nbsp;configured&nbsp;with&nbsp;ResourceBundles&nbsp;or&nbsp;XML&nbsp;files.&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;you&nbsp;need&nbsp;different&nbsp;view&nbsp;resolving&nbsp;based&nbsp;on&nbsp;Locale,&nbsp;you&nbsp;have&nbsp;to&nbsp;use&nbsp;the&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resource&nbsp;bundle&nbsp;resolver.&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;这个是针对返回视图还是json值的视图配置&nbsp;&nbsp;&nbsp;来分别处理同步和异步请求&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&lt;bean<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="mediaTypes"&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;map&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;entry&nbsp;key="html"&nbsp;value="text/html"&nbsp;/&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;entry&nbsp;key="json"&nbsp;value="application/json"&nbsp;/&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/map&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/property&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="favorParameter"&nbsp;value="true"&nbsp;/&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="viewResolvers"&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;list&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean&nbsp;class="org.springframework.web.servlet.view.BeanNameViewResolver"&nbsp;/&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean&nbsp;id="viewResolver"<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="cache"&nbsp;value="true"&nbsp;/&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="prefix"&nbsp;value=""&nbsp;/&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="suffix"&nbsp;value=".ftl"&nbsp;/&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="contentType"&nbsp;value="text/html;charset=UTF-8"&gt;&lt;/property&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="requestContextAttribute"&nbsp;value="request"&nbsp;/&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="exposeSpringMacroHelpers"&nbsp;value="true"&nbsp;/&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="exposeRequestAttributes"&nbsp;value="true"&nbsp;/&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="exposeSessionAttributes"&nbsp;value="true"&nbsp;/&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/bean&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/list&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/property&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property&nbsp;name="defaultContentType"&nbsp;value="text/html"&nbsp;/&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/bean&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">beans</span><span style="color: #0000ff">&gt;</span></div><br /></li><li>如果是使用freemarker最为视图模板需要再spring的配置文件applicationContext.xml中加入以下配置 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="freemarkerConfig"</span><span style="color: #ff0000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class</span><span style="color: #0000ff">="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="templateLoaderPath"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="/WEB-INF/view/"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="freemarkerSettings"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">props</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">prop&nbsp;</span><span style="color: #ff0000">key</span><span style="color: #0000ff">="template_update_delay"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">0</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">prop</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">prop&nbsp;</span><span style="color: #ff0000">key</span><span style="color: #0000ff">="default_encoding"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">UTF-8</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">prop</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">prop&nbsp;</span><span style="color: #ff0000">key</span><span style="color: #0000ff">="number_format"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">0.##########</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">prop</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">prop&nbsp;</span><span style="color: #ff0000">key</span><span style="color: #0000ff">="datetime_format"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">yyyy-MM-dd&nbsp;HH:mm:ss</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">prop</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">prop&nbsp;</span><span style="color: #ff0000">key</span><span style="color: #0000ff">="classic_compatible"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">true</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">prop</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">prop&nbsp;</span><span style="color: #ff0000">key</span><span style="color: #0000ff">="template_exception_handler"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">ignore</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">prop</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">props</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">property</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">bean</span><span style="color: #0000ff">&gt;</span></div><br /></li><li>Controller建立 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.http.HttpServletRequest;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.springframework.stereotype.Controller;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.springframework.web.bind.annotation.RequestMapping;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.springframework.web.bind.annotation.RequestMethod;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.springframework.web.servlet.ModelAndView;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />@Controller<br /><img id="Codehighlighter1_321_606_Open_Image" onclick="this.style.display='none'; Codehighlighter1_321_606_Open_Text.style.display='none'; Codehighlighter1_321_606_Closed_Image.style.display='inline'; Codehighlighter1_321_606_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_321_606_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_321_606_Closed_Text.style.display='none'; Codehighlighter1_321_606_Open_Image.style.display='inline'; Codehighlighter1_321_606_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;SpringMvcController&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_321_606_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_321_606_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img id="Codehighlighter1_365_383_Open_Image" onclick="this.style.display='none'; Codehighlighter1_365_383_Open_Text.style.display='none'; Codehighlighter1_365_383_Closed_Image.style.display='inline'; Codehighlighter1_365_383_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_365_383_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_365_383_Closed_Text.style.display='none'; Codehighlighter1_365_383_Open_Image.style.display='inline'; Codehighlighter1_365_383_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;@RequestMapping(value</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/welcome</span><span style="color: #000000">"</span><span style="color: #000000">,method</span><span style="color: #000000">=</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_365_383_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_365_383_Open_Text"><span style="color: #000000">{RequestMethod.GET}</span></span><span style="color: #000000">)&nbsp;<br /><img id="Codehighlighter1_449_604_Open_Image" onclick="this.style.display='none'; Codehighlighter1_449_604_Open_Text.style.display='none'; Codehighlighter1_449_604_Closed_Image.style.display='inline'; Codehighlighter1_449_604_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_449_604_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_449_604_Closed_Text.style.display='none'; Codehighlighter1_449_604_Open_Image.style.display='inline'; Codehighlighter1_449_604_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;ModelAndView&nbsp;getFirstPage(HttpServletRequest&nbsp;request)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_449_604_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_449_604_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">welcom就是视图的名称（welcom.ftl）</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ModelAndView&nbsp;mv&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ModelAndView(</span><span style="color: #000000">"</span><span style="color: #000000">welcom</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mv.addObject(</span><span style="color: #000000">"</span><span style="color: #000000">name</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">My&nbsp;First&nbsp;Spring&nbsp;Mvc</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;mv;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span></div>在url上敲http://localhost:8080/welcome就会到WEB-INF/view/welcom.ftl页面渲染数据<br /></li><li>welcom.ftl页面
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"&nbsp;"http://www.w3.org/TR/html4/loose.dtd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">meta&nbsp;</span><span style="color: #ff0000">http-equiv</span><span style="color: #0000ff">="Content-Type"</span><span style="color: #ff0000">&nbsp;content</span><span style="color: #0000ff">="text/html;&nbsp;charset=ISO-8859-1"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Insert&nbsp;title&nbsp;here</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />Hello&nbsp;${name}<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span></div><br />页面出来的效果： <br /><br />Hello My First Spring Mvc <br /><br /><br /><br /><br /><br /><br /><br /><br /></li></ol><img src ="http://www.blogjava.net/paulwong/aggbug/372220.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2012-03-19 21:32 <a href="http://www.blogjava.net/paulwong/archive/2012/03/19/372220.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java MVC框架性能比较</title><link>http://www.blogjava.net/paulwong/archive/2012/03/03/371171.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Sat, 03 Mar 2012 08:13:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2012/03/03/371171.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/371171.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2012/03/03/371171.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/371171.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/371171.html</trackback:ping><description><![CDATA[现在各种MVC框架很多，各框架的优缺点网络上也有很多的参考文章，但介绍各框架性能方面差别的文章却不多，本人在项目开发中，感觉到采用了struts2框架的项目访问速度，明显不如原来采用了struts1框架的项目快，带着这些疑惑，我对各类MVC框架的做了一个简单的性能分析比较，其结果应该说是基本符合预期的，可供大家参考。
<strong><br />
<br />
测试环境：<br />
<br />
</strong>CPU：酷睿2 T5750，<br />
内存：DDR2-667 2G，<br />
Web容器：Tomcat6.0，最大线程数设置为1000，<br />
操作系统：WinXP-sp3
<strong><br />
<br />
测试步骤：<br />
<br />
</strong>搭建6个Web工程，如下：
<br />
<span style="font-family: 宋体; color: blue">1.纯JSP:</span>不包含任何MVC框架，只有一个测试用的JSP页面。
<br />
<span style="font-family: 宋体; color: blue">2.struts1：</span>包含一个Action，不做任何逻辑处理，直接转发到一个JSP页面
<br />
<span style="font-family: 宋体; color: blue">3.struts2 JSP：</span>不包含Action，只包含测试JSP页面，直接访问该页面。
<br />
<span style="font-family: 宋体; color: blue">4.struts2 单例Action：</span>采用Spring来管理Struts2的Action实例，并配置成单例模式。
<br />
<span style="font-family: 宋体; color: blue">5.struts2 多例Action：</span>采用Spring来管理Struts2的Action实例，并配置成单例模式。
<br />
<span style="font-family: 宋体; color: blue">6.SpringMVC3：</span>采用Spring来管理Controller实例，包含一个Controller，不做逻辑处理，收到请求后，直接返回到一个JSP页面。
<strong><br />
<br />
测试结果：<br />
<br />
</strong>
<table border="1" cellpadding="0" cellspacing="0">
     <tbody>
         <tr>
             <td>
             测试工程
             </td>
             <td>
             请求数
             </td>
             <td>
             并发数
             </td>
             <td>
             总时间(s)
             </td>
             <td>
             总时间(s)
             </td>
             <td>
             总时间(s)
             </td>
             <td>
             平均值(s)
             </td>
             <td>
             Requests Per Second(每秒处理请求数)
             </td>
         </tr>
         <tr>
             <td>
             JSP
             </td>
             <td>
             2000
             </td>
             <td>
             200
             </td>
             <td>
             5.55
             </td>
             <td>
             3.59
             </td>
             <td>
             4.11
             </td>
             <td>
             4.42
             </td>
             <td>
             <span style="font-family: 宋体; color: green; font-size: 10pt">452.83</span>
             </td>
         </tr>
         <tr>
             <td>
             struts1
             </td>
             <td>
             2000
             </td>
             <td>
             200
             </td>
             <td>
             6.77
             </td>
             <td>
             3.83
             </td>
             <td>
             7.00
             </td>
             <td>
             5.86
             </td>
             <td>
             <span style="font-family: 宋体; color: blue; font-size: 10pt">341.03</span>
             </td>
         </tr>
         <tr>
             <td>
             struts2 JSP
             </td>
             <td>
             2000
             </td>
             <td>
             200
             </td>
             <td>
             25.20
             </td>
             <td>
             26.30
             </td>
             <td>
             24.11
             </td>
             <td>
             25.20
             </td>
             <td>
             79.35
             </td>
         </tr>
         <tr>
             <td>
             struts2 单例Action
             </td>
             <td>
             2000
             </td>
             <td>
             200
             </td>
             <td>
             28.36
             </td>
             <td>
             27.59
             </td>
             <td>
             27.69
             </td>
             <td>
             27.88
             </td>
             <td>
             71.74
             </td>
         </tr>
         <tr>
             <td>
             struts2 多例Action
             </td>
             <td>
             2000
             </td>
             <td>
             200
             </td>
             <td>
             31.31
             </td>
             <td>
             31.97
             </td>
             <td>
             39.56
             </td>
             <td>
             34.28
             </td>
             <td>
             <span style="font-family: 宋体; color: red; font-size: 10pt">58.34</span>
             </td>
         </tr>
         <tr>
             <td>
             SpringMVC3
             </td>
             <td>
             2000
             </td>
             <td>
             200
             </td>
             <td>
             7.16
             </td>
             <td>
             7.50
             </td>
             <td>
             4.27
             </td>
             <td>
             6.31
             </td>
             <td>
             <span style="font-family: 宋体; color: blue; font-size: 10pt">317.09</span>
             </td>
         </tr>
     </tbody>
</table>
<strong><br />
说明：<br />
<br />
</strong>以上测试虽不是非常的精确，但基本能说明一定的问题。每个JSP页面和Action都不包含任何的业务逻辑代码，只是请求转发。每轮测试取三次总时间的平均值。所有工程的测试均全部完成并正常处理请求，没有请求拒绝情况发生。
<strong><br />
<br />
结论：</strong>
<br />
<ol>
     <li>
     纯JSP的性能应该最高，这不难理解，JSP被编译成Servlet后，没有任何多余的功能，收到请求后直接处理。（<span style="color: blue">这也验证一句经典的话：越原始效率就越高。</span>）<br />
     <br />
     </li>
     <li>
     struts1的性能是仅次于纯JSP的，由于struts1采用单例Action模式，且本身的封装相比struts2应该说简单很多，虽然开发效率不如struts2，但已经过多年的实践考验，性能稳定高效。
     <br />
     <br />
     </li>
     <li>
     相比来说struts2的性能就比较差了，这不难理解，struts2之所以开发方便，是由于采用值栈、OGNL表达式、拦截器等技术对请求参数的映射和返回结果进行了处理，另外还采用大量的标签库等，这些都无疑增加了处理的时间。因此降低了效率。在我们实际的项目中，我测试本地工程访问每秒处理请求数只能达到35左右，应该说还有不少可优化的空间。
     <br />
     <br />
     </li>
     <li>
     很多人认为struts2性能差是因为它的多例Action模式导致的，但我们采用spring管理struts2的Action，并设置按单例方式生成Action实例后，发现其性能有所提高，但并不是很明显。由此可见，多例Action模式并不是struts2性能瓶颈所在。另外，我们在struts2中采用JSP方式访问，发现其性能依旧和没有采用任何MVC框架的纯JSP之间存在好几倍的差距，这又从另一个侧面证实了我们刚才得出结论，struts2性能的瓶颈不在于它的多例Action模式。<br />
     <br />
     </li>
     <li>
     SpringMVC3的性能略逊于struts1，但基本是同级别的，这让人眼前一亮，springMVC有着不比struts2差的开发效率和解耦度，但性能却是struts2的好几倍，这让我们灰常振奋，SpringMVC无疑又是项目开发的一个好的选择。 </li>
</ol>
<img src ="http://www.blogjava.net/paulwong/aggbug/371171.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2012-03-03 16:13 <a href="http://www.blogjava.net/paulwong/archive/2012/03/03/371171.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring MVC如何防止重复提交？类似Struts Token机制！</title><link>http://www.blogjava.net/paulwong/archive/2012/02/20/370375.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Mon, 20 Feb 2012 14:57:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2012/02/20/370375.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/370375.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2012/02/20/370375.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/370375.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/370375.html</trackback:ping><description><![CDATA[首先，需要将继承了SimpleFormController之类的sessionForm设为true。这样，在显示一个新表单时，Spring会将command存放在session中，而在提交表单时，Spring会从session中取出此command，随后立即从session中删除存放command的attribute。如果发现在session中没有command，Spring将其断定为重复提交，转而执行handleInvalidSubmit(request, response)，可覆盖此方法负责防止重复提交的任务。<br /><br />可以这么说，当setSessionForm(true)之后，如果没有先后经历显示表单、提交表单的过程，就会被认为是重复提交表单。<br /><br />而有一些情况下却必须重复提交表单，如，修改数据库的数据后，试图写入数据库时因某些异常失败，如果此时异常被当前页面捕获并依旧返回当前页面，由于command已经被Spring在后台从session中移走，因此，就被认为是无效重复提交，从而导致第二次经修改后的记录无法正确提交到数据库中。handleInvalidSubmit()必须考虑到这种情况。  <img src ="http://www.blogjava.net/paulwong/aggbug/370375.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2012-02-20 22:57 <a href="http://www.blogjava.net/paulwong/archive/2012/02/20/370375.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SPRING MVC</title><link>http://www.blogjava.net/paulwong/archive/2012/02/20/370373.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Mon, 20 Feb 2012 14:53:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2012/02/20/370373.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/370373.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2012/02/20/370373.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/370373.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/370373.html</trackback:ping><description><![CDATA[SPRING MVC就是和STRUTS等一样，是实现了MVC的框架，但性能比STRUTS要好，STRUTS对于每个请求都是新建一个ACTION处理，而SPRING MVC是对应到不同的方法。以下为一些核心概念：<br />
<ol><li>ACTION SERVLET：前端控制器，和所有的WEB框架一样，是所有的请求的中心入口</li><li>MAPPING HANDLER：&nbsp;比对URL，找出负责处理的控制器</li><li>CONTROLLER：控制器，负责处理前端的请求，返回MODELVIEW</li><li>VIEW RESOLVER：根据CONTROLLER返回的MODEL VIEW找出负责展现的VIEW</li><li>VIEW：由于展现内容可以有不同方式，如JSP，FREEMARKER等，VIEW就负责展现，分两步，取得要展现的模版的路径，使用解释器解释并取得最终内容。一般一个SPRING就一个展现器，如JSTLVIEW，对于不同的URL，只是JSP页面路径不同，从CONTROLLER返回的MODEL VIEW中取得JSP路径，输出最终内容</li><li>FORM HANDLER：页面如果有表单，就涉及到如何从表单中读取数据或将数据绑定到表单中，表单处理器已经和CONTROLLER结合在一起了，只须继承SIMPLE FORM HANDLER就可以，在JSP中配置COMMANDNAME值，就可以此为KEY，从MODELVIEW中取表单值或绑定值到表单中 </li></ol>在STRUTS中，会有一配置文件：STRUTS-COMFIG.XML，配置了所要用到的BEAN的内容，好处是直观，但项目大了，免不了配置文件数量庞大，为了减少配置文件的数量，引入注释，实际上可以理解为配置文件不用手写，由容器在启动时动态帮你生成，只须在相应代码，如类名，方法上加上注释，容器在解释这些类的时候就会动态生成一虚拟的配置文件，供后续使用。具体的注释有@CONTROLLER/@SERVICE/@REQUESTMAPPING等。<br /><br /><br /><br />Spring MVC 3 深入总结<br /><a href="http://www.blogjava.net/qcyycom/archive/2013/07/11/401467.html" target="_blank">http://www.blogjava.net/qcyycom/archive/2013/07/11/401467.html</a><img src ="http://www.blogjava.net/paulwong/aggbug/370373.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2012-02-20 22:53 <a href="http://www.blogjava.net/paulwong/archive/2012/02/20/370373.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>