Spring-MVC入门

ゞ 浴缸里的玫瑰 2024-04-02 04:33 210阅读 0赞

文章目录

  • 前言
  • 一、Spring-MVC是什么?
    • MVC:
    • MVC的工作流程:
    • 优势:
  • 二、使用步骤
    • 1.创建Maven项目导入依赖。
    • 2.配置前端控制器
      • DispatcherServlet
    • 3.配置后端控制器
    • 4.核心配置文件的编写
    • 5.访问测试:
  • 三、使用controller接收参数
    • 1.接收基本数据类型和string
    • 2.直接接收实体对象
    • 3.接收一个Model对象
  • 四、页面跳转和重定向
    • 1.转发
    • 重定向
  • 五、静态资源的处理
  • 总结

前言

接着来学习spring-MVC开发。


一、Spring-MVC是什么?

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。是Spring提供的一种MVC开发模式的框架。

MVC:

在这里插入图片描述

MVC的工作流程:

MVC的工作流程: 用户通过视图层 发送请求到 服务器 ,在服务器中 请求被 Controller 接受,Controller 则调用响应的model层来处理请求,处理完之后的结果 返回给Controller,然后 controller 把结果响应给View 视图,渲染数据 最终展示在浏览器

优势:

  • MVC是现下软件开发中的最流行的代码结构形态;
  • 人们根据负责的不同逻辑,将项目中的代码分成 M V C 3个层次;
  • 层次内部职责单一,层次之间耦合度低;
  • 符合低耦合 高内聚的设计理念。也实际有利于项目的长期维护。

二、使用步骤

1.创建Maven项目导入依赖。

导入Spring-MVC的依赖

  1. <dependency>
  2. <groupId>org.springframework</groupId>
  3. <artifactId>spring-webmvc</artifactId>
  4. <version>5.1.6.RELEASE</version>
  5. </dependency>

2.配置前端控制器

作为一个MVC框架,首先要解决的是:如何能够收到请求!
所以MVC框架大都会设计一款前端控制器,选型在 Servlet 或 Filter两者之一,在框架最前沿率先工作,接收所有请求。
此控制器在接收到请求后,还会负责springMVC的核心的调度管理,所以既是前端又是核心。

DispatcherServlet

DispatcherServlet 前端控制器 ,是框架提供的,作用 统一处理请求和响应,整个流程的控制中心,是由它来调用其他组件处理用户的请求。

我们需要在web.xml文件里添加如下配置

  1. <servlet>
  2. <servlet-name>mvc</servlet-name>
  3. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  4. <!-- 局部参数:声明配置文件位置 -->
  5. <init-param>
  6. <param-name>contextConfigLocation</param-name>
  7. <param-value>classpath:mvc.xml</param-value>
  8. </init-param>
  9. <!-- Servlet启动时刻:可选 -->
  10. <load-on-startup>1</load-on-startup>
  11. </servlet>
  12. <servlet-mapping>
  13. <servlet-name>mvc</servlet-name>
  14. <url-pattern>/</url-pattern>
  15. </servlet-mapping>

3.配置后端控制器

后端控制器是在前端控制器接收到请求之后,下一步数据流转将要流向的地方。需要我们使用springmvc提供的注解

  1. @Controller //声明这是一个控制器
  2. @RequestMapping("/hello") //访问路径 ,等价于url-pattern
  3. public class HelloController {
  4. @RequestMapping("/test1") //访问路径
  5. public String hello1(){
  6. System.out.println("hello world");
  7. return "index"; // 跳转:/index.jsp
  8. }
  9. @RequestMapping("/test2") //访问路径
  10. public String hello2(){
  11. System.out.println("hello c9");
  12. return "views/users";// 跳转:/views/user.jsp
  13. }
  14. }

4.核心配置文件的编写

注意: SpringMVC的配置文件和Spring的配置文件不是同一个文件。需要单独创建一个xml文件。可以叫做spring-mvc.xml,内容如下

  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:context="http://www.springframework.org/schema/context"
  3. xmlns:mvc="http://www.springframework.org/schema/mvc"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/context
  8. http://www.springframework.org/schema/context/spring-context.xsd
  9. http://www.springframework.org/schema/mvc
  10. http://www.springframework.org/schema/mvc/spring-mvc.xsd">
  11. <!-- 告知springmvc 哪些包中 存在 被注解的类 此处springmvc本身就是管理controller层的 -->
  12. <context:component-scan base-package="com.qf.controller"></context:component-scan>
  13. <!-- 注册注解开发驱动 让springmvc的注解生效 -->
  14. <mvc:annotation-driven></mvc:annotation-driven>
  15. <!-- 视图解析器
  16. 作用:1.捕获后端控制器的返回值="index"
  17. 2.解析: 在返回值的前后 拼接 ==> "/index.jsp"
  18. -->
  19. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  20. <!-- 前缀 -->
  21. <property name="prefix" value="/"></property>
  22. <!-- 后缀 -->
  23. <property name="suffix" value=".jsp"></property>
  24. </bean>
  25. </beans>

5.访问测试:

启动项目,直接在地址栏输入如下:
http://localhost:8080/hello/test1
http://localhost:8080/hello/test2


三、使用controller接收参数

在没有使用SpringMVC之前,我们从JSP发过来的请求需要通过request域对象的getParameter方法通过键值对的方式一一取出。非常的麻烦。但是现在我们可以通过在controller的方法参数列表里边。直接写出我们需要接收的参数类型和形参名即可自动匹配。

1.接收基本数据类型和string

  1. @Controller
  2. @RequestMapping("/login")//配置当前controller全局的访问路径
  3. public class LoginController {
  4. //自动注入业务层
  5. @Autowired
  6. private LoginService service;
  7. @RequestMapping(value = "loginVerify",method = RequestMethod.POST)//配置当前方法的访问路径
  8. @ResponseBody//当前方法的返回值自动转换为JSON
  9. public ResultLayUi<User> loginSuccess(String username,String password){
  10. return service.verifyLogin(username,password);
  11. }
  12. }

2.直接接收实体对象

  1. @RequestMapping(value = "updateInfo",method = RequestMethod.POST)
  2. @ResponseBody
  3. public ResultLayUi<Employee> updateInfo(Employee employee){
  4. return service.updateEmployeeInfo(employee);
  5. }

3.接收一个Model对象

model对象是springMVC自己内置的一个模型对象,能够将request中的数据完全的复制过来

  1. //model中的数据,会在V渲染之前,将数据复制一份给request
  2. @RequestMapping("/test")
  3. public String testData(Model model){
  4. model.addAttribute("name", "张三");
  5. return "index";
  6. }
  7. //jsp中用EL表达式 取值即可
  8. ${
  9. requestScope.name}

四、页面跳转和重定向

1.转发

  1. @RequestMapping("/forw")
  2. class ForwardController{
  3. @RequestMapping("/test1")
  4. public String testForward(){
  5. System.out.println("test forward1");
  6. // 转发跳转 /views/users.jsp
  7. // return "views/users";//和下一行等价
  8. return "forward:/views/users.jsp";
  9. }
  10. @RequestMapping("/test2")
  11. public String testForward2(){
  12. System.out.println("test forward2");
  13. //转发到 /forw/test1
  14. //return "forward:test1";//相对路径(转发到本类中的test1)
  15. //转发到 /forw/test1
  16. return "forward:/forw/test1"; //绝对路径
  17. }
  18. }

重定向

  1. @RequestMapping("/redir")
  2. class RedirectController{
  3. @RequestMapping("/test1")
  4. public String testRedirect1(){
  5. System.out.println("test redirect1");
  6. //重定向到 /redir/test1
  7. //return "redirect:test1"; //相对路径(转发到本类中的test1)
  8. return "redirect:/redir/test1";//绝对路径
  9. }
  10. @RequestMapping("/test2")
  11. public String testRedirect2(){
  12. System.out.println("test redirect2");
  13. //重定向到 /views/users.jsp
  14. return "redirect:/view/user.jsp";
  15. }
  16. }

五、静态资源的处理

静态文件没有url-pattern,所以默认是访问不到的,之所以可以访问,是因为,tomcat中有一个全局的servlet:org.apache.catalina.servlets.DefaultServlet,它的url-pattern是 “/”,是全局默认的Servlet. 所以每个项目中不能匹配的静态资源的请求,有这个Servlet来处理即可。

但,在SpringMVC中DispatcherServlet也采用了 “/” 作为url-pattern, 则项目中不会再使用全局的Serlvet,则静态资源不能完成访问。

解决办法:
添加如下配置

  • mapping是访问路径,location是静态资源存放的路径
  • 将/html/** 中 /**匹配到的内容,拼接到 /hhh/后
    http://…/html/a.html 访问 /hhh/a.html

这里只提供一种,还有别的办法,此处不再一一赘述。

总结

使用SpringMVC在处理请求时有很大的优势。非常好用

发表评论

表情:
评论列表 (有 0 条评论,210人围观)

还没有评论,来说两句吧...

相关阅读