Spring mvc的ajax验证,处理json请求
前台提交 传递单个值
function checkName() {
$.ajax({
type: "POST",
url: "${pageContext.request.contextPath }/user/checkName.action",
dataType: "json",
data : {
"name" : $("#name").val()
},
success: function(result){
if(result.flag>0){
$("#name").focus();
$("#msg").html(result.msg);
}else{
$("#msg").html("");
}
}
});
}
传递多个值
前台
alert($("#loginForm").serialize());数据格式不是json格式,是key=value
function checkName() {
$.ajax({
type: "POST",
url: "${pageContext.request.contextPath }/user/checkName.action",
dataType: "json",
data: $("#loginForm").serialize(),
success: function(result){
if(result.flag>0){
$("#name").focus();
$("#msg").html(result.msg);
}else{
$("#msg").html("");
}
}
});
}
@RequestMapping(value = "/checkName")
public @ResponseBody Result checkName(User user, HttpServletRequest request){
Result result = new Result();
if(user.getName().equals("wyg")||user.getName().equals("jinc")){
result.setFlag(1);
result.setMsg("该用户已经注册");
}else{
result.setFlag(0);
}
return result;
}
以json方式传递多个数据
前台 序列化成json格式
function checkName() {
alert(JSON.stringify($('#loginForm').serializeJSON()));
$.ajax({
type: "POST",
url: "${pageContext.request.contextPath }/user/checkName.action",
contentType:'application/json;charset=utf-8',
data:JSON.stringify($('#loginForm').serializeJSON()),//json串
success: function(result){
if(result.flag>0){
$("#name").focus();
$("#msg").html(result.msg);
}else{
$("#msg").html("");
}
}
});
}
后台
@RequestMapping(value = "/checkName")
public @ResponseBody Result checkName(@RequestBody User user, HttpServletRequest request){
Result result = new Result();
if(user.getName().equals("wyg")||user.getName().equals("jinc")){
result.setFlag(1);
result.setMsg("该用户已经注册");
}else{
result.setFlag(0);
}
return result;
}
Json字符串和对象互换
var msg = JSON.stringify($('#loginForm').serializeJSON());
var obj = JSON.parse(msg);
alert(obj.name);
var msg1 = JSON.stringify(obj);
alert(msg1);
Spring mvc的文件上传
RequestParam:映射请求参数类型
Maven工程pom文件添加commons-fileupload依赖包
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
</dependency>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>${commons-net.version}</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons-fileupload.version}</version>
</dependency>
Spring mvc添加文件上传解析器
<!-- 多媒体解析器 -->
<!-- 配置文件上传解析器 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设定默认编码 -->
<property name="defaultEncoding" value="UTF-8"></property>
<!-- 设定文件上传的最大值5MB,5*1024*1024 -->
<property name="maxUploadSize" value="5242880"></property>
</bean>
Jsp页面form表单设置enctype参数 修改成post方式
<form id="loginForm" name="loginForm" action="/user/add.action" method="post" enctype="multipart/form-data" >
name:<input type="text" name="name" id="name" onblur="checkName()"/><br/>
pwd:<input type="text" name="pwd"/><br/>
birthday:<input type="text" name="birthday"/><br/>
pic:<input type="file" name="pic"/><br/>
<input type="submit" value="注册" />
</form>
Controller层通过RequestParam参数获取文件上传的信息
RequestParam:设置参数是否必须要 默认值 请求参数和获取参数之间的对应关系
RequestMapping还可以限定请求的具体方法
@RequestMapping(value = "/add",method={RequestMethod.POST})
public String add(@RequestParam(value = "pic", required = false) MultipartFile file, User user, HttpServletRequest request) throws Exception{
if (file != null && file.getBytes().length > 0) {
// 先上传文件
String path = request.getSession().getServletContext()
.getRealPath("upload");
path = URLDecoder.decode(path, "UTF-8");
String fileName = System.currentTimeMillis()+file.getOriginalFilename();
System.out.println(path);
File targetFile = new File(path, fileName);
if (!targetFile.exists()) {
targetFile.mkdirs();
}
// 保存
try {
file.transferTo(targetFile);
} catch (Exception e) {
e.printStackTrace();
}
}
int flag = userService.add(user);
if(flag>0){
return "redirect:/user/queryAll.action";
}else{
return "error";
}
}
Spring mvc中restful参数处理:微服务架构 单体式架构
以前传递参数 add.action?name=value&pwd=value
Rest风格 add/wang/12345.action
前台传递参数
var url = "${pageContext.request.contextPath }/user/addByRestful/"+$("#name").val()+"/"+$("#pwd").val()+"/"+$("#birthday").val()+".action";
$.ajax({
type: "POST",
url: url
});
后台java类
@RequestMapping(value = "/addByRestful/{name}/{pwd}/{birthday}")
public String addByRestful(@PathVariable String name,@PathVariable String pwd,@PathVariable Date birthday, HttpServletRequest request) throws Exception{
User user = new User();
user.setName(name);
user.setPwd(pwd);
user.setBirthday(birthday);
int flag = userService.add(user);
if(flag>0){
return "redirect:/user/queryAll.action";
}else{
return "error";
}
}
Spring处理全局异常
Web处理异常
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>
Spring mvc方式
定义异常处理类
public class ExceptionHandler implements HandlerExceptionResolver {
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
ModelAndView mv = new ModelAndView();
mv.setViewName("error");
return mv;
}
}
在mvc容器里面注入异常类
<bean id="exceptionResolver" class="com.wanho.exceptions.ExceptionHandler"/>
Spring拦截器:
用户如果已经在session作用域存在,可以查看所有人信息
如果不存在,请登录或注册
1、写拦截器类
public class PermissionInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
User loginUser = (User)request.getSession().getAttribute("user");
if(loginUser!=null){
return true;
}else{
response.sendRedirect(request.getContextPath()+"/index.jsp");
return false;
}
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
2、在xml文件注册拦截器
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<mvc:exclude-mapping path="/**/add.action" />
<bean class="com.wanho.interceptor.PermissionInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
拦截器和过滤器的差异?
拦截器只能针对spring的Handler对象(业务控制器),可以精细化到方法一级
过滤器:可以针对所有请求的资源,也可以通过url地址来分析
Spring定时器: