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数据
说在最后的话:编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~