JavaEE学习日志持续更新----> 必看!JavaEE学习路线(文章总汇)
一、引入jQuery
二、引入静态资源后,给js静态资源放行(非常重要)
把js下的静态资源映射到js目录下
<mvc:resources mapping="/js/*" location="/js/">mvc:resources>
三、页面中发送ajax请求
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery.min.js">script>
<script type="text/javascript">
function execute() {
alert("执行");
$.ajax({
url:"${pageContext.request.contextPath}/user/testRequestJson",
data:{"username":"zhangsan","age":20},
type:"post",
dataType:"json",
success:function(data) {
}
});
}
script>
四、服务器接收数据并打印
方式一:
@Controller
@RequestMapping("/user")
@SessionAttributes({"username","password"})
public class UserController {
/**
* 请求数据转换为json格式
*/
@RequestMapping("/testRequestJson")
public void testRequestJson(String username,Integer age){
System.out.println(username);
System.out.println(age);
}
}
方式二:把所有参数转化为字符串
首先引入依赖
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-coreartifactId>
<version>2.9.0version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
<version>2.9.0version>
dependency>
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-annotationsartifactId>
<version>2.9.0version>
dependency>
在形参中添加@RequestBody注解
/**
* @RequestBody 可以把所有的参数转换为字符串
* @param body
*/
@RequestMapping("/testRequestJson2")
public void testRequestJson2(@RequestBody String body){
System.out.println(body);
}
服务器回写JSON数据:
使用注解@ResponseBody
标记了该注解的方法,数据会以流的方式返回
@RequestMapping("/testResponseBody")
@ResponseBody
public List<User> testResponseBody(){
//准备数据
List<User> userList = new ArrayList<>();
User user = new User();
user.setUsername("张三");
user.setPassword("123");
user.setId(2);
User user2 = new User();
user2.setUsername("张三2");
user2.setPassword("123");
user2.setId(3);
userList.add(user);
userList.add(user2);
return userList;
}
页面接收
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery.min.js">script>
<script type="text/javascript">
function execute() {
alert("执行");
$.ajax({
url:"${pageContext.request.contextPath}/user/testResponseBody",
data:{},
type:"post",
dataType:"json",
success:function(data) {
alert(data[0].username);
alert(data[1].username);
}
});
}
script>
一、引入依赖fileupload
,会自动依赖commons-io
<dependency>
<groupId>commons-fileuploadgroupId>
<artifactId>commons-fileuploadartifactId>
<version>1.3.1version>
dependency>
二、页面配置
上传文件的表单前提:
post
multipart/form-data
,多功能的表单数据type=file
的表单元素<body>
<form action="${pageContext.request.contextPath}/user/upload" method="post" enctype="multipart/form-data">
<input type="text" name="username"><br>
<input type="file" name="upload"><br>
<input type="submit" value="上传">
form>
body>
三、spring-mvc.xml配置:可以设置上传文件的限制
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize">
<value>5242880value>
property>
bean>
四、文件上传
考虑两点:
package com.itheima.controller;
import com.itheima.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.support.SessionStatus;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Member;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@Controller
@RequestMapping("/user")
@SessionAttributes({"username","password"})
public class UserController {
/**
* 声明参数变量,接收数据
*/
@RequestMapping("/upload")
public String upload(String username, MultipartFile upload, HttpServletRequest request){
//System.out.println(upload);
//1.目标路径
//获取项目运行的路径
String realPath = request.getSession().getServletContext().getRealPath("/upload");
//判断该路径是否存在
File realFile = new File(realPath);
if (!realFile.exists()){
realFile.mkdirs();
}
//2.获取唯一的文件名(包含扩展名)
String uuid = UUID.randomUUID().toString().replace("-", "");
//获取扩展名:获取文件名
//获取真实的文件名
String originalFilename = upload.getOriginalFilename();
//截取字符串,获取文件扩展名
String extendName = originalFilename.substring(originalFilename.lastIndexOf("."));
//唯一的文件名
String fileName = uuid+extendName;
//文件上传transferTo,执行文件上传
//参数file:文件路径
try {
upload.transferTo(new File(realFile,fileName));
} catch (IOException e) {
e.printStackTrace();
}
return "show";
}
}
一、引入jersey服务器依赖
<dependency>
<groupId>com.sun.jerseygroupId>
<artifactId>jersey-coreartifactId>
<version>1.18.1version>
dependency>
<dependency>
<groupId>com.sun.jerseygroupId>
<artifactId>jersey-clientartifactId>
<version>1.18.1version>
dependency>
二、修改tomcat配置
tomcat默认不能跨服上传,在tomcat/conf/web.xml
中添加这句话
<init-param>
<param-name>readonlyparam-name>
<param-value>falseparam-value>
init-param>
添加之后
<servlet>
<servlet-name>defaultservlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServletservlet-class>
<init-param>
<param-name>debugparam-name>
<param-value>0param-value>
init-param>
<init-param>
<param-name>readonlyparam-name>
<param-value>falseparam-value>
init-param>
<init-param>
<param-name>listingsparam-name>
<param-value>falseparam-value>
init-param>
<load-on-startup>1load-on-startup>
servlet>
三、配置图片服务器
四、跨服上传文件
<form action="${pageContext.request.contextPath}/user/uploadServer" method="post" enctype="multipart/form-data">
<input type="text" name="username"><br>
<input type="file" name="upload"><br>
<input type="submit" value="上传">
form>
@RequestMapping("/uploadServer")
public String uploadServer(MultipartFile upload){
//System.out.println(upload);
//1.配置图片服务器路径
String serverPath = "http://localhost:9090/img_server/upload/";
//2.获取唯一的文件名(包含扩展名)
String uuid = UUID.randomUUID().toString().replace("-", "");
//获取扩展名:获取文件名
//获取真实的文件名
String originalFilename = upload.getOriginalFilename();
//截取字符串,获取文件扩展名
String extendName = originalFilename.substring(originalFilename.lastIndexOf("."));
//唯一的文件名
String fileName = uuid+extendName;
System.out.println(fileName);
//跨服上传
//获取jersey服务器客户端
Client client = Client.create();
//配置上传资源路径的资源对象
WebResource resource = client.resource(serverPath + fileName);
//上传
//参数一:资源的类型
//参数二:文件的字节内容
try {
resource.put(String.class,upload.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
return "show";
}
一、自定义异常
package com.itheima.exception;
public class CustomException extends Exception {
private String message;
public CustomException(String message) {
super(message);
this.message = message;
}
@Override
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
二、定义异常的统一处理对象:实现HandlerExceptionResolver接口
注意:该对象需要被创建
package com.itheima.exception;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 异常解析器
*/
//创建该类对象
@Component
public class MyExceptionResolver implements HandlerExceptionResolver {
//解析异常
/**
*
* @param httpServletRequest
* @param httpServletResponse
* @param o
* @param e 其他模块传递过来的异常对象
* @return
*/
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
ModelAndView modelAndView = new ModelAndView();
//添加数据
if(e instanceof CustomException){
CustomException customException = (CustomException)e;
modelAndView.addObject("message",customException.getMessage());
}else {
modelAndView.addObject("message","系统发送错误,请联系管理员!!!");
}
//指定页面
modelAndView.setViewName("error");
return modelAndView;
}
}
三、错误页面
<%--
Created by IntelliJ IDEA.
User: admin
Date: 2020/5/10
Time: 17:38
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${message}
</body>
</html>