SpringMVC

1.什么是MVC

  • MVC : 模型、视图、控制器 , 是一种软件设计规范,说明不是设计模式;

  • 本质:将业务逻辑 , 数据 , 显示 分离的方式来编写代码; 前后端分离;

  • Model:数据模型,提供要展示的数据,一般我们都会把这两个分离开来 , 数据Dao,服务层Service。

  • View :负责进行数据的渲染和展示;客户端想要看到的东西

  • Controller:接收用户请求,交给Model处理,从Model更新后的数据或者结果,返回给前端。调度员
    面向接口编程
    最典型的案例就是:JSP:View+Servlet:Controller+JavaBean:Model;
    Model1
    在早期的Web开发中,就是用的Model1模式

只有两层:视图层和模型层;
在这里插入图片描述
优点:架构简单,适合小型项目开发;

缺点:JSP职责不单一 , 承受它不该承受的压力,不便于维护;

Model2
将项目分为三个模块:M:模型 V:视图 C:控制器
在这里插入图片描述
职责分析:

controller:

  • 取得表单的数据
  • 调用业务的逻辑方法
  • 转向指定的页面

Model:

  • Dao:操作数据库
  • Service:业务逻辑
  • 保存数据的更新状态

View:

  • 显示页面

Model2优化了Model1时代的缺点,让所有层职责更加分明;降低了维护难度,
2.SpringMVC
SpringMVC 是 Spring的一部分,是基于Java实现的MVC的轻量级Web框架

实例

我们利用Maven创建一个web项目;
1.创建依赖,解决资源导出问题

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <!--SpringMVC及Spring系列包-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>4.3.24.RELEASE</version>
    </dependency>

    <!--Servlet核心-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
    </dependency>

    <!--JSTL-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>

  </dependencies>

  <build>
    <!--解决资源导出问题-->
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
      </resource>
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>false</filtering>
      </resource>
    </resources>

注册SpringMVC核心Servlet

<?xml version="1.0" encoding="UTF-8"?>

<web-app
        version="3.0"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

    <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--关联SpringMVC配置文件-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param>
    <!--这个东西要和服务器一起启动;
    load-on-startup。启动级别,数字越小级别越高
    -->
    <load-on-startup>1</load-on-startup>
    
    </servlet>




    <!--所有请求都会经过这个DispatcherServlet请求分发器-->
    <!--

    /和/*的区别:
    < url-pattern > / </ url-pattern > 不会匹配到.jsp, 只针对我们编写的请求;
      即:.jsp不会进入spring的 DispatcherServlet类 。
    < url-pattern > /* </ url-pattern > 会匹配*.jsp,
      会出现返回jsp视图时再次进入spring的DispatcherServlet 类,导致找不到对应的controller所以报404错。
    -->
    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

</web-app>

注意:映射路径位 / (不要用/*,会404)
编写SpringMVC的配置文件

  1. 让IOC的注解生效
  2. 静态资源过滤 :HTML . JS . CSS . 图片 , 视频 …
  3. MVC的注解驱动 :
  4. 配置视图解析器
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--扫描指定包下的注解,让指定的类能够被IOC容器管理-->
    <context:component-scan base-package="com.wang.controller"/>
    <!--静态资源过滤-->
    <mvc:default-servlet-handler/>

    <!--支持MVC注解驱动-->
    <mvc:annotation-driven/>

    <!--视图解析器
    作用;方便统一管理-->
    <bean id="InternalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>


</beans>

编写Controller类

  • 需要给类加注解 :@Controller , 可以让IOC容器管理 , 等价于Bean
  • 请求映射的路径 :@RequestMapping (“路径”),如果类上有就先写类的,在写方法的;
  • Model :模型传递参数
  • return “hello”; 它会去视图解析中拼接前缀和后缀来找到对应的视图
@Controller
@RequestMapping("/hello")
public class HelloWorldController {

    //请求映射("路径")
    @RequestMapping("/hello")
    public String hi(Model model){
        model.addAttribute("msg","Hello,SpringMVC");
        System.out.println("进入HELLO");
        return "hello"; //WEB-INF/jsp/hello.jsp
    }

}

视图层

  • 注意视图的位置,要和视图解析器对应 web-inf / jsp , 为什么需要在web-inf路径下 , 因为这个路径下的东西用户无法直接访问 , 更加安全;
  • 可以通过EL表示取出Model中存放的值,或者对象
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>SpringMVC</title>
</head>
<body>

${msg}

</body>
</html>

启动Tomcat进行测试,测试结果
在这里插入图片描述
Controller配置
使用SpringMVC必须配置三大文件:

处理器映射器,处理器适配器 (一般加上)

配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         id="WebApp_ID" version="3.0">

        <!--注册Servlet中心分发器-->
        <servlet>
          <servlet-name>springmvc</servlet-name>
          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

          <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
          </init-param>

        </servlet>




        <servlet-mapping>
          <servlet-name>springmvc</servlet-name>
          <url-pattern>/</url-pattern>
        </servlet-mapping>

</web-app>

编写springmvc-servlet.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd">

        <!--自动扫描包-->
    <context:component-scan base-package="com.wang.controller"/>

    <bean id="InternalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--前缀-->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!--后缀-->

        <property name="suffix" value=".jsp"/>
    </bean>


</beans>

编写controller类

@Controller
public class HelloController {
    @RequestMapping("/h1")
    public ModelAndView hello(HttpServletRequest req, HttpServletResponse resp){
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","大圣归来");
        mv.setViewName("hello");
        return mv;
    }

    @RequestMapping("/h2")
    public ModelAndView hello2(HttpServletRequest req, HttpServletResponse resp){
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","猴哥,师傅不见了");
        mv.setViewName("hello");
        return mv;
    }
}
@Controller
@RequestMapping("/admin")
public class AnnoController {
    @RequestMapping("/anno")
    public ModelAndView hello(HttpServletRequest req, HttpServletResponse resp){
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","哪吒闹海");
        mv.setViewName("hello");
        return mv;
    }

    @RequestMapping("/anno2")
    public ModelAndView hello2(HttpServletRequest req, HttpServletResponse resp){
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","中国梦!");
        mv.setViewName("hello");
        return mv;
    }

}
@org.springframework.stereotype.Controller
public class ThreeController implements Controller {
    @RequestMapping("hand")
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg","你好");
        mv.setViewName("hello");

        return mv;
    }
}

视图层,接收会话

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${msg}
</body>
</html>

测试结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值