renxiao2003 发表于 2011-12-21 08:44

Spring3 REST MVC框架,提速你的Web开发

<P>最近在Java web 项目中需要采用非常简单的REST框架,Struts2、webwork、JSF 经过一番比较,最后选择了Spring3,理由只有一个 “<U><STRONG>简单</STRONG>,<STRONG>好用</STRONG>,并满足需要</U>”。很久以前就Rod Johnson大叔说<STRONG> Spring3</STRONG> 全面支持REST风格的Web服务,"We're really seeing extensive interest and growth in REST, and it will have comprehensive support for RESTful Web services," said Johnson,今天亲自尝试了一下,真有点相识恨晚的感觉,如果在这次项目运用没有太大的问题,将来在其他项目会大量运用。</P>
<P><STRONG>工作原理如图所示:</STRONG><BR><IMG alt=http://1aqpcg.bay.livefilestore.com/y1p_Q90l9w2JCMiEtgzkdikNQZoyy7Ic7GiCrm8Uk2GUhHZ1C80d7j2Ty4X0IWuydFepV3htprYHjptpEtq561o-7Ok_rkBgoZa/spring_rest_fm.png src="http://1aqpcg.bay.livefilestore.com/y1p_Q90l9w2JCMiEtgzkdikNQZoyy7Ic7GiCrm8Uk2GUhHZ1C80d7j2Ty4X0IWuydFepV3htprYHjptpEtq561o-7Ok_rkBgoZa/spring_rest_fm.png"><BR>*根据HTTP请求的URL,调用相应的DispatcherServlet控制器。<BR>*提供一个视图是作为HTTP响应发送。</P>
<P><STRONG>页面上</STRONG><STRONG>最终</STRONG><STRONG>运行</STRONG><STRONG>效果,如图所示:</STRONG></P>
<P><IMG alt=http://1aqpcg.bay.livefilestore.com/y1pu1qm8gBjr1VJ_9hg2BvILVMcD3tnvyc1WTPRVpkVTHqbP00tQTml9vMDJU_xnyfNrGls2OPS7Df-Z96_zPSMFbqsWXxxUr2t/topic_view.png src="http://1aqpcg.bay.livefilestore.com/y1pu1qm8gBjr1VJ_9hg2BvILVMcD3tnvyc1WTPRVpkVTHqbP00tQTml9vMDJU_xnyfNrGls2OPS7Df-Z96_zPSMFbqsWXxxUr2t/topic_view.png"><BR><STRONG><SPAN style="COLOR: rgb(255,255,255)"><SPAN style="BACKGROUND-COLOR: rgb(0,100,0)">主要代码:</SPAN></SPAN></STRONG><BR><STRONG><SPAN style="COLOR: rgb(255,255,255)"><SPAN style="BACKGROUND-COLOR: rgb(128,0,0)"><BR>清单1:TopicController</SPAN></SPAN></STRONG><BR>package com.javabloger.springrest.action;</P>
<P>import javax.servlet.http.HttpServletRequest;<BR>import javax.servlet.http.HttpServletResponse;<BR>import org.springframework.stereotype.Controller;<BR>import org.springframework.web.bind.annotation.PathVariable;<BR>import org.springframework.web.bind.annotation.RequestMapping;<BR>import org.springframework.web.bind.annotation.RequestMethod;</P>
<P>@Controller<BR>@RequestMapping("/topic")&nbsp;<STRONG> //url映射的名称</STRONG><BR>public class TopicController {</P>
<P>&nbsp;&nbsp;&nbsp; @RequestMapping(value = "/{id}",method=RequestMethod.GET)<BR>&nbsp;&nbsp;&nbsp; public String helloWorld(<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; @PathVariable Long id, <BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; HttpServletRequest request,<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; HttpServletResponse response) {<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; request.setAttribute("message", "You Input Topci Id is: &lt;b&gt;"+id+"&lt;/b&gt;"); <BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return&nbsp; "topic" ;&nbsp;&nbsp;<STRONG> // 对应 /WEB-INF/jsp 目录下的 topic.jsp 文件</STRONG><BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; @RequestMapping(value="/add")<BR>&nbsp;&nbsp;&nbsp; public String test(HttpServletRequest request,&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpServletResponse response){<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println("Hello www.JavaBloger.com ");<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; request.setAttribute("message", "Hello JavaBloger ! ,@RequestMapping(value='/add')"); <BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return "topic";&nbsp; <STRONG>// 对应 /WEB-INF/jsp 目录下的 topic.jsp 文件</STRONG><BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; }<BR>}</P>
<P><SPAN style="BACKGROUND-COLOR: rgb(128,0,0)"><SPAN style="COLOR: rgb(255,255,255)"><STRONG>清单2 :UserController</STRONG></SPAN></SPAN><BR>package com.javabloger.springrest.action;</P>
<P>import javax.servlet.http.HttpServletRequest;<BR>import javax.servlet.http.HttpServletResponse;<BR>import org.springframework.stereotype.Controller;<BR>import org.springframework.web.bind.annotation.RequestMapping;<BR>import com.javabloger.springrest.pojo.Users;</P>
<P>@Controller<BR>@RequestMapping("/user")</P>
<P>public class UserController {<BR>&nbsp;&nbsp;&nbsp;&nbsp; @RequestMapping(value="/login")<BR>&nbsp;&nbsp;&nbsp; public String test(HttpServletRequest request,&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpServletResponse response,Users&nbsp; userinfo){&nbsp;&nbsp; <STRONG>// 非常方便可以直接在方法里面放入对象</STRONG><BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if (userinfo.getUsername().equals("username") &amp;&amp; <BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;userinfo.getPassword().equals("password")<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;request.setAttribute("user", userinfo); <BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return "users/list";&nbsp;&nbsp; <STRONG>//判断,将跳转不同的页面</STRONG><BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;else{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return "users/loginerr";&nbsp; <STRONG>//判断,将跳转不同的页面</STRONG><BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<BR>&nbsp;&nbsp;&nbsp; }<BR>}</P>
<P><STRONG><SPAN style="COLOR: rgb(255,255,255)"><SPAN style="BACKGROUND-COLOR: rgb(128,0,0)">清单3:web.xml</SPAN></SPAN></STRONG><BR>&nbsp;&nbsp; &lt;servlet&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;springmvc&lt;/servlet-name&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;load-on-startup&gt;2&lt;/load-on-startup&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp; &lt;/servlet&gt;&nbsp;&nbsp; <BR>&nbsp;&lt;servlet-mapping&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;servlet-name&gt;springmvc&lt;/servlet-name&gt;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/&lt;/url-pattern&gt;&nbsp;&nbsp; <BR>&nbsp;&lt;/servlet-mapping&gt;&nbsp;&nbsp; <BR><STRONG><SPAN style="COLOR: rgb(255,255,255)"><SPAN style="BACKGROUND-COLOR: rgb(128,0,0)"><BR>清单4:springmvc-servlet.xml<BR></SPAN></SPAN></STRONG>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<BR>&lt;beans xmlns="http://www.springframework.org/schema/beans"<BR>&nbsp;&nbsp;&nbsp; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"<BR>&nbsp;&nbsp;&nbsp; xmlns:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p"<BR>&nbsp;&nbsp;&nbsp; xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"<BR>&nbsp;&nbsp;&nbsp; xsi:schemaLocation="http://www.springframework.org/schema/beans&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.springframework.org/schema/beans/spring-beans-3.0.xsd&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.springframework.org/schema/context&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.springframework.org/schema/context/spring-context-3.0.xsd&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.springframework.org/schema/tx&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.springframework.org/schema/tx/spring-tx-3.0.xsd&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.springframework.org/schema/jdbc&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd"&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;bean<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;bean<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;!– 自动搜索@Controller标注的类 –&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;context:component-scan base-package="com.javabloger.springrest.action" /&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;bean<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;bean<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;!– Default ViewResolver –&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;bean id="viewResolver"<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; class="org.springframework.web.servlet.view.InternalResourceViewResolver"&gt;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;property name="viewClass"<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; value="org.springframework.web.servlet.view.JstlView" /&gt;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;property name="prefix" value="/WEB-INF/jsp/" /&gt;<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;property name="suffix" value=".jsp"&gt;&lt;/property&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;bean id="messageSource"<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; class="org.springframework.context.support.ResourceBundleMessageSource"<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; p:basename="i18n/messages" /&gt;<BR>&lt;/beans&gt;</P>
<P>&nbsp;</P>
<P><SPAN style="FONT-SIZE: 16px"><SPAN style="BACKGROUND-COLOR: rgb(255,215,0)"><STRONG><A href="http://javabloger-mini-books.googlecode.com/files/SpringREST.rar" target=_blank>&lt;&lt;完整的Spring3 REST代码例子下载&gt;&gt;</A></STRONG></SPAN></SPAN></P>
<P><SPAN style="COLOR: rgb(0,0,0)"><SPAN style="COLOR: rgb(255,255,255)"><SPAN style="BACKGROUND-COLOR: rgb(0,100,0)"><STRONG><BR>一些废话:<BR></STRONG></SPAN></SPAN><STRONG>我个人非常非常喜欢没有xml配置框架,因为项目一大不仅需要对代码进行维护对xml文件还需要维护相当繁琐,在这个项目中除了采用Spring3的REST特性,还采用了Apache的dbutils对数据进行操作,传说中的SSH轻量级框架是针对EJB和J2EE而言的轻量级,对于上述这样的框架SSH还能称得上“轻量级”吗?也许SSH目前成为了标准,但不再是“轻量级J2EE框架”的代名词!</STRONG></SPAN></P>
<P><U><SPAN style="BACKGROUND-COLOR: rgb(0,128,0)"><STRONG style="DISPLAY: block; MARGIN: 12px 0pt 4px">另外,还有一份专门介绍 Spring3 MVC的资料《Spring 3 MVC CodeMash 2009》,请看幻灯片:</STRONG></SPAN></U></P>
<DIV id=__ss_915100 style="WIDTH: 425px"><EMBED src=http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=spring-mvc-code-mash09a-1231894880943441-1&amp;stripped_title=spring-mvc-code-mash09-presentation width=425 height=355 type=application/x-shockwave-flash allowfullscreen="true" allow.access="always"></EMBED>
<P>&nbsp;</P>
<P><STRONG>相关文章:<A class=row-title title="编辑 “spring3 oscache mrpersister dbcp dbutils 整合”" href="http://www.javabloger.com/wp-admin/post.php?action=edit&amp;post=927"><BR></A></STRONG><a href="http://www.javabloger.com/article/no-mapping-found-for-http-request-with-uri.html" target="_blank">Spring3无法显示css/js/jpg/gif </A><BR><a href="http://www.javabloger.com/article/spring3-dbutils-mrpersister-dbcp-oscache.html" target="_blank">spring3 oscache mrpersister dbcp dbutils 整合 </A><BR><a href="http://www.javabloger.com/article/spring-3-file-upload-example.html" target="_blank">Spring3文件上传,提速你的Web开发 <BR></A><a href="http://www.javabloger.com/article/setuseclasscache.html" target="_blank">Spring+Webwork整合 NoSuchMethodError 错误 </A><BR><a href="http://www.javabloger.com/article/spring3-rest-multiparthttpservletrequest.html" target="_blank">Spring3 REST 上传多个文件 </A><BR><a href="http://www.javabloger.com/article/spring3-rest-annotation.html" target="_blank">Spring3 REST中的@ </A><BR><a href="http://www.javabloger.com/article/spring3-rest-java-on-google.html" target="_blank">Spring3 REST实现html伪静态分页效果 </A></P>
<P>&nbsp;</P>
<P>–end–<BR>&nbsp;</P></DIV>
页: [1]
查看完整版本: Spring3 REST MVC框架,提速你的Web开发