@[toc]
一、 数据回写
数据回写:在做数据更新的时候服务端查询的数据自动填充到表单中。
1.1 、默认方式
controlller
@RequestMapping("/fun")
public String fun(String bookName,String author,Integer publicYear,Model model){
if ("xx".equals(bookName)&&"qw".equals(author)&&"2019".equals(publicYear)) {
return "/book.jsp";
}
model.addAttribute("bookName", bookName);
model.addAttribute("author", author);
model.addAttribute("publicYear", publicYear);
return "forward:/book.jsp";
}
页面中的回写
<form action="add" method="post">
书名:<input type="text" name="bookName" value="${book.bookName}"><br>
作者:<input type="text" name="author" value="${book.author}"><br>
出版年份<input type="text" name="publicYear" value="${book.publicYear}"><br>
<input type="submit" value="提交">
</form>
model
/**
*
* @param book
* 会自动保存在Model对象中 key是 book
* m.addAttribute("book", book);
* @return
*/
@RequestMapping("/update")
public String update(Book book) {
System.out.println(book);
book.setBookName("ps");
return "/book.jsp";
}
3.@ModelAttribute注解实现
3.1 修改参数回显变量名
@RequestMapping("/add")
public String add(@ModelAttribute("bk")Book book) {
System.out.println(book);
book.setBookName("abc");
return "/book.jsp";
}
页面
<form action="add" method="post">
书名:<input type="text" name="bookName" value="${bk.bookName}"><br>
作者:<input type="text" name="author" value="${bk.author}"><br>
出版年份<input type="text" name="publicYear" value="${bk.publicYear}"><br>
<input type="submit" value="提交">
</form>
配置全局变量名
@RequestMapping("/add")
public String add(@ModelAttribute("bk")Book book) {
System.out.println(book);
book.setBookName("abc");
return "/book.jsp";
}
/**
* 每个方法都会方法的数据
*
* @return
*/
@ModelAttribute("list")
public List<String> getList() {
return Arrays.asList("aa", "bb", "cc");
}
${list}<br>
<form action="add" method="post">
书名:<input type="text" name="bookName" value="${bk.bookName}"><br>
作者:<input type="text" name="author" value="${bk.author}"><br>
出版年份<input type="text" name="publicYear" value="${bk.publicYear}"><br>
<input type="submit" value="提交">
</form>
异常处理
项目中的异常需要统一处理,正常情况下,需要提前准备好一个错误页面,当项目出错了,将该页面展示给用户。 步骤:
定义异常处理器
package com.sxt.resolver;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
/**
* 全局异常处理器
* @author Administrator
*
*/
@Component
public class GlobalExecptionResolver implements HandlerExceptionResolver {
/**
* 全局异常处理的方法
* return 返回null不执行,按照没有拦截的方式处理
*/
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response,Object handler,
Exception ex) {
System.out.println("异常发生了");
ModelAndView m=new ModelAndView();
m.setViewName("/error.jsp");
return m;
}
}
需要处理的异常的地方抛出异常
测试
JSON数据交互
jackson处理
jar包
@Controller
public class SpringController {
@RequestMapping("/fun1")
@ResponseBody
public Book fun1(){
Book b=new Book();
b.setBookId(1001);
b.setBookName("ps");
b.setAuthor("sp");
return b;
}
@RequestMapping("/fun2")
@ResponseBody
public String[] fun2(){
return new String[]{"a","b","c"};
}
@RequestMapping("/fun3")
@ResponseBody
public List<String> fun3(){
return Arrays.asList("bb","aa","cc");
}
@RequestMapping("/fun4")
@ResponseBody
public Map<String, Object> fun4(){
Map<String, Object>map=new HashMap<>();
Book b=new Book();
b.setBookId(1001);
b.setBookName("ps");
b.setAuthor("sp");
map.put("b1", b);
Book b2=new Book();
b2.setBookId(1001);
b2.setBookName("ps");
b2.setAuthor("sp");
map.put("b2", b2);
map.put("total", 2);
return map;
}
}
接收JSON数据
导入juery文件
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/juery.min.js"></script>
</head>
<body>
<input type="button" value="提交JSON数据" onclick="fun1();">
<script type="text/javascript">
function fun1() {
$.ajax({
type : 'POST',
url : "test2",
contentType : "application/json",//如果想以json格式把数据提交到后台的话,这个必须有,否则只会当做表单提交
data : JSON.stringify({
"bookId" : "2019",
"bookName" : "ps"
}),//JSON.stringify()必须有,否则只会当做表单的格式提交
dataType : "json",//期待返回的数据类型
success : function(data) {
alert("success:" + data);
},
error : function(data) {
alert("error" + data);
}
});
}
</script>
</body>
</html>
fastjson数据交互
配置文件(注册fastjson)
<!-- 开启扫描 -->
<context:component-scan base-package="com.sxt.*"/>
<!-- 开启SpringMVC注解的方式 -->
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"></bean>
</mvc:message-converters>
</mvc:annotation-driven>
处理中文乱码
在web.xml文件中配置
<!-- spring框架提供的字符集过滤器 -->
<!-- spring Web MVC框架提供了org.springframework.web.filter.CharacterEncodingFilter用于解决POST方式造成的中文乱码问题 -->
<filter>
<filter-name>encodingFilter</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>
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>