SpringMVC(idea)整理
文章目录:
- 创建web项目
- 回顾servlet
- springMVC初识
- 第一个springMVC程序
- springMVC的执行原理(执行流程)
- 使用注解开发springMVC
- RequestMapping
- Restful风格
- 重定向和转发
- 接收请求参数及数据回显
- 通过过滤器来解决乱码问题
- JSON
- controller返回JSON数据
- ssm整合
- ajax
- 拦截器
- 登录判断验证
- 文件上传和下载
1.创建web项目
maven依赖
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
2.回顾servlet
1.编写servlet
package com.wash.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//HttpServlet的父类实现了servlet接口,凡是实现servlet接口的程序都是一个servlet
public class Servlet1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.获取前端参数
String method=req.getParameter("method");
if(method.equals("add")){
req.getSession().setAttribute("msg", "执行了add方法");
}
if(method.equals("delete")){
req.getSession().setAttribute("msg", "执行了delete方法");
}
//2.调用业务层
//3.试图转发或者重定向
//转发: req.getRequestDispatcher()
//重定向 resp.sendRedirect();
req.getRequestDispatcher("WEB-INF/jsp/test.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
2.配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>com.wash.servlet.Servlet1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<!-- <session-config>
<session-timeout>15</session-timeout>
</session-config>-->
<!-- <welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>-->
</web-app>
3.编写跳转页面的jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${msg}
</body>
</html>
4.运行tomcat,在页面配置参数
3.springMVC初识
4.第一个springMVC程序
1.配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--关联一个springmvc的配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!--启动级别-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
2.spring-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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">
<!--添加处理映射器-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!--添加处理器适配器-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--添加视图解析器
1.获取ModelAndView的数据
2.解析ModelAndView的视图名字
3.拼接视图名字,找到对应的视图/WBE-INF/jsp/hello.jsp
4.将数据渲染到视图上
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
<property name="prefix" value="WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<bean id="/hello" class="com.wash.controller.HelloController"/>
</beans>
3.controller.java
package com.wash.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloController implements Controller {
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
//ModerAndView 模型和视图
ModelAndView mv= new ModelAndView();
//封装对象,放在ModelAndView中
mv.addObject("msg", "HelloSpringMvc");
//封装要跳转的视图,放在ModelAndView中
mv.setViewName("hello");
return mv;
}
}
4.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${msg}
</body>
</html>
5.运行tomcat,将项目部署在tomcat下运行
5.springMVC的执行原理(执行流程)
6.使用注解开发springMVC
web.xml和jsp页面不变,且都需要配置
1.controller.java
package com.wash.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloController {
//真实地址
@RequestMapping("/he")
public String hello(Model model){
//封装数据
model.addAttribute("msg", "hello springmvc");
return "hello";//会被视图解析器处理
}
}
2.配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--自动扫描包,让指定包下的注解生效,由IOC容器统一管理-->
<context:component-scan base-package="com.wash.controller"/>
<!--让spring不处理静态资源,css,js,html-->
<mvc:default-servlet-handler/>
<!--使用注解注册映射器和适配器两个实例-->
<mvc:annotation-driven/>
<!--添加视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
<property name="prefix" value="WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
7.RequestMapping
明确真实地址的级别
8.Restful风格
1.原来的风格
2.Restful
在springmvc中添加@PathVariable注解
9.重定向和转发
10.接收请求参数及数据回显
11.解决乱码问题
/*可以的。
这里把url-pattern里的/改成/*,/处理部分请求,/ *处理所有请求包括jsp界面。
11.JSON
12.controller返回JSON数据
- jackson
- Fastjson
步骤:
- 1.导入maven包(上面的 jackson)
- 2.在web.xml内配置dispatcherservlet 和过滤器
- 3.配置spring-servlet.xml(需要自动扫描还有视图解析器)
- 4.在controller类中创建Objectmapper类
- 5.可将JSON封装成工具类
将JSON封装成工具类
工具类
controller类
注意:通过后端返回给前端字符串的两种方式
- 第一种@controller +@ResponseBody
- 第二种@RestController
FastJson
1.maven导包
13.ssm整合
注意:因为ssm整合这块代码比较多,所以之后会单更新ssm整合篇
错误排查
14.Ajax
1.用iframe仿照ajax实现不刷新页面加载数据
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>iframe测试体验无刷新</title>
<script>
function go() {
var url= document.getElementById("url").value;
document.getElementById("iframe").src=url;
}
</script>
</head>
<body>
<div>
<p>请输入地址</p>
<p>
<input type="text" id="url" value="https://www.baidu.com"/>
<input type="button" value="提交" onclick="go()"/>
</p>
</div>
<div>
<iframe id="iframe" style="width: 100%;height: 500px"></iframe>
</div>
</body>
</html>
2.通过jquery库的ajax实现异步刷新
//controller
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@RestController
public class ajaxComtroller {
@RequestMapping("/t1")
public String ajax(){
return "hello";
}
@RequestMapping("/a1")
public void a1(String name, HttpServletResponse response) throws IOException {
System.out.println("name"+name);
if("shuaishuai".equals(name)){
response.getWriter().print("true");
}else{
response.getWriter().print("false");
}
}
}
//通过ajax实现后台controller层的数据传送
//ajax通过url和callback找到对应controller,
//并把controller层的数据(字符串)返回到前端。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>首页</title>
<script src="${pageContext.request.contextPath}/static/js/jquery-3.6.0.js"></script>
<script>
function go(){
$.post({
url:"${pageContext.request.contextPath}/a1",
data:{"name":$("#username").val()},
success:function (data) {
alert(data);
}
})
}
</script>
</head>
<body>
<%--失去焦点的时候发起一个请求到后台--%>
用户名<input type="text" id="username" onblur="go()"/>
</body>
</html>
3.ajax异步加载数据
//1.实体类
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private String name;
private int age;
private String sex;
}
注意:导lombok包和Jackson包
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.8</version>
</dependency>
</dependencies>
//2.controller层
@RestController
public class ajaxComtroller {
@RequestMapping("/t1")
public String ajax(){
return "hello";
}
@RequestMapping("/a1")
public void a1(String name, HttpServletResponse response) throws IOException {
System.out.println("name"+name);
if("shuaishuai".equals(name)){
response.getWriter().print("true");
}else{
response.getWriter().print("false");
}
}
@RequestMapping("/a2")
public List<User> a2(){
List<User> userList= new ArrayList<User>();
//添加数据
userList.add(new User("shuaishuai",2,"男"));
userList.add(new User("wenwen",2,"女"));
userList.add(new User("小小猪",2,"女"));
return userList;
}
}
//3.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>a2</title>
<script src="${pageContext.request.contextPath}/static/js/jquery-3.6.0.js"></script>
<script>
$(function () {
$("#btn").click(function () {
/*
* $.post(url,参数【可以省略】,success)*/
$.post("${pageContext.request.contextPath}/a2",function (data) {
var html="";
for (let i=0;i<data.length;i++){
html+="<tr>"+
"<td>"+ data[i].name+"</td>"+
"<td>"+ data[i].age+"</td>"+
"<td>"+ data[i].sex+"</td>"+
"</tr>"
}
$("#content").html(html);
});
})
});
</script>
</head>
<body>
<input type="button" value="加载数据" id="btn"/>
<table>
<tr>
<td>姓名</td>
<td>年龄</td>
<td>性别</td>
</tr>
<tbody id="content">
<%--后台数据--%>
</tbody>
</table>
</body>
</html>
4.ajax验证用户名体验
注意:json乱码的解决
//1.login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录</title>
<script src="${pageContext.request.contextPath}/static/js/jquery-3.6.0.js"></script>
<script>
function a1() {
$.post({
url:"${pageContext.request.contextPath}/a3",
data:{"name":$("#name").val()},
success:function (data) {
if(data.toString()==="ok"){
$("#userinfo").css("color","green");
}else{
$("#userinfo").css("color","red");
}
$("#userinfo").html(data);
}
})
}
function a2() {
$.post({
url:"${pageContext.request.contextPath}/a3",
data:{"pwd":$("#pwd").val()},
success:function (data) {
if(data.toString()==="ok"){
$("#pwdinfo").css("color","green");
}else{
$("#pwdinfo").css("color","red");
}
$("#pwdinfo").html(data);
}
})
}
</script>
</head>
<body>
用户名:<input type="text" id="name" placeholder="请输入用户名" onblur="a1()"/>
<span id="userinfo"></span>
密码: <input type="text" id="pwd" placeholder="请输入密码" onblur="a2()"/>
<span id="pwdinfo"></span>
</body>
</html>
//2.controller
import com.wash.pojo.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@RestController
public class ajaxComtroller {
@RequestMapping("/t1")
public String ajax(){
return "hello";
}
@RequestMapping("/a1")
public void a1(String name, HttpServletResponse response) throws IOException {
System.out.println("name"+name);
if("shuaishuai".equals(name)){
response.getWriter().print("true");
}else{
response.getWriter().print("false");
}
}
@RequestMapping("/a2")
public List<User> a2(){
List<User> userList= new ArrayList<User>();
//添加数据
userList.add(new User("shuaishuai",2,"男"));
userList.add(new User("wenwen",2,"女"));
userList.add(new User("小小猪",2,"女"));
return userList;
}
@RequestMapping("/a3")
public String a3(String name,String pwd){
String msg="";
if(name!=null){
if("admin".equals(name)){
msg="ok";
}else{
msg="用户名有误";
}
}
if(pwd!=null){
if("1234567".equals(pwd)){
msg="ok";
}else{
msg="密码错误";
}
}
return msg;
}
}
15.拦截器
- 首先新建module,添加web支持
- 然后编写web.xml和application.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--dispatchservlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--绑定spring的配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:application.xml</param-value>
</init-param>
<!--启动时加载-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
<!--不能写/*-->
</servlet-mapping>
<!--过滤字符集-->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
<!--/*过滤所有的请求-->
</filter-mapping>
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 配置SpringMVC -->
<!-- 1.开启SpringMVC注解驱动 -->
<mvc:annotation-driven/>
<!-- 2.静态资源默认servlet配置-->
<mvc:default-servlet-handler/>
<!-- 3.配置jsp 显示ViewResolver视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- 4.扫描web相关的bean,下面所有的注解类交给ioc容器处理 -->
<context:component-scan base-package="com.wash.controller" />
<!--拦截器配置-->
<mvc:interceptors>
<mvc:interceptor>
<!--包括这个请求下面的所有请求-->
<mvc:mapping path="/**"/>
<bean class="com.wash.config.Interceptor"/>
</mvc:interceptor>
</mvc:interceptors>
</bean>
注意拦截器的配置
- 之后写拦截器还有controller
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Interceptor implements HandlerInterceptor {
//return true;表示拦截器放行
//return false;表示拦截器拦截请求
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//处理前
System.out.println("处理前");
return false;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
//处理后
System.out.println("处理后");
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//清理
}
}
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class controller {
@RequestMapping("/a1")
public String test(){
System.out.println("ok");
return "ok";
}
}
16.通过拦截器实现登录判断验证(只有登录才能进去页面)
1.配置web.xml和application.xml
2.controller
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpSession;
@Controller
@RequestMapping("user")
public class Logincontroller {
@RequestMapping("/main")
public String main(){
return "main";
}
@RequestMapping("/gologin")
public String logingo(){
return "login";
}
@RequestMapping("/login")
public String login(HttpSession session, String username, String password, Model model){
//把用户信息存入session
session.setAttribute("userinfo", username);
model.addAttribute("username", username);
return "main";
}
@RequestMapping("/remove")
public String remove(HttpSession session){
session.removeAttribute("userinfo");
return "main";
}
}
3.jsp界面
①登录
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录</title>
<%--WEB-INF下的所有页面或者资源只能通过controller和servlet进行访问--%>
</head>
<body>
<h1>登录界面</h1>
<form action="${pageContext.request.contextPath}/user/login" method="post">
用户名:<input type="text" name="username"/>
<br/>
密码: <input type="password" name="password"/>
<br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
②首页
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>首页</title>
</head>
<body>
<h1>我是首页</h1>
<span>${username}</span>
<p>
<a href="${pageContext.request.contextPath}/user/remove">注销</a>
</p>
</body>
</html>
③索引页
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<h1><a href="${pageContext.request.contextPath}/user/gologin">登录页面</a></h1>
<h1><a href="${pageContext.request.contextPath}/user/main">首页</a></h1>
</body>
</html>
一定要在application,xml内配置对于的拦截器信息
④拦截器
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class logininterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session= request.getSession();
//放行,判断什么时候登录
//登录页面放行
if(request.getRequestURI().contains("gologin"))
{
return true;
}
if(request.getRequestURI().contains("login"))
{
return true;
}
if(session.getAttribute("userinfo")!=null){
return true;
}
//判断什么时候没有登录
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
return false;
}
}
17.文件上传与下载
1.文件上传
1.导入包
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.2</version>
</dependency>
2.springmvc.xml的文件上传配置
<!--文件上传配置-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--请求的编码格式,必须和pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1-->
<property name="defaultEncoding" value="utf-8"/>
<!--上传文件大小上限,单位是字节-->
<property name="maxUploadSize" value="10485760"/>
<property name="maxInMemorySize" value="40960"/>
</bean>
3.controller
①通过流的方式上传文件
@Controller
public class FileController {
//采用流的方式上传文件
@RequestMapping("/upload")
@ResponseBody
public String upload(@RequestParam("file")CommonsMultipartFile file, HttpServletRequest request) throws IOException {
//获得文件名
String filename = file.getOriginalFilename();
if ("".equals(filename)){
return "文件不存在";
}
//上传文件保存路径
String path = request.getServletContext().getRealPath("/upload");
File realPath = new File(path);
if (!realPath.exists()){
realPath.mkdir();
}
//文件上传
InputStream inputStream = file.getInputStream();
FileOutputStream outputStream = new FileOutputStream(new File(realPath, filename));
int len = 0;
byte[] bytes = new byte[1024];
while ((len=inputStream.read(bytes))!=-1){
outputStream.write(bytes,0,len);
outputStream.flush();
}
//关闭流
outputStream.close();
inputStream.close();
return "上传完毕";
}
}
②.使用file.Transto上传文件
@Controller
public class FileController {
//采用file.Transto上传文件
@RequestMapping("/upload2")
@ResponseBody
public String upload2(@RequestParam("file") CommonsMultipartFile file,HttpServletRequest request) throws IOException {
//上传文件保存路径
String path = request.getServletContext().getRealPath("/upload");
File realPath = new File(path);
if (!realPath.exists()){
realPath.mkdir();
}
//transferTo将文件写入磁盘,参数传入一个文件
file.transferTo(new File(realPath+"/"+file.getOriginalFilename()));
return "上传完毕";
}
}
2.文件下载
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
@Controller
public class DownloadController {
@RequestMapping("/download2")
public String download(HttpServletRequest request, HttpServletResponse response) {
String fileName = "1.png";
System.out.println(fileName);
response.setContentType("text/html;charset=utf-8");
try {
request.setCharacterEncoding("UTF-8");//设定请求字符编码
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
BufferedInputStream bis = null;//创建输入输出流
BufferedOutputStream bos = null;
String realPath = request.getSession().getServletContext().getRealPath("/") + "upload/";//获取文件真实路径
System.out.println(realPath);
String downLoadPath = realPath + fileName;
System.out.println(downLoadPath);
try {
long fileLength = new File(downLoadPath).length();//获取文件长度
//设置响应头信息;【固定的不用记,保存即可】
response.setContentType("application/x-msdownload;");
response.setHeader("Content-disposition", "attachment; filename=" + new String(fileName.getBytes("utf-8"), "ISO8859-1"));
response.setHeader("Content-Length", String.valueOf(fileLength));
bis = new BufferedInputStream(new FileInputStream(downLoadPath));//创建输入输出流实例
bos = new BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[2048];//创建字节缓冲大小
int bytesRead;
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bis != null)
try {
bis.close();//关闭输入流
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (bos != null)
try {
bos.close();//关闭输出流
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
}
之后会更新springboot和vue。