您的位置:首页 > Web前端 > JavaScript

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

2018-11-03 23:26 274 查看
版权声明:本文为博主原创文章,版权归原作者小思所有,转载或者引用本文内容请注明来源及原作者 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数据

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

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐