spring-mvc4配置和使用

来源:互联网 发布:淘宝子账号有什么用 编辑:程序博客网 时间:2024/06/03 21:07

spring-mvc以前用过,好几年不用了,重温一下。


项目结构

项目结构

maven配置文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>com.sun.ssm</groupId>  <artifactId>ssm</artifactId>  <packaging>war</packaging>  <version>1.0-SNAPSHOT</version>  <name>ssm Maven Webapp</name>  <url>http://maven.apache.org</url>  <properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>    <spring.version>4.3.9.RELEASE</spring.version>    <logback.version>1.0.13</logback.version>    <slf4j.version>1.7.5</slf4j.version>  </properties>  <dependencies>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>4.12</version>      <scope>test</scope>    </dependency>    <!-- spring begin -->    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-webmvc</artifactId>      <version>${spring.version}</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-jdbc</artifactId>      <version>${spring.version}</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-context</artifactId>      <version>${spring.version}</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-aop</artifactId>      <version>${spring.version}</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-core</artifactId>      <version>${spring.version}</version>    </dependency>    <dependency>      <groupId>org.springframework</groupId>      <artifactId>spring-test</artifactId>      <version>${spring.version}</version>    </dependency>    <!-- common -->    <dependency>      <groupId>commons-fileupload</groupId>      <artifactId>commons-fileupload</artifactId>      <version>1.3.3</version>    </dependency>    <!-- javaee -->    <dependency>      <groupId>javax</groupId>      <artifactId>javaee-api</artifactId>      <version>7.0</version>      <scope>provided</scope>    </dependency>    <dependency>      <groupId>javax.servlet</groupId>      <artifactId>jstl</artifactId>      <version>1.2</version>    </dependency>    <dependency>      <groupId>javax.servlet.jsp.jstl</groupId>      <artifactId>jstl</artifactId>      <version>1.2</version>    </dependency>    <!-- Logging -->    <dependency>      <groupId>org.slf4j</groupId>      <artifactId>slf4j-api</artifactId>      <version>${slf4j.version}</version>    </dependency>    <dependency>      <groupId>ch.qos.logback</groupId>      <artifactId>logback-classic</artifactId>      <version>${logback.version}</version>    </dependency>    <dependency>      <groupId>ch.qos.logback</groupId>      <artifactId>logback-core</artifactId>      <version>${logback.version}</version>    </dependency>    <dependency>      <groupId>ch.qos.logback</groupId>      <artifactId>logback-access</artifactId>      <version>${logback.version}</version>    </dependency>    <!-- mysql -->    <dependency>      <groupId>mysql</groupId>      <artifactId>mysql-connector-java</artifactId>      <version>5.1.31</version>    </dependency>  </dependencies>  <build>    <finalName>SpringMVC-Maven</finalName>  </build></project>

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">    <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>classpath*:spring/applicationContext.xml</param-value>    </context-param>    <listener>        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    </listener>    <listener>        <listener-class>            org.springframework.web.context.request.RequestContextListener        </listener-class>    </listener>    <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>    <servlet-mapping>        <servlet-name>default</servlet-name>        <url-pattern>/static/*</url-pattern>    </servlet-mapping>    <servlet>        <servlet-name>springDispatcherServlet</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <init-param>            <param-name>contextConfigLocation</param-name>            <param-value>classpath*:spring-mvc.xml</param-value>        </init-param>        <load-on-startup>1</load-on-startup>    </servlet>    <servlet-mapping>        <servlet-name>springDispatcherServlet</servlet-name>        <url-pattern>/</url-pattern>    </servlet-mapping></web-app>

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"       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-4.2.xsd">    <context:component-scan base-package="com.sun.ssm">        <context:exclude-filter  type="annotation"                                 expression="org.springframework.stereotype.Controller"  />        <context:exclude-filter  type="annotation"                                 expression="org.springframework.web.bind.annotation.ControllerAdvice"/>    </context:component-scan></beans>

spring-mvc.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:mvc="http://www.springframework.org/schema/mvc"       xmlns:context="http://www.springframework.org/schema/context"       xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd       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-4.2.xsd">    <context:component-scan base-package="com.sun.**.controller" use-default-filters="false">        <context:include-filter type="annotation"                                expression="org.springframework.stereotype.Controller"/>        <context:include-filter type="annotation"                                expression="org.springframework.web.bind.annotation.ControllerAdvice"/>    </context:component-scan>    <!-- ViewResolver -->    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>        <property name="prefix" value="/WEB-INF/views/"></property>        <property name="suffix" value=".jsp"></property>    </bean>    <mvc:default-servlet-handler/>    <mvc:annotation-driven ></mvc:annotation-driven>    <!-- 配置国际化资源文件,配置多语言拦截器 -->    <bean id="messageSource"          class="org.springframework.context.support.ResourceBundleMessageSource">        <property name="basename" value="i18n"></property>        <property name="useCodeAsDefaultMessage" value="true" />    </bean>    <mvc:interceptors>        <!-- 所有页面请求拦截器 -->        <bean class="com.sun.ssm.interceptor.ControllerHandleTimeInterceptor"></bean>        <!-- 只登陆时有效 -->        <mvc:interceptor>            <mvc:mapping path="/login"/>            <bean class="com.sun.ssm.interceptor.AccessCountInterceptor"></bean>        </mvc:interceptor>    </mvc:interceptors>    <mvc:view-controller path="/" view-name="index"/>    <mvc:resources mapping="/static/**" location="/static/" />    <!-- 配置 MultipartResolver -->    <bean id="multipartResolver"          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">        <property name="defaultEncoding" value="UTF-8"></property>        <property name="maxUploadSize" value="1024000"></property>    </bean>    <!-- 配置使用 SimpleMappingExceptionResolver 来映射异常 -->    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">        <property name="defaultErrorView" value="error/error"></property>        <property name="exceptionAttribute" value="ex"></property>        <property name="exceptionMappings">            <props>            </props>        </property>    </bean></beans>

Controller实现类

package com.sun.ssm.controller;import com.sun.ssm.utils.LocaleUtil;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.MessageSource;import org.springframework.context.i18n.LocaleContextHolder;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.servlet.LocaleContextResolver;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.support.RequestContext;import java.util.Locale;import java.util.Map;/** * Created by xx on 2017/7/18. */@Controllerpublic class CommonController {    @Autowired    private MessageSource messageSource;    @RequestMapping(value = "/index", method = RequestMethod.GET)    public ModelAndView index() {        ModelAndView modelAndView = new ModelAndView("index");        // 国际化支持        Locale locale = LocaleContextHolder.getLocale();        String message = messageSource.getMessage("welcome.info",new Object[]{"欢迎光临","sss"}, locale);        modelAndView.addObject("info",message );        return modelAndView;    }    @RequestMapping(value = "/login", method = RequestMethod.GET)    public String login(Map<String,Object> map) {        map.put("info", "请登陆");        return "login";    }    @RequestMapping(value = "/exception", method = RequestMethod.GET)    public String exception() {        // 用于测试异常        String a = null;        a.equals("b");        return "login";    }}

index.jsp页面

http://localhost:8080/index跳转页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head>    <script type="text/javascript" src="static/index.js" ></script></head><body><h1>Hello ${info} !!!!!</h1><h2>Hello World!</h2></body></html>

login.jsp页面

http://localhost:8080/login跳转页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><body><h1>Hello ${info2} !!!!!</h1><h2>Hello World!</h2></body></html>

error.jsp页面

统一异常处理页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>异常页面</title></head><body><% Exception ex = (Exception)request.getAttribute("ex"); %><H2>Exception: <%= ex.getMessage()%></H2><P/><% ex.printStackTrace(new java.io.PrintWriter(out)); %></body></html>

拦截器AccessCountInterceptor.java类

这个拦截器记录登陆次数,只是测试,不考虑线程竞争。

package com.sun.ssm.interceptor;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Created by xxx on 2017/7/19. */public class AccessCountInterceptor extends HandlerInterceptorAdapter {    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {        Object countObj = null;        countObj = request.getSession().getServletContext().getAttribute("access_count");        int count =  0;        if(countObj != null){            count = (Integer)countObj ;        }        count ++;        System.out.println(this.toString()+" access count :"+count);        request.getSession().getServletContext().setAttribute("access_count",count);        return super.preHandle(request, response, handler);    }    @Override    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {        super.afterCompletion(request, response, handler, ex);    }}

拦截器ControllerHandleTimeInterceptor.java类

这个拦截器用于记录页面请求时间,时间打印到后台。

package com.sun.ssm.interceptor;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.util.Date;/** * Created by xxx on 2017/7/19. */public class ControllerHandleTimeInterceptor extends HandlerInterceptorAdapter {    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {        request.setAttribute("current_date",new Date());        return super.preHandle(request, response, handler);    }    @Override    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {        System.out.println(request.getRequestURI()+" handle time :"+(new Date().getTime()-((Date)request.getAttribute("current_date")).getTime()));        super.afterCompletion(request, response, handler, ex);    }}

目录

    • 项目结构
    • maven配置文件
    • webxml配置
    • applicationContextxml配置
    • spring-mvcxml配置
    • Controller实现类
    • indexjsp页面
    • loginjsp页面
    • errorjsp页面
    • 拦截器AccessCountInterceptorjava类
    • 拦截器ControllerHandleTimeInterceptorjava类
    • 目录
    • 源码位置

源码位置

源码下载:http://download.csdn.net/detail/suncoder/9904254