SprinMVC转发、重定向、收集date数据、自定义转换器、文件上传、json数据转换

版权声明:本文为博主原创文章,版权归原作者小思所有,转载或者引用本文内容请注明来源及原作者 https://blog.csdn.net/zeal9s/article/details/83692167

1.项目模块图
在这里插入图片描述
2.完成SpringMVC的基本搭建
pom.xml(下载jar包的文件)

<?xml version="1.0" encoding="UTF-8"?>

<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/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>SpringMVC</artifactId>
        <groupId>SpringMVC</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>SpringMVC_03</groupId>
    <artifactId>SpringMVC_03</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>SpringMVC_03 Maven Webapp</name>
    <!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <!--引入SpringMVC依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.10.RELEASE</version>
        </dependency>
       
    </dependencies>

    <build>
        <finalName>SpringMVC_03</finalName>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
            <plugins>
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.0.0</version>
                </plugin>
                <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.7.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.20.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.2.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.5.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

springmvc.xml(核心配置文件)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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.xsd
                           http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">


    <!--配置注解扫描器-->
    <context:component-scan base-package="com.zs.controller" />

    <!--配置内部模型视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>


</beans>

web.xml

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--初始化参数,将springmvc的核心配置文件springmvc.xml初始化-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>*.action</url-pattern>
  </servlet-mapping>
</web-app>

MainController.java

package com.zs.controller;

import com.zs.entity.Point;
import com.zs.entity.Users;
import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.*;

/**
 * @author 小思
 * @PackageName:com.zs.controller
 * @ClassName: MainController
 * @Description:
 * @date 2018/11/3 20:26
 */
//标明扫描器经过的类
@Controller
public class MainController {
    //测试框架是否成功
    @RequestMapping("test")
    public String test(){
        System.out.println("springmvc成功搭建");
        return "index";
    }
}

将项目发布到服务器上,然后访问http://localhost:8080/test.action看控制输出
在这里插入图片描述
则搭建SpringMVC成功

SprinMVC转发、重定向、收集date数据、自定义转换器、文件上传、json数据转换

转发

MainController.java

package com.zs.controller;

import com.zs.entity.Point;
import com.zs.entity.Users;
import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.*;

/**
 * @author 小思
 * @PackageName:com.zs.controller
 * @ClassName: MainController
 * @Description:
 * @date 2018/11/3 20:26
 */
//标明扫描器经过的类
@Controller
public class MainController {
    //测试框架是否成功
    @RequestMapping("test")
    public String test(){
        System.out.println("springmvc成功搭建");
        return "index";
    }

    //测试转发到jsp页面
    @RequestMapping("testForword")
    public String testForword(Map map){
        map.put("uname","tomcat");
        map.put("upwd","123456");
        return "forward:TestForwardAndRedirect.jsp";
    }

  
}

重新发布项目,浏览器访问http://localhost:8080/testForword.action

重定向

MainController.java

package com.zs.controller;

import com.zs.entity.Point;
import com.zs.entity.Users;
import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.*;

/**
 * @author 小思
 * @PackageName:com.zs.controller
 * @ClassName: MainController
 * @Description:
 * @date 2018/11/3 20:26
 */
//标明扫描器经过的类
@Controller
public class MainController {
    //测试重定向到页面
    @RequestMapping("testRedirect")
    public String testRedirect(Map map){
        map.put("uname","tomcat");
        map.put("upwd","123456");
        return "redirect:TestForwardAndRedirect.jsp";
    }
}

重新发布项目,浏览器访问http://localhost:8080/testRedirect.action

收集页面date类型数据

addUsers.jsp(收集数据的页面)

<%--
 @Name: addUsers
 @Description: 
 @author 小思
 @date 2018/11/3 20:58
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>测试页面收集date数据</title>
</head>
<body>
<form action="/testDate.action" method="post">
    用户名:<input type="text" name="uname"><br>
    生日:<input type="text" name="birthday"><br>
    <input type="submit" value="提交">
</form>
</body>
</html>

Users.java(包含date类型的属性的实体类,注意要date属性上要开启注解@DateTimeFormat(pattern =“yyyy-MM-dd”))

package com.zs.entity;

import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;

/**
 * @author 小思
 * @PackageName:com.zs.entity
 * @ClassName: Users
 * @Description:
 * @date 2018/11/3 20:26
 */
public class Users {
    private String uname;//用户名
    @DateTimeFormat(pattern ="yyyy-MM-dd")
    private Date birthday;//生日(不是一般的类型就要标明注解)

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public Users() {
    }

    public Users(String uname, Date birthday) {
        this.uname = uname;
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        return "Users{" +
                "uname=" + uname +
                ", birthday=" + birthday +
                '}';
    }
}

MainController.java

package com.zs.controller;

import com.zs.entity.Point;
import com.zs.entity.Users;
import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.*;

/**
 * @author 小思
 * @PackageName:com.zs.controller
 * @ClassName: MainController
 * @Description:
 * @date 2018/11/3 20:26
 */
//标明扫描器经过的类
@Controller
public class MainController {
    //测试页面收集data数据
    @RequestMapping("testDate")
    public String testDate(Users users){
        System.out.println(users);
        return "index";
    }
}

在springmvc.xml添加注解驱动的配置和自定义转换器的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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.xsd
                           http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">


    <!--配置注解扫描器-->
    <context:component-scan base-package="com.zs.controller" />

    <!--配置内部模型视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

    <!--配置注解驱动-->
    <mvc:annotation-driven></mvc:annotation-driven>

    <!--配置自定义转换器-->
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <bean class="com.zs.converter.PointConverter"></bean>
        </property>
    </bean>

   


</beans>

重新发布项目,浏览器访问http://localhost:8080/addUsers.jsp
在这里插入图片描述
查看控制台
在这里插入图片描述
获取的时间可以进行格式化你想要的格式

获取页面不规则字符串

getPoint.jsp(以“120,1990”这种格式获取x和y轴为例)

<%--
 @Name: getPoint
 @Description: 
 @author 小思
 @date 2018/11/3 21:16
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>测试获取页面不规则字符串</title>
</head>
<body>
<form action="/testPoint.action" method="post">
    x轴,y轴:<input type="text" name="point"><br>
    <input type="submit" value="提交">
</form>
</body>
</html>

收集不规则字符串最后要设置到Point.java的实体类去

package com.zs.entity;

/**
 * @author 小思
 * @PackageName:com.zs.entity
 * @ClassName: Point
 * @Description:测试获取页面不规则字符串的实体类
 * @date 2018/11/3 21:14
 */
public class Point {
    private int x;//x轴
    private int y;//y轴

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public Point() {
    }

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    @Override
    public String toString() {
        return "Point{" +
                "x=" + x +
                ", y=" + y +
                '}';
    }
}

不规则字符串转换我们需要的Point对象
PointConverter.java(自定义转换器)

package com.zs.converter;

import com.zs.entity.Point;
import org.springframework.core.convert.converter.Converter;

/**
 * @author 小思
 * @PackageName:com.zs.converter
 * @ClassName: PointConverter
 * @Description:将getPoint.jsp收集的不规则字符串,截取,然后保存到对象中,Converter<String,Point>String是传进来的格式,Point是转换出去的格式
 * @date 2018/11/3 21:21
 */
public class PointConverter implements Converter<String, Point> {

    @Override
    public Point convert(String s) {
        //以逗号分割,获取x和y的值
        String x_y[]=s.split(",");
        int x=Integer.parseInt(x_y[0]);
        int y=Integer.parseInt(x_y[1]);
        Point p=new Point(x,y);
        return p;
    }
}

在springmvc.xml配置自定义转换器

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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.xsd
                           http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">


    <!--配置注解扫描器-->
    <context:component-scan base-package="com.zs.controller" />

    <!--配置内部模型视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

    <!--配置注解驱动和自定义转换器-->
    <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>

    <!--配置自定义转换器-->
    <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <bean class="com.zs.converter.PointConverter"></bean>
        </property>
    </bean>




</beans>

重新发布项目,浏览器访问http://localhost:8080/getPoint.jsp
在这里插入图片描述
控制台能按要求输出我们定义转换器的格式
在这里插入图片描述

文件上传

在pom.xml文件添加依赖

       <!--引入文件上传的依赖-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.3</version>
        </dependency>


        <!--引入servlet依赖-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>

fileUpload.jsp

<%--
 @Name: FileUpload
 @Description: 
 @author 小思
 @date 2018/11/3 21:38
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>测试文件上传</title>
</head>
<body>
<form action="/testFileUpload.action" method="post" enctype="multipart/form-data">
    <%--name必须和接收的方法的参数名保持一致,不然收集不到数据--%>
    <input type="file" name="multipartFile"><input type="submit" value="上传">
</form>
</body>
</html>

MainController.java

package com.zs.controller;

import com.zs.entity.Point;
import com.zs.entity.Users;
import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.*;

/**
 * @author 小思
 * @PackageName:com.zs.controller
 * @ClassName: MainController
 * @Description:
 * @date 2018/11/3 20:26
 */
//标明扫描器经过的类
@Controller
public class MainController {
    //测试文件上传
    @RequestMapping("testFileUpload")
    public String testFileUpload(MultipartFile multipartFile, HttpServletRequest request){
        //输出文件名
        System.out.println(multipartFile.getOriginalFilename());
        //新建一个文件夹images保存上传的图片,真实存在的地址是服务器的发布地址
        String path=request.getRealPath("/images");
        System.out.println("项目在服务器的地址:"+path);
        File file=new File(path+"/"+multipartFile.getOriginalFilename());
        try {
            //使用文件帮助类复制获取的文件
            FileUtils.copyInputStreamToFile(multipartFile.getInputStream(),file);
            System.out.println("图片上传并下载成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "index";
    }

     }

springmvc.xml(配置文件上传)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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.xsd
                           http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">


    <!--配置注解扫描器-->
    <context:component-scan base-package="com.zs.controller" />

    <!--配置内部模型视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

    <!--配置文件上传-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="UTF-8"></property>
        <property name="maxUploadSize" value="2097152"></property>
    </bean>


</beans>

重新发布项目,浏览器访问http://localhost:8080/fileUpload.jsp
在这里插入图片描述
控制台输出
在这里插入图片描述

获取json数据

在pom.xml添加依赖

		<!--引入jackson的三个依赖(缺一不可)-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.7</version>
        </dependency>

        <!--引入jackson的三个依赖(缺一不可)-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.7</version>
        </dependency>

        <!--引入jackson的三个依赖(缺一不可)-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.7</version>
        </dependency>

MainController.java

package com.zs.controller;

import com.zs.entity.Point;
import com.zs.entity.Users;
import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.*;

/**
 * @author 小思
 * @PackageName:com.zs.controller
 * @ClassName: MainController
 * @Description:
 * @date 2018/11/3 20:26
 */
//标明扫描器经过的类
@Controller
public class MainController {
    //测试返回需要的json数据
    //返回的是json数据不是页面,故要加入@ResponseBody
    @ResponseBody
    @RequestMapping("getJson")
    public Map<String,Object> getJson(){
        Map<String,Object> map=new HashMap<>();
        List<Users> list=new ArrayList<>();
        list.add(new Users("张三",new Date()));
        list.add(new Users("张大三",new Date()));
        list.add(new Users("张中三",new Date()));
        list.add(new Users("张小小三",new Date()));
        map.put("total","10");
        map.put("lists",list);
        return map;
    }
     }

重新发布项目,浏览器访问http://localhost:8080/getJson.action

页面返回的Json数据
在这里插入图片描述

说在最后的话:编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~

猜你喜欢

转载自blog.csdn.net/zeal9s/article/details/83692167
今日推荐