请求相关操作
1@RequestMapping
@RequestMapping * 作用:用来限制请求的 * 位置:可以标记在方法上,也可以标记在类上 * 属性: * value:用来限制请求url的,字符串数组类型 * 支持通配符: * ?:表示任意一个字符 * *:任意多个任意字符 * **:任意多层字符 * method:用来限制请求方式的,RequestMethod数组类型 * 默认支持四种请求方式,如果我们指定了某种请求方式,那么前端再给后端发送请求的时候,就必须按着指定的请求方式发送 * GET: 查询数据库资源 * POST: 向数据库中添加数据 * PUT: 修改数据库中的资源 * DELETE:删除数据库中的资源 *
* 如何发送put或者delete请求? * 1.在web.xml文件中配置一个HiddenHttpMethodFilter * 2.必须发送post请求 * 3.必须携带一个键值对,键为:_method,值为:put或者delete * 补充:rest请求风格:建议使用请求方式表示对某种资源进行何种方式的处理,规范
<filter> <filter-name>HiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping> <filter-name>HiddenHttpMethodFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="hello" method="post"> <input type="hidden" name="_method" value="delete"> <input type="submit" value="提交"> </form> </body>
</html>
@RequestMapping(value= {"/hello"},method= {RequestMethod.DELETE}) public String go() { return "success"; }
* params:用来限制请求参数的,字符串数组类型 * params={"username"}:请求参数中必须携带一个键为username的参数 * params={"!username"}:请求参数中不能携带键为username的参数 * params={"username=123"}:请求参数中必须携带一个键为username,值为123的参数 * params={"username!=123"}:请求参数中必须携带一个键为username,值不能为123的参数 * params={"username=123","password"}:请求参数中必须携带一个键为username,值为123的参数,并且还得携带一个键为password的参数 * * headers:用来限制请求头的* ,字符串数组类型,使用类似于params属性 * headers={"Connection"}:请求头中必须携带一个键为username的参数 * headers={"!Connection"} * headers={"Connection=123"}: * headers={"Connection!=123"}: * @RequestMapping注解的四个属性是与(&)的关系,必须同时满足
举例:
2。@PathVariable
作用:将路径占位符信息绑定到目标方法的参数上
位置:标记在controller层目标方法的参数上
属性:value属性,要求value值一定要和路径占位符保持一致
@RequestMapping(value="/test01/{id}",method=RequestMethod.GET) public String testPathVariable(@PathVariable(value="id") Integer sid) { System.out.println(sid); return "success";
3.@RequestParam
作用:获取请求参数的
位置:标记在controller层方法的参数上
属性:Value,Required ,defaultValue:
当controller层目标方法的参数名和表单的name值保持一致的时候,@RequestParam注解可以省略。
4 @RequestHeader
作用:获取请求头信息
位置:标注在目标controller方法的参数上
属性:使用类似于@RequestParam注解
@RequestMapping("/testRequestHeader") public String testRequestHeader(@RequestHeader(value="Cookie",required = false,defaultValue = "dasd") String header) { System.out.println("testRequestHeader。。。。。。。。。。"+header); return "success"; }
5.@CookieValue
获取某个cookie的值
之前的遍历Cookie[] cookie才能拿到某个值
@RequestMapping("/hello") public String testCookie(@CookieValue(value="JSESSIONID",required=true,defaultValue="abcde") String cookie){ System.out.println("cookie信息为"+ cookie); return "success"; }
区分:
原生API
SringMVC可以直接在参数上写原生API
常用的:
HttpServletRequest HttpServletResponse HttpSession java.security.principal: htps安全相关 Locale: 国际化相关的区域信息对象 InputStream: ServletInputStream inputStream = request.getInputStream(); OutputStream : ServletOutputStream outputStream = response.getOutputStream(); Reader : BufferedReader reader = request.getReader(); Writer : PrintWriter writer = response.getWriter();
处理请求乱码的方式
GET请求乱码
Tomcat7.x及以下:
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080"
Tomcat8.x及以上:tomcat自己解决了。
POST请求乱码:
在web.xml文件中配置一个ChracterEncodingFilter
支持pojo对象
import java.util.Arrays; public class User { private String username; private int sex; private String[] hobby; private Address address; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public int getSex() { return sex; } public void setSex(int sex) { this.sex = sex; } public String[] getHobby() { return hobby; } public void setHobby(String[] hobby) { this.hobby = hobby; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } @Override public String toString() { return "User [username=" + username + ", sex=" + sex + ", hobby=" + Arrays.toString(hobby) + ", address=" + address + "]"; } }
public class Address { private String provice; private String city; private String town; public String getProvice() { return provice; } public void setProvice(String provice) { this.provice = provice; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getTown() { return town; } public void setTown(String town) { this.town = town; } @Override public String toString() { return "Address [provice=" + provice + ", city=" + city + ", town=" + town + "]"; }
<form action="test03" method="post"> <!-- <input type="hidden" name="_method" value="delete"> --> 姓名:<input type="text" name="username"><br> 性别:<input type="radio" name="sex" value="1">男 <input type="radio" name="sex" value="0">女 <br> 爱好:<input type="checkbox" name="hobby" value="篮球">篮球 <input type="checkbox" name="hobby" value="逛街">逛街 <input type="checkbox" name="hobby" value="看电影">看电影 <input type="checkbox" name="hobby" value="玩游戏">玩游戏<br> 住址:省<input type="text" name="address.provice"> 市<input type="text" name="address.city"> 县<input type="text" name="address.town"><br> <input type="submit" value="提交"> </form>
@RequestMapping("/test03") public String testPojo(User user) { System.out.println(user); return "success"; }
mvc:view-controller
响应相关操作
同步请求响应
同步请求的返回值类型
同步请求的返回值类型 同步请求的返回值类型: * String:表示逻辑视图名 * ModelAndView: * void:一般不会使用
如何将控制层的数据携带到页面上
1.ModelAndView作为方法的返回值
@RequestMapping("/test04") public ModelAndView testMAV() { ModelAndView mv = new ModelAndView(); mv.setViewName("success"); mv.addObject("msg", "ModelAndView"); return mv; }
2.在controller层的方法参数上使用Map,Model,ModelMap类型的参数,返回值是String类型
@RequestMapping("/test05") public String testMap(Map<String,Object> map) { map.put("name", "张三"); map.put("age", 23); map.put("sex", "男"); return "success"; } @RequestMapping("/test06") public String testModel(Model model) { model.addAttribute("name", "张三"); model.addAttribute("age", 23); model.addAttribute("sex", "男"); return "success"; } @RequestMapping("test07") public String testModelMap(ModelMap modelMap) { modelMap.addAttribute("name", "张三"); modelMap.addAttribute("age", 23); modelMap.addAttribute("sex", "男"); return "success"; }
异步请求响应
如何使用静态资源文件
静态资源文件指的是:html、css、js、img,这些不依赖于tomcat,就能直接查看的资源。
如何返回json数据
在controller层的方法上加@ResponseBody注解
@RequestMapping("/json") @ResponseBody public Map<String,Object> testJson(){ Map<String,Object> map = new HashMap<String,Object> (); map.put("username", "王亮"); map.put("age", 23); return map; }
Springmvc.xml文件中配置mvc:annotation-driven
前后端实现异步交互
public class Book { private int bid; private String bname; private String author; private double price; private String type; public Book() { super(); // TODO Auto-generated constructor stub } public Book(int bid, String bname, String author, double price, String type) { super(); this.bid = bid; this.bname = bname; this.author = author; this.price = price; this.type = type; } public int getBid() { return bid; } public void setBid(int bid) { this.bid = bid; } public String getBname() { return bname; } public void setBname(String bname) { this.bname = bname; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public String getType() { return type; } public void setType(String type) { this.type = type; } @Override public String toString() { return "Book [bid=" + bid + ", bname=" + bname + ", author=" + author + ", price=" + price + ", type=" + type + "]"; } }
@RequestMapping("/list") @ResponseBody public List testJson2() { List<Book> list = new ArrayList<Book>(); list.add(new Book(1, "三国演义", "吴承恩", 50.7, "名著")); list.add(new Book(2, "斗破苍穹", "土豆", 20.0, "玄幻")); list.add(new Book(3, "三生三世", "玉米", 34.4, "古装")); list.add(new Book(4, "悲伤逆流成河", "柿子", 31.7, "悲剧")); return list; }
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript" src="${pageContext.request.contextPath }/static/js/jquery-1.7.2.js"></script> </head> <body> <button id="btn">点击查看</button> <span id="sp"></span> <script type="text/javascript"> $("#btn").click(function(){ $.ajax({ type:"GET", url:"${pageContext.request.contextPath}/list", success:function(obj){ $("#sp").html("<table id='table-list' border='2px' align='center' width='70%'>" +"<tr>" +"<th>编号</th>" +"<th>书名</th>" +"<th>作者</th>" +"<th>价格</th>" +"<th>类型</th>" +"<th>操作</th>" +"</tr>" +"</table>"); $(obj).each(function(index,item){ var tr = "<tr align='center'><td>"+item.bid+"</td><td>"+item.bname+"</td><td>"+item.author+"</td><td>"+item.price+"</td><td>"+item.type+"</td><td><a href=''>修改</a> <a href=''>删除</a></td></tr>" $("#table-list").append(tr); }) } }) }) </script> </body> </html>