spring MVC关于org.springframework.web.servlet.handler.SimpleUrlHandlerMapping的使用

1,spring MVC的优点

1.spring mvc使用简单,学习成本低。
2.spring mvc灵活方便。
3.spring mvc能够写出很好的程序。

2,spring 的核心类与接口

DispatcherServlet   -- 前置控制器

HandlerMapping接口 -- 处理请求的映射

HandlerMapping接口的实现类:

SimpleUrlHandlerMapping  通过配置文件,把一个URL映射到Controller

DefaultAnnotationHandlerMapping  通过注解,把一个URL映射到Controller类上



HandlerAdapter接口--处理请求映射

AnnotationMethodHandlerAdapter类,通过注解,把一个URL映射到Controller类的方法上

Controller接口 -- 控制器
实现了该接口的类是:AbstractController这个类

HandlerInterceptor 接口--拦截器

无图,我们自己实现这个接口,来完成拦截的器的工作。





ViewResolver接口的实现类

UrlBasedViewResolver类 通过配置文件,把一个视图名交给到一个View来处理

InternalResourceViewResolver类,比上面的类,加入了JSTL的支持



View接口

JstlView类




LocalResolver接口


HandlerExceptionResolver接口 --异常处理

SimpleMappingExceptionResolver实现类





ModelAndView类






3 核心流程图



4 DispatcherServlet说明

使用spring MVC 配置dispatcherServlet是第一步

可以配置多个dispatcherServlet前置控制器,在web.xml中配置, 拦截匹配的请求,Servlet拦截匹配规则要自已定义。
把拦截下来的请求,依据某某规则分发到目标Controller(我们写的Action)来处理(这些都可以通过配置文件配置Controller(Action))。以flex为例:


<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
	 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_4.xsd">
  <context-param>
    <param-name>contextConfigLocation</param-name>
		<param-value>classpath*:spring/*.xml</param-value>
  </context-param>
  
 <listener>
         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>

        <!-- <listener>   -->
                <!--   <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>   -->
                <!-- </listener> -->

        <servlet>
                <servlet-name>remoting</servlet-name>
                <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
                <init-param>
                        <param-name>contextConfigLocation</param-name>
                        <param-value>/WEB-INF/remoting-config.xml</param-value>
                </init-param>
                <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
                <servlet-name>remoting</servlet-name>
                <url-pattern>/messagebroker/*</url-pattern>
        </servlet-mapping>

        <servlet>
                <servlet-name>upload</servlet-name>
                <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
                <init-param>
                        <param-name>contextConfigLocation</param-name>
                        <param-value>/WEB-INF/upload-config.xml</param-value>
                </init-param>
                <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
                <servlet-name>upload</servlet-name>
                <url-pattern>/upload/*</url-pattern>
        </servlet-mapping>

 <filter>
                <filter-name>encodingFilter</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>encodingFilter</filter-name>
                <url-pattern>/*</url-pattern>
        </filter-mapping>


下边是upload-config.xml的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:flex="http://www.springframework.org/schema/flex"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        http://www.springframework.org/schema/flex 
        http://www.springframework.org/schema/flex/spring-flex-1.0.xsd">

        <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
                <property name="mappings">
                        <props>
                        
                                <prop key="/export">export</prop>
                                <prop key="/exportView">exportView</prop>
                      

                        </props>
                </property>
        </bean>

        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
                <property name="maxUploadSize">
                        <value>104857600</value>
                </property>
                <property name="maxInMemorySize">
                        <value>104857600</value>
                </property>
        </bean>

        <bean name="export" class="com.dhcc.emergency.common.web.ExportController" autowire="byName"></bean>
        <bean name="exportView" class="com.dhcc.emergency.common.web.ExportViewController" autowire="byName"></bean>
    


import org.springframework.web.servlet.mvc.AbstractController;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.util.Random;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.io.FileOutputStream;


/**
 * <p>类注释</p>
 * <p>Copyright (c) 2004 Drian. All rights reserved</p>
 * <p>@(#)  创建日期 二  7月 06 15:56:41</p>
 * <p>@author </p>
 * <p>@version 0.1 </p>
 */

public class FileUploadReturnFileNameController extends AbstractController{

        private Log log = LogFactory.getLog(this.getClass());

        protected ModelAndView handleRequestInternal(HttpServletRequest request,HttpServletResponse response) throws Exception{
               MultipartHttpServletRequest mulRequest = (MultipartHttpServletRequest)request;
               MultipartFile file = mulRequest.getFile("Filedata");

               //获取存放路径
               String dir = null;
               String realPath = request.getSession().getServletContext().getRealPath("/");
               if(realPath.charAt(realPath.length()-1) == '/')
            	   dir = realPath + GlobalKeys.UPLOAD_FOLD;
               else
            	   dir = realPath + File.separatorChar + GlobalKeys.UPLOAD_FOLD;
               
               File d = new File(dir);
               //如果文件夹不存在则创建
               if(!d.exists()){
                       d.mkdir();
               }

               //获取系统文件名,系统文件名由当前时间的值加上3位随机生成吗构成
               String systemFileName = new Long(System.currentTimeMillis()).toString()+new Random().nextInt()%1000;
               String[] s = file.getOriginalFilename().split("\\.");
               String suffix = "";
               if(s.length>1)
                       suffix = s[s.length-1];
               FileOutputStream io = null;
               try{
                        io = new FileOutputStream(dir+File.separatorChar+systemFileName+"."+suffix);
                        io.write(file.getBytes());
                        response.setContentType("text/plain;charset=UTF-8");
                        response.getWriter().print(systemFileName+"."+suffix+","+file.getOriginalFilename());
                        if(log.isDebugEnabled()){
                                log.debug("文件保存为"+systemFileName+"."+suffix+"上传文件名为:"+file.getOriginalFilename());
                        }
                        io.close();
               }catch(Exception e){
                        e.printStackTrace();
                        response.getWriter().print("error");
               }
               return null;
        }


}


有一部分出处是: http://elf8848.iteye.com/blog/875830/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值