MVC框架说明和RestFul风格

发布时间 2023-07-20 17:03:18作者: Hmzzz2

Servlet

开发动态web的技术

开发步骤:

  1. 编写一个类,实现Servlet接口

  2. 把开发好的java类部署到web服务器中

 

MVC框架

作用:

  1. 将url映射到java类或java类的方法

  2. 封装用户提交的数据

  3. 处理请求--调用相关的业务处理--封装响应数据

  4. 将响应的数据进行渲染 . jsp / html 等表示层数据

 

MVC执行原理

简要分析执行流程

  1. Spring的web框架围绕DispatcherServlet设,DispatcherServlet的作用是将请求分发到不同的处理器,相当于前端控制器,接触用户的最高层。

    我们假设请求的url为 : http://localhost:8080/SpringMVC/hello

    如上url拆分成三部分:

    http://localhost:8080服务器域名

    SpringMVC部署在服务器上的web站点

    hello表示控制器

    通过分析,如上url表示为:请求位于服务器localhost:8080上的SpringMVC站点的hello控制器。

  2. HandlerMapping为处理器映射。DispatcherServlet调用HandlerMapping,HandlerMapping根据请求url查找Handler。

  3. HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器,如上url被查找控制器为:hello。

  4. HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等。

  5. HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。

  6. Handler让具体的Controller执行。

  7. Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView。

  8. HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。

  9. DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。

  10. 视图解析器将解析的逻辑视图名传给DispatcherServlet。

  11. DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。

  12. 最终视图呈现给用户。

流程图

常见问题解决(访问出现404)

  1. 打开项目结构

  2. 在WEB-INF包下创建lib包

  3. 项目所有包添加到lib中

 

步骤:

  1. 新建一个Moudle,添加web支持

  2. pom.xml文件引入相关的依赖

  3. 配置web.xml

  • 注册DispatcherServlet

  • 关联SpringMVC的配置文件

  • 启动级别为1

  • 映射路径为 / 【不要用/*,会404】

  1. 在resource目录下添加springmvc-servlet.xml配置文件

  • 使用springMVC必须配置的三大件:通常,我们只需要手动配置视图解析器,处理器映射器和处理器适配器只需要开启注解驱动即可

  1. 编写一个Java控制类:com.kuang.controller.HelloController(使用Controller注解)

@Controller
public class ControllerTest2{
  //映射访问路径
  @RequestMapping("/t2")
  public String index(Model model){
      //Spring MVC会自动实例化一个Model对象用于向视图中传值
      model.addAttribute("msg", "ControllerTest2");
      //返回视图位置
      return "test";
}
}
  1. 在WEB-INF/ jsp目录中创建hello.jsp视图层

  1. 配置Tomcat运行

 

RestFul风格

作用:

  • 基于这个风格设计的软件可以更简洁,更有层次,更安全,更易于实现缓存等机制

如何使用:

  1. 每个参数前添加注解@PathVariable

  2. 路径后引用参数 /add/{a}/{b}

@Controller
public class RestFulController {

   @RequestMapping("/add/{a}/{b}")
   public String test1(@PathVariable int a,@PathVariable int b, Model model){

       int res = a+b;
       model.addAttribute("msg","结果为"+res);
       return "test";
  }
}

使用method属性指定请求类型

用于约束请求的类型,可以收窄请求范围,指定请求谓词的类型如GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE等

  • 使用:增加一个方法

    //映射访问路径,必须是POST请求
    @RequestMapping(value = "/hello",method = {RequestMethod.POST})
    public String index2(Model model){
      model.addAttribute("msg", "hello!");
      return "test";
    }
  • 所有的地址栏请求默认都会是 HTTP GET 类型!

  • 方法级别的注解变体有如下几个:组合注解

@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping

@GetMapping = @RequestMapping(method =RequestMethod.GET)