SprinMVC转发、重定向、收集date数据、自定义转换器、文件上传、json数据转换
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数据
说在最后的话:编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~
阅读更多- SpringMVC系列(十一)把后台返回的数据转换成json、文件下载、文件上传
- 动态ActionForm、struts上传文件、自定义ActionForm的类型转换、Struts对ActionForm的自动搜集流程
- struts2实现Date类型转换和自定义类型转换器
- 使用Apache POI读取Excel文件,将读取的数据转换成json写入文本文件
- 以Base64字符串形式上传文件——服务器端Java/Servlet接受请求数据中的字符串内容并转换成文件
- 前台提交数据(表单数据、Json数据及上传文件)的类型
- ajaxfileupload上传文件,返回json数据报错的问题。 Resource interpreted as Document but transferred with MIME type ap
- 文件上传 content-type:application/json System.Web.HttpContext.Current.Request.InputStream 读取不到数据
- ELK系列~Nxlog日志收集加转发(解决log4日志换行导致json转换失败问题)
- 上传文件返回的json数据会被提示下载问题解决方案
- SpringMVC中文件上传和json数据配置
- PHP Ajax,FormData收集表单数据(包括文件) 页面无刷新上传文件(提交表单)
- Golang 奇葩的时间包之Json与struct对象之间互相转换,JsonDate和JsonTime自定义类型如何实现json编码和解码(二)
- 处理本地JSON文件,将data数据转换成NSDictionary
- 前台js获取到后台json数据,eval解析json后,日期(object)对象转换为date日期格式显示
- 如何解决“文件上传返回JSON数据,在IE下提示下载文件”的问题?
- Js:消息弹出框、获取时间区间、时间格式、easyui datebox 自定义校验、表单数据转化json、控制两个日期不能只填一个
- 使用ajaxFileUpload与SpringMVC实现异步上传下载文件并返回json数据
- python将json格式的数据转换成文本格式的数据或sql文件
- spring读取资源文件时自定义数据类型转换---CustomEditorConfigurer