初见SpringMVC

1.什么是SpringMvc

   Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等。

  SpringMVC也叫Spring Web  mvc,属于表现层的框架。Spring MVC是Spring框架的一部分,是在Spring3.0后发布的

2.Spring MVC请求流程

1)

2)

 

 3)

文字描述:

request-------->DispatcherServler(中央调度器/前端控制器)----->

HandlerMapping(处理器映射器)------>返回一个执行链----->将执行链转交给HandlerAdaptor(处理器适配器)----->调度Handler(处理器)----->

ModelAndView----->先将结果交给HandlerAdaptor,然后再由HandlerAdaptor转交给 DispatcherServler--------->DispatcherServler调度ViewResolver(视图解析器)---->交给DispatcherServler------->
寻找View---->View做出响应(response)

 3.SpringMVC的第一个入门案例

案例:用户提交一个请求,服务器端处理器在接收到这个请求后,给出一条欢迎信息,在页面中显示。

    1.jar包
    2.web.xml 中央调度器
    3.applicationContext.xml spring配置
    4.控制器类定义
    5.真实jsp页面

   1)导入jar包

    在原有Springjar包基础上添加2个jar包

     

 2)在web.xml中配置前端控制器

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <display-name></display-name>

    <servlet>
        <!-- 注册中央调度器 -->
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 指定访问 applicationContext.xml的地方 -->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml</param-value>
        </init-param>
        <!-- 在Tomcat启动就初始化 -->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

   <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

3)定制处理器

package cn.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class FirstController implements Controller {

    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        ModelAndView mv=new ModelAndView();
        
        mv.addObject("msg","happy");
        
        mv.setViewName("WEB-INF/index.jsp");
        return mv;
    }

}

4)在applicationContext.xml中配置视图解析器

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        ">
           
        
       <!-- 请求地址 --> 
        <bean id="/hello.do" class="cn.controller.FirstController"></bean>
        
</beans>

 5)在WEB-INF/index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>SpringMVC入门</title>
  </head>
  
  <body>
     This is SpringMVC, Welcome<br/>
     <!-- 页面上如何获取 -->
     ${msg }
          
  </body>
</html>

 6)在浏览器输入http://localhost:8080/SpringMVC_base0100/hello.do

 4.案例提升(视图解析器)

 1)在application.xml中添加视图解析器

 

2)在处理器中

5.关于urlpattern说法

最好配成*.do
不能配成/*      无法访问*.jsp等动态资源
最好也不要配成/   无法访问静态资源
不得不配成/

1)不能配置为/*

DispatcherServlet会将向动态页面请求,即向jsp页面的跳转请求也当做是一个普通的Controller请求。中央调度器会调用处理器映射器为其查找相应的处理器。当然是找不到的。jsp页面会报404错误
结论:/*会拦截动态资源

2)不得不配成/

  方案一:使用Tomcat默认的Servlet解决

 

 方案二:使用MVC的default-servlet-handler

会将对静态资源的访问请求通过HandlerMapping映射到默认Servlet请求处理器DefaultServletRequestHandler对象。而该处理器调用了Tomcat的DefaultServlet来处理静态资源的访问请求。当然需要引入mvc约束

 方案三:使用MVC的resource解决

在Spring3.0.4之后,Spring定义了专门用于处理静态资源请求的处理器ResourceHttpRequestHandler。并且添加了<mvc:resources/>标签,专门用于解决静态资源无法访问问题。

Location:静态资源所在目录
mapping: 对资源的请求
注意:需要Tomcat7支持

5.配置式开发--BeanNameUrlHandlerMapping 

<!-- 配置处理器映射器 -->
   <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>

 配置式开发--SimpleUrlHandlerMapping 

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  <property name="mappings">
  <props>
  <prop key="/hello.do">firstController</prop>
   <prop key="/say.do">firstController</prop>
  </props>
  </property>
   
</bean>

  

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
 <property name="urlMap">
  
 <map>
 <entry key="/hello.do">
 <value>firstController</value>
 </entry>
  
  <entry key="/say.do">
 <value>firstController</value>
 </entry>
  
 </map>
  
 </property>
 </bean>

 

原文地址:https://www.cnblogs.com/hr1997/p/6197639.html