总结了一些springmvc的一些重点知识,简单易懂01

  • 检查不细心错误:

1.database.properties          查看数据库名称是否对应
2.applicationContext.xml      查看mapper.xml映射文件
3.PersonMapper.xml            查看映射namespace="cn.bdqn.dxp.mapper.PersonMapper" 对应mapper层
4.sellect                                查看resultType="cn.bdqn.dxp.entity.Person"       对应实体
5.insert delete update           查看parameterType="cn.bdqn.dxp.entity.Person"      对应实体

  • 一.基本类型,包装类型的绑定
  1. A.基本数据类型           (Int)不可以为null
  2. B.包装类型                  (Integer)可以为空
  • 二.绝对路径

${pageContext.request.contextPath}用于解决使用相对路径时出现的问题,它的作用是取出所部署项目的名字。
绝对路径:<img src="/项目名称/images/front/xnw3.jpg"/>
相对路径:<img src="images/front/xnw3.jpg"/>

  • 三.mvc配置映射路径问题

指定springmvc配置文件的路径,如果要省略,必须放到 默认路径:
/WEB_INF/springDispatcherServlet-servlet.xml
/WEB_INF/servletname的值-servlet.xml

映射是 去匹配@RequestMapping注解,可以和方法名,类名不一致
通过method指定  请求方式(get post delete put)查 增 删 改
@RequestMapping(value = "/welcome",method = RequestMethod.POST)//映射,默认请求是get

  • 四.参数使用

params = {"name2=zs","age!=23","!=height"}
name2:必须有name="name2"参数

age!=23:

     a.如果有age则age的值不能是23,
     b.!=23不传参数age可以直接跳转

height:     不能有height否则报错

  • ant风格

          <!--ant风格 ,*  代表任意目录-->
          <!--ant风格, ?代表单个字符-->

<a href="/welcome3/asdasasdasd/test">springmvc  /welcome3/**/test</a>
<a href="/welcome4/a1c/test">springmvc  /welcome4/a?c/test</a>

  • REST风格:软件编程风格

Springmvc: GET POST DELETE PUT 
                      查      增       删        改
普通浏览器 只支持get post方式;其他请求方式 如delete put请求是通过(过滤器)加入的

  • HiddenHttpMenthodFilter

    请求方式之前是post,get不用管

    过滤的条件:

    1.type="hidden"隐藏域
    2. name="_method"
    满足这2个条件,进行拦截
    3. 如果value="delete或put"

     请求变成delete或put

    <input type="hidden" name="_menthod" value="delete或put"/>

  • 1.springmvc实现过滤器的支持

    <!--过滤器:给普通浏览器增加put|delete请求方式-->
    <filter>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>HiddenHttpMethodFilter</filter-name>
        <!--mvc为/,过滤器为/*-->
        <url-pattern>/*</url-pattern>
    </filter-mapping>

  • 2.表单

    <!--过滤器,删,必须加隐藏域-->
<form action="/testRest/1234" method="post">
    <input type="hidden" name="_method" value="DELETE">
    <input type="submit" value="删">
</form>
    a.必须是post方式
    b.通过隐藏域   的value值 设置实际的请求方式 DELETE或PUT
    c.控制器

  • 通过@PathVariable获取动态参数

@RequestMapping(value = "/testRest/{id}", method = RequestMethod.POST)
    public String testPost(@PathVariable("id") Integer id) {
        System.out.println("post:增" + id);
        //Service层实现  真正的增
        return "/view/success";//默认使用的是转发,不带数据,速度比较快
    }

  • 3.通过      RequestMethod.DELETE   匹配具体请求方式

当映射名相同时@RequestMapping(value = "/testRest"),可以通过method指定不同的请求。

过滤器中 处理put或delete请求的部分源码:
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        HttpServletRequest requestToUse = request;
        if ("POST".equals(request.getMethod()) && request.getAttribute("javax.servlet.error.exception") == null) {
            String paramValue = request.getParameter(this.methodParam);
            if (StringUtils.hasLength(paramValue)) {
                requestToUse = new HiddenHttpMethodFilter.HttpMethodRequestWrapper(request, paramValue);
            }
        }

        filterChain.doFilter((ServletRequest)requestToUse, response);
    }
原始请求:request,改请求默认只支持get  post  header
如果是“POST” 并且有隐藏域  <input type="hidden" name="_method" value="DELETE">
过滤器  将原始的请求 request加入新的方式,并将原始请求  转为requestToUse请求
最会将requestToUse  放入   请求链中,  后续再使用request时   实际就使用改造后的requestToUse

  • @RequestParam传参数

(@RequestParam("uname") String name,@RequestParam(value = "uage", required = false, defaultValue = "20") Integer age)

@RequestParam("uname"):接收前台传递的值,等价于request.getParmeter(""uname)

required=false:该属性  不是必须的。
defultValue=“23”:默 认值是23,这里注意值必须加“”(双引号)

  • 获取请求头信息     @RequestHeader

     * 拿到请求头信息,通过@RequestHeader("Accept-Language") String al  
         * Accept-Encoding  请求头
          * 拿到 zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2


 

  • @CookieValue

 (前置知识:服务器在接收服务端第一次请求时,会给客户端分配一个session(该session包含一个sesessionId)),并且服务端会在第一次响应客户端时,将该sessionId赋值给    JSESSIONID 并传递给客户端的cookie中)
1.session(sessionId)→Cookie(JSESSIONID)
2.最后Cookie(JSESSIONID)放在客户端,

  • 总结:

springMVC处理各种参数的流程/逻辑:
请求:前端发送请求a->@RequestMapping("a")
处理请求中的参数xyz:
    @RequestMapping(“a”)
    public string aa(@Xxx注解(“args”)args)
    {

    }
         

使用(实体类Student)对象接收请求参数

SpringMVC中使用原生态Servlet API :HttpServletRequest:直接将  servlet-api 中的类、接口等写在SrpingMVC的接口中即可。
@RequestMapping("/testServletAPI")
    public String testServletAPI(HttpServletRequest request) {
        request.getParameter("uname");
        System.out.println(request);
        return "/view/success";
    }

猜你喜欢

转载自blog.csdn.net/qq_40585396/article/details/85246929