springmvc复习

springmvc复习,第1张

springmvc复习 SpringMVC复习

springmvc是一种web层mvc框架,它是spring的一个模块,拥有spring的特性。是基于Java实现MVC的轻量级Web框架。

springmvc工作流程(重点) 1.工作流程

1、用户向服务端发送一次请求,这个请求会先到前端控制器DispatcherServlet(也叫中央控制器);

2、DispatcherServlet接收到请求后会调用HandlerMapping处理器映射器;

3、返回处理器执行链,由此得知,请求该由哪个Controller来处理;

4、DispatcherServlet调用HandlerAdapter处理器适配器,告诉处理器适配器应该要去执行哪个Controller;

5和6、HandlerAdapter处理器适配器去执行Controller(这部分代码自己写)并得到ModelAndView(数据和视图);

7、DispatcherServlet将返回的数据和视图给DispatcherServlet;

8和9、DispatcherServlet将ModelAndView交给ViewReslover视图解析器解析,然后返回真正的视图;

10、DispatcherServlet将模型数据填充到视图中;

11、DispatcherServlet将结果响应给用户;

2.组件说明

DispatcherServlet:前端控制器(中央控制器)

用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心, 由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。 这玩意是核心,就是门卫传达室,一个请求进来先来传达室,然后一步步来处理问题。就是个servlet

Handler:处理器

Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具 体的用户请求进行处理,由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务 需求开发Handler。(这玩意就是你写的controller)

HandlerMapping:处理器映射器

HandlerMapping负责根据用户请求url找到Handler即处理器,springmvc提供了不同的映射器实现不 同的映射方式,如配置文件方式,实现接口方式,注解方式等。 这玩意就是个map,放了一堆数据,key是url,value是你对应的处理器。一个请求来了,调用一下mao.get(url)就知道哪个类的哪个方法处理这个请求了。

HandlAdapter:处理器适配器

通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处 理器进行执行。 这货会调用相应的方法,生成最终能够的modelAndView

ViewResolver:视图解析器

View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即 具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。 这货就是解析modelAndView的。有个常用最简单的功能就是拼接字符串,给你加个前缀后缀,让你方便了很多,当然他们解析很多类型的视图。

重点总结 1.@RequestMapping

这个注解很关键,可以方法类上也可以放在方法上。 如果放在类上,会给每个方法默认都加上,相当于本类全局前缀。

RequestMapping注解的属性:

  • value: 指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);

  • method: 指定请求的method类型, GET、POST、PUT、DELETE等;

  • consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

  • produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回, 可以处理乱码

  • params: 指定request中必须包含某些参数值才让该方法处理。

    如下表示:请求中必须携带如下2个参数才可以放行

  • headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

@RequestMapping可以使用 URL 模式映射方法:

  • "/resources/ima?e.png" - 匹配路径段中的一个字符(简单讲“?”可以代替任意一个字符)

    例:@RequestMapping("?ame")

  • "/resources/*.png" - 匹配路径段中的零个或多个字符(可以用于处理图片controller)

    例:@RequestMapping("*.png")

  • "/resources/**" - 匹配多个路径片段(表示任何请求都可以)

    例:@RequestMapping("**")

  • "/projects/{project}/versions" - 匹配路径段并将其捕获为变量(可以进行“骚 *** 作”,用来传参)

    例:

    @GetMapping("/owners/{ownerId}/pets/{petId}")
    public Pet findPet(@PathVariable Long ownerId, @PathVariable Long petId) {
        // ...
    }
    
2.内置统一的字符集处理

简单来说就是处理response和resquest的utf-8

在 web.xml 中配置一个字符集过滤器即可:


    CharacterEncodingFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
        encoding
        utf-8
    


    CharacterEncodingFilter
    /*

3.处理有视图解析器的转发

为什么有这种需求:存在视图解析器,但是不想跳转到页面。

return "forward://user/add"
4.不同形式的参数获取(重点)

@RequestParam(常用)

注:代表后面的参数是从我的RequestParam中获取

获取Servlet 请求参数(即查询参数或表单数据)。

@RequestHeader

获取请求头中的方法参数。

@cookievalue

获取cookie 中的方法参数。

@ModelAttribute

获取模型中的属性。

@SessionAttributes(在类上);@SessionAttribute(在方法上)

获取在请求之间的 HTTP Servlet 会话中存储模型属性

@RequestAttribute

获取访问先前创建的预先存在的请求属性

@PathVariable

表示从路径中获取

5.数据校验JSR 303

JSR 303 是 Java 为 Bean 数据合法性校验提供的标准框架,它已经包含在 JavaEE 6.0 中 JSR 303 通过在 Bean 属性上标注类似于 @NotNull、@Max 等标准的注解指定校验规则,并通过标准的 验证接口对 Bean 进行验证

6.处理资源

这样的请求就不会走中央处理器了(就是说不会被拦截)




7.RequestMapping中的rest
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
@RequestMapping(value = "/add", method = RequestMethod.POST)
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)

当然还有更好用的

@GetMapping("/user/{id}")
@PostMapping("/user")
@DeleteMapping("/user/{id}")
@PutMapping("/user/{id}")

也可以采用Ajax方式发送PUT和DELETE请求

$.ajax( {
type : "GET",
url : "http://localhost:8080/springmvc/user/rest/1",
dataType : "json",
success : function(data) {
console.log("get请求!---------------------")
console.log(data)
}
});
$.ajax( {
type : "DELETE",
url : "http://localhost:8080/springmvc/user/rest/1",
dataType : "json",
success : function(data) {
console.log("delete请求!---------------------")
console.log(data)
}
});
$.ajax( {
type : "put",
url : "http://localhost:8080/springmvc/user/rest/1",
dataType : "json",
data: {id:12,username:"ITbai",password:"123"},
success : function(data) {
console.log("get请求!---------------------")
console.log(data)
}
});
$.ajax( {
type : "post",
url : "http://localhost:8080/springmvc/user/rest",
dataType : "json",
data: {id:12,username:"ITbai",password:"123"},
success : function(data) {
console.log("get请求!---------------------")
console.log(data)
}
});

8.拦截器

注意:拦截器(intercept,springmvc中的内容)是在DispatcherServlet之后起作用;过滤器(filter,javaEE中的内容)是在DispatcherServlet之前起作用;

  1. SpringMVC提供的拦截器类似于JavaWeb中的过滤器,只不过SpringMVC拦截器只拦截被前端控 制器拦截的请求,而过滤器拦截从前端发送的任意请求。
  2. 熟练掌握 SpringMVC 拦截器对于我们开发非常有帮助,在没使用权限框架( shiro,spring security )之前,一般使用拦截器进行认证和授权 *** 作。
  3. SpringMVC拦截器有许多应用场景,比如:登录认证拦截器,字符过滤拦截器,日志 *** 作拦截器等 等。
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    //Controller方法处理请求前执行,根据拦截器定义的顺序,正向执行
    public boolean preHandle(HttpServletRequest request, HttpServletResponse
    response, Object handler) {
    return true;
    }
    @Override
    //Controller方法处理请求后执行,根据拦截器定义的顺序,逆向执行。需要所有的 preHandle方法都返回true时才会调用。
    public void postHandle(HttpServletRequest request, HttpServletResponse
    response, Object handler, ModelAndView modelAndView) {}
    @Override
    //1. View视图渲染后处理方法:根据拦截器定义的顺序,逆向执行。preHandle返 回true就会调用。
    public void afterCompletion(HttpServletRequest request,
    HttpServletResponse response, Object handler, Exception ex) {}
}

编写完SpringMVC拦截器,我们还需要在springmvc.xml配置文件中,配置我们编写的拦截器,配置代码如下













9.上传下载

https://www.cnblogs.com/xdp-gacl/p/4200090.html

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5685402.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存