SpringMVC篇:转发与重定向、图片文件上传、Json(jackson)

注意:

项目:war 和 项目:war  exploded

两者并不同,idea  运行 项目:war  exploded

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.10.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.3</version>
        </dependency>


        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.7</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.9.7</version>
        </dependency>


        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.9.7</version>
        </dependency>

所需依赖:

commons-fileupload:文件上传

jackson.core:三个jackson包

web.xml 、Springmvc.xml 如上期配置

package com.hc.controller;

import com.hc.entity.Point;
import com.hc.entity.Student;
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.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
public class FirstController {

    @RequestMapping("load")
    public String load(MultipartFile file,HttpServletRequest request){

//        System.out.println("名称\t"+file.getOriginalFilename());
//        System.out.println("大小\t"+file.getSize());
//        System.out.println("name\t"+file.getName());
//
//        System.out.println("文件路径\t"+request.getRealPath("/images"));
//+System.currentTimeMillis()
        String path=request.getRealPath("/images");
        File f=new File(path+"/"+file.getOriginalFilename());
        try {
            FileUtils.copyInputStreamToFile(file.getInputStream(),f);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "success";
    }

    @RequestMapping("point")
    public String point(Point point){
        System.out.println(point);
        return "success";
    }

    @RequestMapping("first")
    public String first(HttpServletRequest request){
        request.setAttribute("id",12);
        return "forward:forWard.action";
    }

    @RequestMapping("forWard")
    public String forWard(HttpServletRequest request){
        System.out.println("forWard\t"+request.getAttribute("id"));
        return "success";
    }


    @ResponseBody
    @RequestMapping("json")
    public Map<String,Object> json(){
        Map<String,Object> map=new HashMap<>();

        List<Student> studentList=new ArrayList<>();
        studentList.add(new Student("话","女",12));
        studentList.add(new Student("还是","男",32));

        map.put("size",studentList.size());
        map.put("students",studentList);
        return map;
    }

}

1.forward:可以转发数据

转发:可将数据转发至页面,地址不发生改变

重定向:不传递数据,直接 跳到另一个页面,地址将变为目标页面。

2.ResponseBody:自动转换

比fastjson更便捷

json格式的数据

{"size":2,"students":[{"stuId":0,"stuName":"话","stuSex":"女","stuAge":12},{"stuId":0,"stuName":"还是","stuSex":"男","stuAge":32}]}

3.收集一个util的date数据

user:

import java.util.Date;

public class Users {
    private String uname;
    private String upwd;

    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date birthday;

}

在实体类需要特殊收集的属性上,开启DateTimeFormat注解

<mvc:annotation-driven></mvc:annotation-driven>

在springmvc中配置注解驱动

4.收集坐标


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<form action="/load.action" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="load">
</form>



first

<a href="/first.action">success</a>

<form action="/point.action" method="post">
    <input type="text" name="point">
    <input type="submit" value="ok">
</form>


</body>
</html>

坐标格式:(2,3)

首先,自定义转换器

package com.hc.controller;

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

public class PointConverter implements Converter<String,Point> {
    @Override
    public Point convert(String s) {
        String[] strings=s.split("-");
        int x=Integer.parseInt(strings[0]);
        int y=Integer.parseInt(strings[1]);
        Point point=new Point(x,y);
        return point;
    }
}

构建point对象,属性为x、y

配置自定义转换器

<bean id="converters" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <bean class="com.hc.controller.PointConverter"></bean>
        </property>
    </bean>

    <mvc:annotation-driven conversion-service="converters"></mvc:annotation-driven>

按照中间的 -  分割

例如:  667-87 ,那么将被格式化为  (667,87)

在point类中封装tostring方法,效果会很明显

5.图片上传

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="UTF-8"></property>
        <property name="maxUploadSize" value="2097152"></property>
    </bean>

设置默认编码为UTF-8

最大上传大小为:1024*1024*2= 2097152  2M

<form action="/load.action" method="post" enctype="multipart/form-data">
form 上传方式为POST

选择框的name与controller方法的参数MultipartFile的变量名一致

file.getOriginalFilename():图片名字

如有需要System.currentTimeMillis(),加上时间戳。

因为如果上传了同名的文件,已存在的将被覆盖。

file.getSize():图片大小

request.getRealPath("/images"):获得images在服务器的路径

try catch:alt+enter(回车)

猜你喜欢

转载自blog.csdn.net/qq_43532342/article/details/83714463
今日推荐