Spring_mvc的搭建以及实现

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

框架

编辑
  通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、VelocityTilesiText和POI。Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。Spring MVC 分离了控制器、模型对象、过滤器以及处理程序对象的角色,这种分离让它们更容易进行定制。

优点

编辑
  Lifecycle for overriding binding, validation, etc,易于同其它View框架(Tiles等)无缝集成,采用IOC便于测试。
它是一个典型的教科书式的mvc构架,而不像struts等都是变种或者不是完全基于mvc系统的框架,对于初学者或者想了解mvc的人来说我觉得 spring是最好的,它的实现就是教科书!第二它和tapestry一样是一个纯正的servlet系统,这也是它和tapestry相比 struts所具有的优势。而且框架本身有代码,看起来容易理解。
 
搭建环境:

一、导包

二、配置

首先编写spring的配置文件  spring-all.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: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-4.3.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">

    <context:component-scan base-package="com.*" />
    <mvc:annotation-driven />
    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/page/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean> 
    <!-- 文件上传需要配置的类 -->
    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 文件总大小(单位是b) -->
        <property name="maxUploadSize" value="10000000"></property>
        <!-- 单个文件大小 -->
        <property name="maxUploadSizePerFile" value="2000000"></property>
        <!-- 字符集 -->
        <property name="defaultEncoding" value="utf-8"></property>
    </bean>

    <!-- 转换编码为utf-8的bean -->
    <bean
        class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <bean
                    class="org.springframework.http.converter.StringHttpMessageConverter">
                    <property name="supportedMediaTypes">
                        <list>
                            <value>text/plain;charset=UTF-8</value>
                        </list>
                    </property>
                </bean>
            </list>
        </property>
    </bean>
</beans>

 编写web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <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>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- The front controller of this Spring Web application, responsible for handling all application requests -->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-all.xml</param-value>
        </init-param>
        <!-- 启动时加载 -->
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!-- Map all requests to the DispatcherServlet for handling -->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
</web-app>

定义一个实体类

package com.model;

import java.util.Date;

import org.springframework.format.annotation.DateTimeFormat;

public class Person {
    private Integer id;
    private String name;
    @DateTimeFormat(pattern="yyyyMMdd")
    private Date birthday;
    
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    @Override
    public String toString() {
        return "Person [id=" + id + ", name=" + name + ", birthday=" + birthday + "]";
    }
    
}

编写具体实现的控制文件 PersonController.java

package com.controller;

import java.io.File;
import java.io.IOException;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.io.FileUtils;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import com.model.Person;

@Controller
public class PersonController {
    
    //页面跳转
    @RequestMapping("test")
    public String test(){
        
        return "success";
    }
    
    //传值,字符串和数字
    @RequestMapping("test0/{ss}")
    public String test0(@PathVariable("ss")String str){
        System.out.println(str);
        //System.out.println(num);
         return "error";
    }
    
    @RequestMapping(value="test1",method={RequestMethod.POST,RequestMethod.GET})
    public String test1(@RequestParam("str")String str,@RequestParam("num")int num){
        System.out.println(str);
        System.out.println(num);
         return "error";
    }
    @RequestMapping(value="test2")
    public String test2(@RequestParam("str")String str,@RequestParam("num")int num){
        System.out.println(str);
        System.out.println(num);
         return "error";
    }
    
    //传日期型参数
    @RequestMapping("test3")
    public String test3(@RequestParam("date")@DateTimeFormat(pattern="yyyyMMdd")Date date){
        
        System.out.println(date);
        return "success";
    }
    
    //传递实体类
    @RequestMapping("test4")
    public String test4(Person p){
        System.out.println(p);
        return "success";
    }
    
    //传递数组
    @RequestMapping("test5")
    public String test5(@RequestParam("strs[]")String[] strs){
        for(String s:strs){
            System.out.println(s);
        }
        return "success";
    }
    
    //带日期型参数的实体类
    @RequestMapping("test6")
    public String test6(Person p){
        System.out.println(p);
        return "success";
    }
    
    @ResponseBody
    @RequestMapping("test7")
    public String test7(Person p){
        System.out.println(p);
        String json = "{"success":true}";
        return json;
    }
    
    //@ResponseBody
    @RequestMapping("test8")
    public String test8(@RequestParam("file")MultipartFile file,HttpServletRequest request){
        
        String path = request.getServletContext().getRealPath("/files");
        String fileName = file.getOriginalFilename();
        System.out.println(fileName);
        fileName+=new Date().getTime();
        File filenew  = new File(path+"/"+fileName);
        
        try {
            file.transferTo(filenew);
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return "success";
    }
    
    @RequestMapping("testm")
    public String testm(@RequestParam("file")MultipartFile[] files,HttpServletRequest request){
        
        String path = request.getServletContext().getRealPath("/files");
            for(int i=0;i<files.length;i++){
                String fileName = files[i].getOriginalFilename();
                System.out.println(fileName);
                fileName+=new Date().getTime();
                File filenew  = new File(path+"/"+fileName);
                try {
                    files[i].transferTo(filenew);
                } catch (IllegalStateException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        
        return "success";
    }
    
    @RequestMapping(value = "test9")
    // public ResponseEntity<byte[]> download(String fileName, File file) throws
    // IOException {
    public ResponseEntity<byte[]> download(HttpServletRequest request, @RequestParam("filename") String filename)
            throws IOException {
        //filename = new String(filename.getBytes("UTF-8"), "iso-8859-1");// 为了解决中文名称乱码问题
        String path = request.getServletContext().getRealPath("/files");
        path += "\" + filename;
        File file = new File(path);
        HttpHeaders headers = new HttpHeaders();
        headers.setContentDispositionFormData("attachment",filename);
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);
    }
}

定义一个jsp页面进行显示

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/jquery-1.11.2.min.js"></script>
</head>
<body>
<a href="test.do">测试</a>
<a href="test0/haha.do">测试0</a><br>
<a href="test1.do?str=nihao&num=123">测试1</a><br>
<form action="test2.do" method="post">
    <input type="text" name="str">
    <input type="text" name="num">
    <input type="submit" value="提交">
</form><br>
<a href="test3.do?date=20170419">测试2</a><br>

<form action="test4.do" method="post">
    <input type="text" name="id">
    <input type="text" name="name">
    <input type="submit" value="提交">
</form><br>

<form action="test5.do" method="post">
    <input type="text" name="strs[]">
    <input type="text" name="strs[]">
    <input type="submit" value="提交">
</form><br>

<form action="test6.do" method="post">
    <input type="text" name="id">
    <input type="text" name="name">
    <input type="text" name="birthday">
    <input type="submit" value="提交">
</form><br>

<form id="form">
    <input type="text" name="id">
    <input type="text" name="name">
    <input type="text" name="birthday">
    <input id="btn" type="button" value="提交">
</form><br>

<form action="test8.do" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" value="文件上传" />
</form><br>

<form action="testm.do" method="post" enctype="multipart/form-data">
    <input multiple="true" type="file" name="file" />
    <input type="submit" value="文件上传" />
</form><br>

<a href="test9.do?filename=jsonarray.rb">下载测试-jsonarray.rb</a><br>
<a href="test9.do?filename=content.docx">下载测试-content.docx</a><br>

<script type="text/javascript">
    $(function(){
        $("#btn").click(function(){
            var f = $("#form").serializeArray();
            $.ajax({
                url:"test7.do",
                data:f,
                dataType:"json",
                type:"POST",
                success:function(d){
                    console.log(d);
                },
                error:function(msg){
                    console.log(msg.responseText);
                }
            });
        });
    });
    
    /* $(function(){
        $("#btn_upload").click(function(){
            var f = $("#formupload").serializeArray();
            $.ajax({
                url:"test8.do",
                data:f,
                dataType:"json",
                type:"POST",
                success:function(d){
                    console.log(d);
                },
                error:function(msg){
                    console.log(msg.responseText);
                }
            });
        });
    }); */
</script>
</body>
</html>

实现效果如下:

原文地址:https://www.cnblogs.com/claricre/p/6736538.html