SpringMVC02课堂笔记

请求相关操作

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注解可以省略。

 

@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>&nbsp;&nbsp;<a href=''>删除</a></td></tr>"
                        $("#table-list").append(tr);
                    })
                }
            })
        })

</script>
</body>
</html>

猜你喜欢

转载自www.cnblogs.com/bai3535/p/12074893.html
今日推荐