搭建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,如需转载请自行联系原作者

相关文章
|
29天前
|
前端开发 JavaScript 开发工具
web应用开发工具
【9月更文挑战第1天】web应用开发工具
38 3
|
2月前
|
前端开发 程序员 API
从后端到前端的无缝切换:一名C#程序员如何借助Blazor技术实现全栈开发的梦想——深入解析Blazor框架下的Web应用构建之旅,附带实战代码示例与项目配置技巧揭露
【8月更文挑战第31天】本文通过详细步骤和代码示例,介绍了如何利用 Blazor 构建全栈 Web 应用。从创建新的 Blazor WebAssembly 项目开始,逐步演示了前后端分离的服务架构设计,包括 REST API 的设置及 Blazor 组件的数据展示。通过整合前后端逻辑,C# 开发者能够在统一环境中实现高效且一致的全栈开发。Blazor 的引入不仅简化了 Web 应用开发流程,还为习惯于后端开发的程序员提供了进入前端世界的桥梁。
48 0
|
5月前
|
前端开发 JavaScript 数据管理
描述一个使用Python开发Web应用程序的实际项目经验,包括所使用的框架和技术栈。
使用Flask开发Web应用,结合SQLite、Flask-SQLAlchemy进行数据管理,HTML/CSS/JS(Bootstrap和jQuery)构建前端。通过Flask路由处理用户请求,模块化代码提高可维护性。unittest进行测试,开发阶段用内置服务器,生产环境可选WSGI服务器或容器化部署。实现了用户注册登录和数据管理功能,展示Python Web开发的灵活性和效率。
47 4
|
5月前
|
前端开发 JavaScript Java
基于JavaWeb实现智慧菜市场系统的设计与实现程序
基于JavaWeb实现智慧菜市场系统的设计与实现程序
|
12月前
|
开发工具 虚拟化 Windows
1.1 Windows驱动开发:配置驱动开发环境
在进行驱动开发之前,您需要先安装适当的开发环境和工具。首先,您需要安装`Windows`驱动开发工具包(WDK),这是一组驱动开发所需的工具、库、示例和文档。然后,您需要安装`Visual Studio`开发环境,以便编写和调试驱动程序。在安装WDK和`Visual Studio`之后,您还需要配置适当的项目设置,以便能够正确编译和构建驱动程序。首先我们需要安装`Visual Studio 2013`这款功能强大的程序开发工具,在课件内请双击`ISO`文件并运行内部的`vs_ultimate.exe`安装包,`Visual Studio`的安装非常的简单,您只需要按照提示全部选择默认参数即可,
188 1
1.1 Windows驱动开发:配置驱动开发环境
|
开发框架 Python Windows
嵌入式工程师入门前后端系列2:搭建web.py环境
嵌入式工程师入门前后端系列2:搭建web.py环境
|
存储 数据采集 SQL
环境篇之项目架构|学习笔记
快速学习环境篇之项目架构
环境篇之项目架构|学习笔记
|
JSON Java Maven
「造个轮子」——cicada(轻量级 WEB 框架)(上)
俗话说 「不要重复造轮子」,关于是否有必要不再本次讨论范围。 创建这个项目的主要目的还是提升自己,看看和知名类开源项目的差距以及学习优秀的开源方式。 好了,现在着重来谈谈 cicada 这个项目的核心功能。 我把他定义为一个快速、轻量级 WEB 框架;没有过多的依赖,核心 jar 包仅 30KB。 也仅需要一行代码即可启动一个 HTTP 服务。
|
JSON Java 应用服务中间件
「造个轮子」——cicada(轻量级 WEB 框架)(下)
俗话说 「不要重复造轮子」,关于是否有必要不再本次讨论范围。 创建这个项目的主要目的还是提升自己,看看和知名类开源项目的差距以及学习优秀的开源方式。 好了,现在着重来谈谈 cicada 这个项目的核心功能。 我把他定义为一个快速、轻量级 WEB 框架;没有过多的依赖,核心 jar 包仅 30KB。 也仅需要一行代码即可启动一个 HTTP 服务。
|
前端开发 Java 关系型数据库
JavaWeb实现smbms项目核心功能
SMBMS 数据库: 项目如何搭建? 考虑使用不使用Maven?依赖,Jar 1、项目搭建准备工作 搭建一个maven web项目 配置Tomcat 测试项目是否能够跑起来 导入项目中会遇到的jar包; jsp,Servlet,mysql驱动,jstl,standard... 创建项目包结构 编写实
下一篇
无影云桌面