配置SpringMVC及简单应用

SpringMVC实现原理(转载)

在整个spring MVC框架中,DispatcherServlet处于核心位置,它负责协调和组织不同组件完成请求处理并返回响应的工作。具体流程为:

1)客户端发送http请求,web应用服务器接收到这个请求,如果匹配DispatcherServlet的映射路径(在web.xml中配置),web容器将请求转交给DispatcherServlet处理;

2)DispatcherServlet根据请求的信息及HandlerMapping的配置找到处理该请求的Controller;

3)Controller完成业务逻辑处理后,返回一个ModelAndView给DispatcherServlet;

4)DispatcherServlet借由ViewResolver完成ModelAndView中逻辑视图名到真实视图对象View的解析工作;

5)DispatcherServlet根据ModelAndView中的数据模型对View对象进行视图渲染,最终客户端得到的响应消息可能是一个普通的html页面,也可能是一个xml或json串,甚至是一张图片或一个PDF文档等不同的媒体形式。

下载spring框架用包

访问spring.io,在PROJECTS目录中找到SPRING FARAMWORK,找到下面文字点击链接

All avaible features and modules are described in the Modules section of the reference documentation. 
Their maven/gradle coordinates are also described there.

在里面Distribution Zip Files介绍中可下载所需包。

http://repo.spring.io/release/org/springframework/spring 

引包

将下载后的文件中的libs中的20个包导入项目中,并需要额外引入commons-logging.jar,可在Maven Repository中搜索下载。

配置MVC核心配置文件

首先在web.xml中web-app标签下添加如下代码:

<!-- 配置DispatcherServlet -->                                                        
<servlet>                                                                           
    <servlet-name>mvc</servlet-name>                                                
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>                                            
</servlet>                                                                          
<servlet-mapping>                                                                   
    <servlet-name>mvc</servlet-name>                                                
    <!-- 所有资源都要经Dispatcher处理 -->                                                    
    <url-pattern>/</url-pattern>                                                    
</servlet-mapping>                                                                  

然后在WEB-INF目录下建立核心配置文件,方法如下:

选中WEB-INF目录,右键New,Other,找到Spring,建立一个Spring BeanConfiguration File文件,注意给文件取名严格遵守[servlet-name]-servlet.xml的方式,此处示例文件名应取为mvc-servlet.xml;取名结束后点击next,选择相应的XSD,方便以后代码提示,这里只选择beans,在弹出的版本中选4.2版本即可。

简单举例(SpringMVC XML实现方式举例)

新建类,实现Controller接口。

public class IndexController implements Controller {

    @Override                                                                                                     
    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        //该方法返回一个存储返回路径的对象,被DispatcherServlet接到,
        //调用视图解析器解析出返回路径并跳转                                                                                                          
        ModelAndView mav = new ModelAndView();                                                                    
        mav.setViewName("index");                                                          
        return mav;                                                                                               
    }                                                                                                             
                                                                                                                  
}

IndexController类就相当于一个普通的servlet,handRequest相当于doGet/doPost方法;如果要执行servlet,请求路径是必要的,那么请求路径在哪里?

在mvc-servlet.xml文件中,添加标签

<bean class="self.exercise.controller.IndexController" id="/index"></bean>

这里的id中的路径即为请求路径,DispatcherServlet根据该路径匹配到class中的类,执行其中的方法。

在mvc-servlet.xml文件中配置视图解析器:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="viewResolver">
    <property name="prefix" value="/WEB-INF/"/>                                                   
    <property name="suffix" value=".jsp"/>                                                        
</bean>  

视图解析器会将controller返回的ModelAndView对象传递的字符串解析出返回路径/WEB-INF/index.jsp,最终以请求转发的方式跳转到该页面。

如果想重定向而非请求转发跳转该如何实现呢?

mav.setViewName(InternalResourceViewResolver.REDIRECT_URL_PREFIX + "main.jsp");

此时xml中的视图解析器将不起作用,直接重定向到/main.jsp。

如果上述代码中将字符串中的.jsp去掉会怎样呢?

mav.setViewName(InternalResourceViewResolver.REDIRECT_URL_PREFIX + "main");

会重定向到请求路径为/main的另一个controller中去,同理,若想请求转发到另一个controller,则:

mav.setViewName(InternalResourceViewResolver.FORWARD_URL_PREFIX+ "main");

以上就是MVC的XML实现方式,但一个controller只对应一个访问路径,业务复杂时实现较为麻烦,而注解方式是我们推荐的实现方式。

原文地址:https://www.cnblogs.com/qingyaxuan/p/6476624.html