搭建SpringMVC开发环境

简介:

   通常在开发JavaEE项目中Web应用比较常用的框架组合Struts+Spring+Hibernate(SSH)和Struts+Spring+Mybatis(ibatis)(SSM)。

         当使用Spring的MVC时候,整个Web应用的层次更加简单和情绪。

  1. 引入SpringMVC所依赖的两个jar,Spring-web-*.jar Spring-webmv-*.jar(*表示对应的版本)

  2. 在Web应用(web.xml)中配置Spring WebAppliactionContext的监听


1
2
3
4
5
6
7
< context-param >
         < param-name >contextConfigLocation</ param-name >
         < param-value >classpath:spring-context-*.xml</ param-value >
     </ context-param >
     < listener >
         < listener-class >org.springframework.web.context.ContextLoaderListener</ listener-class >
     </ listener >


Spring的配置文件进行了拆分,配置文件名格式为:spring-context-*.xml, 位于classes(src)目录下。


在Web应用(web.xml)中配置Spring MVC的Servlet(SpringMVC的核心类,前端控制器,处理请求)


1
< span  style = "font-size:14px;font-family:arial, helvetica, sans-serif;" >< br >< servlet >< br >        < servlet-name >spring</ servlet-name >< br >        < servlet-class >org.springframework.web.servlet.DispatcherServlet</ servlet-class >< br >        < init-param >< br >            < param-name >contextConfigLocation</ param-name >< br >            < param-value >classpath:spring-web-servlet.xml</ param-value >< br >        </ init-param >< br >        < load-on-startup >2</ load-on-startup >< br >    </ servlet >< br >    < br >    < servlet-mapping >< br >        < servlet-name >spring</ servlet-name >< br >        < url-pattern >/</ url-pattern >< br >    </ servlet-mapping >< br ></ span >


      SpringMVC的默认配置文件名为:<servletname>-servlet.xml 并且位于WEB-INF下,上面通过servlet的初始化参数contextConfigLocation对配置文件重新设置和命名。

      关于servlet的url-pattern的设置非常重要的,并且很容易出错。上述配置表示所有的请求都要经servlet name是spring的这个servlet来处理,并且名为spring这个servlet的Web应用的默认servlet。

      关于servlet的url-pattern的设置可以仔细阅读这篇文章:http://blog.csdn.net/caoxu1987728/article/details/2757877

   

  4.处理特殊请求

        根据上面的配置所有请求就要经过spring这个servlet来处理,这样对静态文件的请求由于没有对应的请求处理程序,将无法访问到静态资源,这个问题的解决方法是在spring-web-servlet.xml(如果不设置默认名称为:spring-servlet.xml)中添加静态资源处理配置。


1
< span  style = "font-size:14px;font-family:arial, helvetica, sans-serif;" >< br >< mvc:resources  location = "/resource/css/"  mapping = "/resource/css/**" <br>        cache-period="3600000" />< br >    < mvc:resources  location = "/resource/images/"  mapping = "/resource/images/**" <br>        cache-period="3600000" />< br >    < mvc:resources  location = "/resource/js/"  mapping = "/resource/js/**" <br>        cache-period="3600000" />< br ></ span >


  5.servlet的url-pattern

     a.如果url-pattern设置为:*.do,则请求通过扩展名类分发,就不存在4中的静态资源无法访问的问题

     b.如果url-pattern设置为:/*, 则请求经过再次转发,重定向将再次被名为spring的servlet拦截(导致.*.jsp无效得到解析),默认的servlet名则是取自对应的web应用服务器的默认servlet命名。

     下面配置是来自tomcat下conf/web.xml文件:  


1
< span  style = "font-size:14px;font-family:arial, helvetica, sans-serif;" >< br <!-- 注: 由此看出tomcat的默认servlet name是default--> < br >< br >< servlet-mapping >< br >        < servlet-name >default</ servlet-name >< br >        < url-pattern >/</ url-pattern >< br >    </ servlet-mapping >< br >   < br ></ span >
1
< span  style = "font-size:14px;font-family:arial, helvetica, sans-serif;" >< br >< servlet-mapping >< br >        < servlet-name >jsp</ servlet-name >< br >        < url-pattern >*.jsp</ url-pattern >< br >        < url-pattern >*.jspx</ url-pattern >< br >    </ servlet-mapping >< br ></ span >


    c.如果url-pattern设置为:/, 则覆盖了DefaultServlet,但是隐式的JspServlet仍然可以映射。    

    上面 a 是后缀映射,b是路径映射, c是默认映射,其它(/a/c/d, /a/b/c.do)这些都是精确的映射。


6.基于注解写一个SpringMVC的Controller用来处理请求

 

1
<span style= "font-size:14px;font-family:arial, helvetica, sans-serif;" ><br> package  com.name.web;<br><br> import  java.util.Date;<br> import  java.util.Map;<br><br> import  javax.servlet.http.HttpServletRequest;<br><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;<br><br> @Controller <br> @RequestMapping (value = {  "/hello"  })<br> public  class  HelloController {<br><br>     @RequestMapping (value =  "/index" , method = RequestMethod.GET)<br>     public  String index(HttpServletRequest request, Map<String, Object> model) {<br>         return  "index" ;<br>    }<br>}<br></span>

 

注:

        编写这个示例用到Spring的注解,SpringMVC的jsp视图处理。因此需要在spring-web-servlet.xml文件中添加如下配置:

 

1
< span  style = "font-family:arial, helvetica, sans-serif;" > < br > < context:component-scan  base-package = "com.name.web" ></ context:component-scan >< br ></ span >
1
< span  style = "font-size:14px;font-family:arial, helvetica, sans-serif;" >< br >< bean <br>        class="org.springframework.web.servlet.view.InternalResourceViewResolver">< br >        < property  name = "viewClass" <br>            value="org.springframework.web.servlet.view.JstlView">< br >        </ property >< br >        < property  name = "prefix"  value = "/WEB-INF/view/" ></ property >< br >        < property  name = "suffix"  value = ".jsp"  />< br >    </ bean >< br ></ span >


   在/WEB-INF/view/下创建index.jsp文件,然后通过GET方式访问:http://localhost/webname/hello/index 将返回index.jsp中的内容。


7.Web应用中spring MVC和Spring WeabAppliactionContext(IOC)的关系

   从上面的web.xml配置文件中可以看到SpringMVC的集成我们使用了配置org.springframework.web.servlet.DispatcherServlet,而servlet确实是可以在一个Web应用中配置多个,所以我们可以配置多个这样的servlet。

  如下图是SpringWeb应用中Spring WebApplicationContext和Spring MVC(DispatcherServlet)的WebApplicationContext的关系

 wKioL1O4_nHB8HQnAAGtyfWaZLw932.jpg



本文转自 secondriver 51CTO博客,原文链接:http://blog.51cto.com/aiilive/1435033,如需转载请自行联系原作者

相关文章
|
3月前
|
jenkins 持续交付
jenkins学习笔记之六:共享库方式集成构建工具
jenkins学习笔记之六:共享库方式集成构建工具
|
6月前
|
前端开发 JavaScript Java
基于JavaWeb实现智慧菜市场系统的设计与实现程序
基于JavaWeb实现智慧菜市场系统的设计与实现程序
|
开发框架 Java 开发者
利用Springboot来驱动开发桌面程序
利用Springboot来驱动开发桌面程序
245 0
|
XML 自然语言处理 Java
【Java框架型项目从入门到装逼】第三节 - 如何用Tomcat发布web项目?
【Java框架型项目从入门到装逼】第三节 - 如何用Tomcat发布web项目?
120 0
|
iOS开发
iOS项目环境基本搭建
iOS项目环境基本搭建
126 0
iOS项目环境基本搭建
|
开发框架 IDE Java
java开发环境的配置
java开发环境的配置
199 0
|
关系型数据库 MySQL Apache