SpringMVC配置

SpringMVC专业概念:
DispatcherServlet :前端控制器
HandleMapping :处理器映射器
HandlerAdapter :处理器适配器
Handler :处理器
viewResolver :视图解析器
view :页面文件
SpringMVC流程图
过程描述:
首先用户发起 request 请求,请求 DispatcherServlet 前端控制器.
然后DispatcherServlet 前端控制器请求 HandlerMapping 处理器映射器查找 Handler 返回给 DisptcherServlet.
DisptcherServlet 找到 Handler 之后要挑选合适的适配器 HanlderAdapter 来执行 Handler.
执行完 Handler 之后.返回 ModelAndView 对象.
DisptcherServlet 调用 viewResolver 视图解析器来解析返回的 view 对象
将 modle 渲染到 view.然后响应用户

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">
 <!-- 注册springMVC核心控制器 -->
    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--通知DispatcherServlet去指定的目录下加载springmvc.xml配置文件  -->
        <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springmvc.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <!-- 拦截后缀 -->
        <url-pattern>*.do,*.action</url-pattern>
    </servlet-mapping>
<!-- 注册spring提供的针对POST请求的中文乱码问题 -->
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>       


</web-app>

方式1
实现Controller接口的配置SpringMVC方式(适配器使用SimpleControllerHandlerAdapter)
SpringMVC文件:

<?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:mvc="http://www.springframework.org/schema/mvc"
      xmlns:context="http://www.springframework.org/schema/context"

      xsi:schemaLocation="

      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd


      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-3.0.xsd

      ">

         <bean name="/login.action" class="com.fuwenjun.controller.LoginController"></bean>
        <!-- 配置处理映射器,根据url找对应的controller -->
        <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
        <!-- 配置处理适配器 hander要实现controller接口 -->
        <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
        <!-- 视图解析器 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"></bean>
        </beans>

控制器:

package com.fuwenjun.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 LoginController implements Controller {
    //moderAndview将信息存入request域中
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {

        ModelAndView model=new ModelAndView();
        model.addObject("mes", "跳转成功");
        //跳转页面:转发方式
        model.setViewName("/success.jsp");
        return model;
    }

}

方式二
继承AbstractCommandController来实现控制器

import java.text.SimpleDateFormat;
import java.util.Date;

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

import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.validation.BindException;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractCommandController;

/**
 * 单例
 * 处理类
 * @author AdminTC
 */
@SuppressWarnings("deprecation")
public class EmpAction extends AbstractCommandController{
    public EmpAction(){
        //将表单参数封装到Emp对象中去
        this.setCommandClass(Emp.class);
    }
    /**
     * 自定义类型转换器,将String->Date类型(格式yyyy-MM-dd)
     */
    @Override
    protected void initBinder(HttpServletRequest request,ServletRequestDataBinder binder) throws Exception {
        //向springmvc内部注入一个自定义的类型转换器
        //参数一:将String转成什么类型的字节码
        //参数二:自定义转换规则
        //true表示该日期字段可以为空
        binder.registerCustomEditor(
                Date.class,
                new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"),true));
    }
    /**
     * obj表示封装后的实体
     * error表示封装时产生的异常
     */
    @Override
    protected ModelAndView handle(
            HttpServletRequest request,
            HttpServletResponse response, 
            Object obj, 
            BindException error)throws Exception {

        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("message","增加员工成功");

        Emp emp = (Emp) obj;
        System.out.println(emp.getUsername()+":"+emp.getGender()+":"+emp.getHiredate().toLocaleString());

        //将Emp封装到ModeAndView对象中
        modelAndView.addObject("emp",emp);

        modelAndView.setViewName("/jsp/success.jsp");
        return modelAndView;
    }
}

配置文件不需改动:
下面为一个特殊的转发控制器

    <!-- 专用于jsp到jsp/html的转发控制器 -->
    <bean name="/index.action" class="org.springframework.web.servlet.mvc.ParameterizableViewController">
        <!-- 转发到真实视图名 -->
        <property name="viewName" value="/WEB-INF/05_index.jsp"/>
    </bean>

方式三
注解方式处理映射器和适配器

<?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:mvc="http://www.springframework.org/schema/mvc"
      xmlns:context="http://www.springframework.org/schema/context"

      xsi:schemaLocation="

      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd


      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-3.0.xsd

      ">

    <!-- Action,让springioc容器去扫描带@Controller的类 -->
    <context:component-scan base-package="com.fuwenjun.controller"/>

    <!--注册适配器  -->
    <bean
        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters"> <!--  将数据转换为json数据 -->
            <list>
                <bean
                    class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
            </list>
        </property>
    </bean>

    <!--视图解析器(框架)  -->
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/" /> <!-- 前缀 -->
        <property name="suffix" value=".jsp" /> <!-- 后缀 -->
    </bean>

</beans>      

controller中返回逻辑地址:使用视图解析器

package com.fuwenjun.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class Login {
    @RequestMapping(value="/login.action")
    public String login(Model mod,String username,String password){
        System.out.println(username+ " "+password);
        mod.addAttribute("mes","成功");
        return "success";

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值