SpringMVC02:返回值、json数据、文件上传、拦截器
package cn.itcast.controller;
import cn.itcast.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/testString")
public String testString(Model model){
System.out.println("testString方法执行了");
//模拟从数据库中查询数据库的User对象
User user = new User();
user.setUsername("美美");
user.setPassword("123");
user.setAge(19);
//model对象
model.addAttribute("user",user);
return "success";
}
}
package cn.itcast.controller;
import cn.itcast.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Controller
@RequestMapping("/user")
public class UserController {
/**
* 返回值类型是void
* 请求转发一次请求,不用去编写项目的名称
* @param request
* @return
*/
@RequestMapping("/testVoid")
public void testVoid(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("testVoid方法执行了");
//编写请求转发的程序
//request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
//也可以选择重定向,相当于发送了新的请求,需要加项目路径
//response.sendRedirect(request.getContextPath()+"/index.jsp");
//也可能会直接进行响应--直接发请求
//设置中文乱码
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
response.getWriter().print("你好");
return;
}
}
package cn.itcast.controller;
import cn.itcast.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Controller
@RequestMapping("/user")
public class UserController {
//之前类型的底层也都是ModelAndView
/**
* testModelAndView
* @return ModelAndView 对象
*/
@RequestMapping("/testModelAndView")
public ModelAndView testModelAndView(){
//创建ModelAndView对象
ModelAndView mv = new ModelAndView();
System.out.println("testModelAndView方法执行了");
//模拟从数据库中查询数据库的User对象
User user = new User();
user.setUsername("美美");
user.setPassword("123");
user.setAge(19);
//把user对象存储到mv对象中,也会把user对象存入到request对象中
mv.addObject("user",user);
//跳转到哪个页面
mv.setViewName("success");//利用视图解析器进行跳转
return mv;
}
}
<a href="user/testForwardOrRedirect">testForwardOrRedirect</a>
package cn.itcast.controller;
import cn.itcast.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Controller
@RequestMapping("/user")
public class UserController {
/**
* 使用关键字的方式进行转发或重定向
* @return
*/
@RequestMapping("/testForwardOrRedirect")
public String testForwardOrRedirect(){
System.out.println("testForwardOrRedirect方法执行了");
//请求的转发
return "forward:/WEB-INF/pages/success.jsp";//表明使用请求转发
//重定向
//return "redirect:/index.jsp";
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<%--引入JQuery--%>
<script src="js/jquery.min.js"></script>
<script>
//页面加载,绑定单击事件
$(function(){
$("#btn").click(function (){
alert("hello button");
});
});
</script>
</head>
<body>
<a href="user/testString">test字符串</a><br>
<a href="user/testVoid">testVoid</a><br>
<a href="user/testModelAndView">testVoid</a><br>
<a href="user/testForwardOrRedirect">testForwardOrRedirect</a><br>
<button id="btn">发送ajax请求</button>
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
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">
<!--配置前端控制器,告诉哪些静态资源不拦截-->
<!-- 设置静态资源不过滤 -->
<mvc:resources location="/css/" mapping="/css/**"/> <!-- 样式 -->
<mvc:resources location="/images/" mapping="/images/**"/> <!-- 图片 -->
<mvc:resources location="/js/" mapping="/js/**"/> <!-- javascript -->
<!--开启SpringMVC框架注解的支持-->
<mvc:annotation-driven/>
</beans>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<%--引入JQuery--%>
<script src="js/jquery.min.js"></script>
<script>
//页面加载,绑定单击事件
$(function(){
alert("hehe");
$("#btn").click(function(){
alert("hehe");
$.ajax({
//编写json格式,设置属性和值
url:"user/testAjax",
contentType:"application/json;charset=UTF-8",
data:'{"username":"hehe","password":"qaz123","age":30}',//便于嵌套
dataType:"json",
type:"post",
success:function(data){
//data是服务器端响应的json数据,进行数据解析
}
});
});
});
</script>
</head>
<body>
<a href="user/testString">test字符串</a><br>
<a href="user/testVoid">testVoid</a><br>
<a href="user/testModelAndView">testVoid</a><br>
<a href="user/testForwardOrRedirect">testForwardOrRedirect</a><br>
<button id="btn">发送ajax请求</button>
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
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">
<!--配置前端控制器,告诉哪些静态资源不拦截-->
<!-- 设置静态资源不过滤 -->
<mvc:resources location="/css/" mapping="/css/**"/> <!-- 样式 -->
<mvc:resources location="/images/" mapping="/images/**"/> <!-- 图片 -->
<mvc:resources location="/js/**" mapping="/js/**"/> <!-- javascript -->
<!--开启SpringMVC框架注解的支持-->
<mvc:annotation-driven/>
</beans>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
<%--引入JQuery--%>
<script src="js/jquery.min.js"></script>
<script>
//页面加载,绑定单击事件
$(function(){
// 绑定点击事件
$("#btn").click(function(){
$.ajax({
url:"user/testAjax",
contentType:"application/json;charset=UTF-8",
data:'{"addressName":"aa","addressNum":100}',
dataType:"json", type:"post",
success:function(data){
alert(data);
alert(data.username);
alert(data.password);
alert(data.age)
}
});
});
});
</script>
</head>
<body>
<a href="user/testString">test字符串</a><br>
<a href="user/testVoid">testVoid</a><br>
<a href="user/testModelAndView">testVoid</a><br>
<a href="user/testForwardOrRedirect">testForwardOrRedirect</a><br>
<button id="btn">发送ajax请求</button>
</body>
</html>
package cn.itcast.controller;
import cn.itcast.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Controller
@RequestMapping("/user")
public class UserController {
/**
* 模拟异步请求响应
* @param user
*/
@RequestMapping("/testAjax")
public @ResponseBody User testAjax(@RequestBody User user){
System.out.println("testAjax方法执行了");
//客户端发送ajax请求,传递了json字符串,后端已经把json字符串封装到user对象中
System.out.println(user);
//做数据的响应,可以模拟查询数据库
user.setUsername("ahahhah");
user.setAge(45);
//数据响应
return user;
}
}
@RequestMapping("/fileupload1")
public String fileupload1(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("文件上传……");
//使用servlet组件完成文件上传
//指定文件上传的位置
String path = request.getSession().getServletContext().getRealPath("/uploads/");
//判断该 路径是否存在
File file = new File(path);
if (!file.exists()){
//创建该文件夹
file.mkdirs();
}
//解析request对象,获取到上传的文件项
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//解析request
List<FileItem> items = upload.parseRequest(request);
//遍历
for (FileItem item : items) {
//判断当前item是否是上传文件项
if (item.isFormField()){
//说明是普通的表单项
}else{
//说明是上传文件项
//获取到上传文件的名称
String filename = item.getName();
//把文件名称设置为唯一值
String uuid = UUID.randomUUID().toString().replace("-", "");
filename = uuid+filename;
//完成文件上传
item.write(new File(path,filename));
//删除临时文件
item.delete();
}
}
return "success";
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<br>
<h3>SpringMVC方式文件上传</h3>
<form action="user/fileupload2" method="post" enctype="multipart/form-data">
选择文件:<input type="file" name="upload" /> <br>
<input type="submit" value="上传" />
</form>
</body>
</html>
/**
* Spring MVC方式上传
* @param request
* @param upload
* @return
* @throws Exception
*/
@RequestMapping("/fileupload2")
public String fileupload2(HttpServletRequest request, MultipartFile upload) throws Exception {
System.out.println("Spring文件上传……");
//使用servlet组件完成文件上传
//指定文件上传的位置
String path = request.getSession().getServletContext().getRealPath("/uploads/");
//判断该 路径是否存在
File file = new File(path);
if (!file.exists()){
//创建该文件夹
file.mkdirs();
}
//说明是上传文件项
//获取到上传文件的名称
String filename = upload.getOriginalFilename();
//把文件名称设置为唯一值
String uuid = UUID.randomUUID().toString().replace("-", "");
filename = uuid+filename;
//完成文件上传
upload.transferTo(new File(path,filename));
return "success";
}
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.18.1</version>
</dependency> <dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.18.1</version>
</dependency>
/**
* 跨服务器文件上传
* @param upload
* @return
* @throws Exception
*/
@RequestMapping("/fileupload3")
public String fileupload3(MultipartFile upload) throws Exception {
System.out.println("跨服务器文件上传……");
//定义上传文件服务器的路径
String path = "http://localhost:9090/uploads/";//写加号就不需要拼了
//说明是上传文件项
//获取到上传文件的名称
String filename = upload.getOriginalFilename();
//把文件名称设置为唯一值
String uuid = UUID.randomUUID().toString().replace("-", "");
filename = uuid+filename;
//完成文件上传,跨服务器上传
//创建客户端对象
Client client = Client.create();
//和图片服务器进行连接
WebResource webResource = client.resource(path+filename);
//上传文件
webResource.put(upload.getBytes());
return "success";
}
package cn.itcast.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/testException")
public String testException() throws Exception{
System.out.println("testException执行了……");
//模拟异常
int i = 1 / 0;
return "success";
}
}
- 编写自定义异常类(提示信息)
package cn.itcast.exception;
/**
* 自定义异常类
*/
public class SysException extends Exception{
public SysException(String message) {
this.message = message;
}
//存储异常信息
private String message;
@Override
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
- 编写异常处理器
package cn.itcast.exception;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 异常处理器对象
*/
public class SysExceptionResolver implements HandlerExceptionResolver {
/**
* 处理异常的业务逻辑
* @param httpServletRequest
* @param httpServletResponse
* @param o 处理器对象
* @param ex 异常对象
* @return
*/
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception ex) {
//获取到异常对象
SysException e = null;
//判断ex是SysException类型的
if(ex instanceof SysException){
e = (SysException) ex;
}else{
e = new SysException("系统正在维护");
}
//创建ModelAndView对象
ModelAndView mv = new ModelAndView();
mv.addObject("errorMsg",e.getMessage());
mv.setViewName("error");
return mv;
}
}
- 配置异常处理器(跳转到友好提示页面)
<!--配置异常处理器对象-->
<bean id="sysExceptionResolver" class="cn.itcast.exception.SysExceptionResolver" />
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${errorMsg}
</body>
</html>
- 过滤器什么都能拦,拦截器只能拦controller
package cn.itcast.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/testInterceptor")
public String testInterceptor() throws Exception{
System.out.println("testInterceptor执行了……");
try {
//模拟异常
int i = 1 / 0;
} catch (Exception e) {
e.printStackTrace();//在控制台打印异常信息,保留
//向上抛出自定义异常信息
}
return "success";
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
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">
<!--配置拦截器-->
<mvc:interceptors>
<!--配置拦截器-->
<mvc:interceptor>
<!--要拦截的具体方法-->
<mvc:mapping path="/user/*"/>
<!--不要拦截的方法-->
<!--<mvc:exclude-mapping path=""/>-->
<!--配置拦截器对象-->
<bean class="cn.itcast.interceptor.MyInterceptor1"></bean>
</mvc:interceptor>
</mvc:interceptors>
<!--开启SpringMVC框架注解的支持-->
<mvc:annotation-driven/>
</beans>
package cn.itcast.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 自定义拦截器
*/
public class MyInterceptor1 implements HandlerInterceptor {
//jdk1.8之后,接口中可以对方法进行实现
/**
* 预处理controller方法执行前
* @param request
* @param response
* @param handler
* @return true放行,执行下一个拦截器;如果没有,执行controller中的方法
* false不放行
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("MyInterceptor1执行了");
return true;
}
}
SpringMVC02:返回值、json数据、文件上传、拦截器的更多相关文章
- struts文件上传拦截器分析
struts有默认的文件拦截器,一般配置maximumSize就可以了. 知道原理,我们可以写一个类继承它,实现自己的配置上传文件大小的方式. 然后细究页面上传文件的时候,发现了一些问题. act ...
- SpringMVC——返回JSON数据&&文件上传下载
--------------------------------------------返回JSON数据------------------------------------------------ ...
- SpringMVC 文件上传&拦截器&异常处理
文件上传 Spring MVC 为文件上传提供了直接的支持,这种支持是通过即插即用的 MultipartResolver 实现的.Spring 用 Jakarta Commons FileUpload ...
- struts文件上传拦截器中参数的配置(maximumSize,allowedTypes ,allowedExtensions)问题
<interceptor-ref name="fileUpload"> <param name="allowedTypes">image ...
- struts文件上传拦截器maximumSize设置文件大小不起作用
<interceptor-ref name="fileUpload"> <param name="allowedTypes ...
- 转:【专题十一】实现一个基于FTP协议的程序——文件上传下载器
引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...
- 专题十一:实现一个基于FTP协议的程序——文件上传下载器
引言: 在这个专题将为大家揭开下FTP这个协议的面纱,其实学习知识和生活中的例子都是很相通的,就拿这个专题来说,要了解FTP协议然后根据FTP协议实现一个文件下载器,就和和追MM是差不多的过程的,相信 ...
- springMVC整理04--文件上传 & 拦截器 & 异常处理
1. 文件上传 SpringMVC 的文件上传非常简便,首先导入文件上传依赖的 jar: <!-- 文件上传所依赖的 jar 包 --> <dependency> <g ...
- maven中的pom配置文件一——spring,mybatis,oracle,jstl,json,文件上传
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...
- SpringMvc(四)- 下载,上传,拦截器
1.图片下载 图片下载:将服务器端的文件以流的形式写到客户端,通过浏览器保存到本地,实现下载: 1.1 图片下载步骤 1.通过session获取上下文对象(session.getServletCont ...
随机推荐
- Kibana管理
这里是用来管理您的 kibana 运行时配置的地方,包括初始化配置和后续的索引模式配置.高级设置等.您可以调整 kibana 自身的行为,也可以编辑您通过 kibana 保存的查询.视图.仪表板等各种 ...
- 延申三大问题中的第一个问题处理---原先shell脚本中启动jar文件命令的配置,附加参数等
经过一系列的试错,最终采用的解决办法如下: 采用的配置文件 附加的启动参数 或者把这些都给统一添加到ConfigMap中
- img和div之间有间隙的原因及解决方法
div 中 存在 img标签,由于img标签的 display:inline-block 属性. #####display:inline-block布局的元素在chrome下会出现几像素的间隙,原因是 ...
- 15_abstract,static,final
一. abstract 1. 抽象类 被abstract修饰的类,称为抽象类 抽象类意为不够完整的类.不够具体的类 抽象类对象无法独立存在,即不能new对象,但可以声明引用 作用: 可被子类继承,提供 ...
- 搞透 IOC,Spring IOC 看这篇就够了!
IOC与AOP属于Spring的核心内容,如果想掌握好Spring你肯定需要对IOC有足够的了解 @mikechen IOC的定义 IOC是Inversion of Control的缩写,多数书籍翻译 ...
- C++面向对象编程之point-like classes的智能指针和迭代器、function-like classes即仿函数
1.智能指针 智能指针里面包含其他指针的形式和 委托 感觉比较像; 智能指针一定都需要重载 * 和 -> 操作符 ; 这个符号它作用后还能再继续作用下去; 2.迭代器: 这里主要关注 * 和 - ...
- mac通过docker一键部署Nexus3
目录 mac通过docker一键部署Nexus3 一.前言 二.系统配置 三.安装步骤 1.Dockerhub查看镜像地址 2.一键安装 2.1.克隆脚本 2.2.安装程序 2.2.1.程序安装详情 ...
- ubuntu20.04详细安装教程
1.运行虚拟机,加载一段时间后弹出"安装"界面.语言栏倒数第三个是中文.点击[安装 Ubuntu]. 2.键盘布局,[继续] 3.更新和其他软件,取消[安装Ubuntu时下载更新] ...
- 【python】Ubuntu中多条命令的运行
在模型训练时,往往需要消融实验,通常都是在一个程序运行结束后才再次手动运行下一个,不及时在电脑前可能无端浪费时间,因此需要让程序自动一个接一个去执行.受此启发,特了解了Ubuntu中多命令运行的内容. ...
- LcdTools如何实现PX01读取SD中BIN文件并通过端口发出去
在实际应用中我们会碰到需要下载很大容量固件,比如TP固件几百K大小BIN文件,这种情况下用LcdTools写初始化代码的方式实现就不大现实:此时我们可以通过PX01 SD来实现. 首先,把需要操作的B ...