首页 > 其他分享 >SpringMVC —— 前提

SpringMVC —— 前提

时间:2023-06-18 17:00:15浏览次数:42  
标签:xml 访问 SpringMVC url 前提 MyServlet DispatcherServlet 处理器

SpringMVC — 前提

前提了解:Web 开发中的一些概念

  • JavaBean规范

    • 必须是一个公共类,如:public class User{ }
    • 必须有一个空的构造器
    • 类的成员变量是私有,如:private int id;
    • 通过 getter / setter 来访问属性
  • 在软件体系架构中,分层式结构最常见,微软推荐的分层式结构为三层:数据访问层、业务逻辑层 ( 领域层 )、表示层

    • 数据访问层 ( DAL ):面向数据库,数据的添删改查。   

    • 业务逻辑层 ( BLL ):面向业务逻辑,对数据层的操作、对数据业务逻辑处理。   

    • 表示层 ( UI ):面向用户,通俗讲就是展现给用户的界面。

  • 对应关系

    • 数据访问层 ( DAL ) --> Dao 

    • 业务逻辑层 ( BLL ) --> Service   

    • 表示层 ( UI ) --> HTML、JSP

Servlet 的 url-pattern 匹配规则

  • 注解方式:似先前常用 servelt 将功能映射到 web 前端

    • @WebServlet(“/xxx”) .... extends HttpServlet
  • web.xml 配置:

    <!-- 一、 Servlet的url-pattern匹配规则——前提 -->
      <servlet>
        <servlet-name>MyServlet</servlet-name>
        <servlet-class>com.qut._20.MyServlet</servlet-class>
      </servlet>
    
    • 精准匹配

      <!-- 1、精确匹配1 -->
        <servlet-mapping>
          <servlet-name>MyServlet</servlet-name>
          <url-pattern>/MyServlet</url-pattern>  // “/MyServlet”时会根据MyServlet匹配到上面的class类
        </servlet-mapping>
      
    • 增加路径

      <url-pattern>/a/b/MyServlet</url-pattern>
      
    • 加路径加扩展名

      <url-pattern>/a/b/MyServlet.do</url-pattern>
      
    • 路径匹配,只要是 /a/b 下的所有都可以访问

      <url-pattern>/a/b/*</url-pattern>
      
    • 扩展名匹配,do 结尾的任意 url 都可访问

      <url-pattern>*.do</url-pattern>
      
    • 缺省匹配,任何无扩展名路径来都能匹配上

      <url-pattern>/</url-pattern>
      
  • 注意 / 与 /* 的区别

    • <url-pattern>/</url-pattern> 只匹配 /login,不匹配 *.jsp 这样的后缀型 url ( 静态资源也会被拦截 )
    • < url-pattern>/*</url-pattern> 匹配所有 url,即 /login,* .jsp,* .js,* .html 等 ( 所有都拦截 )
    • 为放行静态资源,xml 需要加上:<mvc:default-servlet-handler/> 放行静态资源的配用

SpringMVC 原理

  • 用户发送请求 -> DispatcherServlet ( 前端控制器 )
    • 前端控制器作为统一访问点,进行全局流程控制:收到请求后委托给其他解析器进行处理
  • DispatcherServlet -> HandlerMapping ( 处理器映射器 ) —— url 到 controller
    • 处理器映射器把请求映射为 HandlerExecutionChain 对象,方便添加各种新的映射策略,HandlerExecutionChain 包含一个 Handler 处理器、多个 HandlerInterceptor 拦截器
  • DispatcherServlet -> HandlerAdapter ( 处理器适配器 )
    • 处理器适配器使用适配器设计模式,把处理器包装为适配器,支持多种类型的处理器
  • HandlerAdapter -> 处理器 —— 具体到 RequestMapping 方法
    • HandlerAdapter 根据适配的结果,调用处理器,完成处理功能,返回一个 ModelAndView 对象
  • DispatcherServlet -> ViewResolver ( 视图解析器 ) —— 返回字符串,得到的是一个页面
    • 视图解析器把逻辑视图名解析为具体的 View,通过这种策略可以很方便的更换其他图技术
  • DispatcherServlet -> View ( 视图 ) —— 页面
    • 视图把传进来的 Model 模型数据进行渲染,该 Model 是一个 Map 数据结构,因此很容易支持其他视图技术
  • 由 DispatcherServlet 返回响应给用户,到此一个流程结束
  • 主要是写好处理器,其实 mvc 可看做就是一个功能强大的 servlet

img

SpringMVC 开发

  • 加 jar 包:spring-context ( 一带四 ccbe ) + spring-webmvc

  • xml:xmlns + xsi —— mvc

  • 想让 web 读配置文件 —— springmvc 的前端控制器编写

    <!--  web.xml 中配置 DispatcherServlet ( SpringMVC 的前端控制器 )  -->
      <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--  value:自己配置文件 xml所在  -->
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:8_springMVC.xml</param-value>
        </init-param>
    <!--  随web服务器启动,单实例多线程  -->
        <load-on-startup>1</load-on-startup>
      </servlet>
    
    <!-- 做映射(缺省匹配) -->
      <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
    <!--   匹配 / 开头的进行拦截,包括静态资源,从而做处理(处理器、映射器),不匹配*.jsp这样有扩展名的后缀型url,如果不拦截的话就不会有后面处理器的操作了  -->
        <url-pattern>/</url-pattern>
      </servlet-mapping>
    
  • 注意:如果打开了 tomcat,在 jsp 里点击网页没法直接打开,就把 web.xml 第一行替换为 <?xml version="1.0" encoding="utf-8" ?>

    • WEB-INF 里的资源不能通过浏览器直接访问 —— 可以内部跳转:转发、mv.setViewName
  • 处理器配置

    • xml 的 bean 中 class 指定 MyController 类,name 为 url 被访问的路径 ( 映射 url ),如:<bean id="myController1" class="com.qut._20.controller.MyController1" name="/hello1"></bean> —— 前端用超链接 <a href = "hello"></a>

      • F1:MyController 类 implements Controller {

        ​ 方法返回值 ModelAndView {

        ​ ModelAndView mv = new ModelAndView();

        ​ mv.setViewName ( “ 路径字符串,各层用 / 隔开 ”);

        ​ return mv;

        ​ }

        } —— ModelAndView 既能包含数据,还能告诉你访问哪个页面

      • F2:MyController 类 implements HttpRequestHandler {

        ​ void 方法含参 HttpServletRequest HttpServletResponse {

        ​ httpServletRequest.getRequestDispatcher("WEB-INF/jsp/2.jsp").forward(req, res);

        ​ }

        }

    • F3 ( 推荐 ):

      • xml 内配置

        <!--  1. 扫描包  -->
        	<context:component-scan base-package="com.qut._20"></context:component-scan>
        <!--  2. 用来支持RequestMapping等mvc注解  -->
        	<mvc:annotation-driven></mvc:annotation-driven>
        
        <!--  3. 默认情况下对静态资源不做拦截,放行jsp  -->
            <mvc:default-servlet-handler/>
        
      • 类前使用注解:@Controller

      • @RequestMapping ( “/被请求的url” ) —— 映射 url,被扫描到后自动创建 bean —— 于某方法前,方法里写具体操作

        如果置于类前,如:@RequestMapping ( value=“/controller1” )。则访问为两层:/controller1/被请求的url

      • 写字符串 url 时:/ 斜线开头表示根目录

代码

  • 前端控制器 + 处理器配置的第三种方式

标签:xml,访问,SpringMVC,url,前提,MyServlet,DispatcherServlet,处理器
From: https://www.cnblogs.com/zhu-ya-zhu/p/17489353.html

相关文章

  • SpringMVC基础详解(包含示例)
    SpringMVC简介SpringMVC是一种基于Java的实现MVC设计模型的请求驱动类型的轻量级Web框架,跟Spring,Mybatis框架并称为SSM。是由Spring官方提供的基于MVC设计理念的web框架也是基于Servlet封装的用于实现MVC控制的框架,实现前端和服务端的交互与Servlet技术功能相同,均是......
  • SpringMVC WebUploader 分片上传
    ​ 需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500G内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以500G来进行限制。PC端全平台支持,要求支持Windows,Mac,Linux支持所有浏览器。支持文件批量上传支持文件夹上传,且要求在服务端保留层......
  • springMVC集成缓存框架Ehcache
    概述Ehcache算是当前比较流行的缓存框架,使用缓存可以极大的缓解服务器和数据库的压力,提高访问效率,提高服务器的并发能力。接下来我们看怎么把缓存在springmvc种使用起来。详细Ehcache算是当前比较流行的缓存框架,使用缓存可以极大的缓解服务器和数据库的压力,提高访问......
  • SpringMVC执行流程关键代码
    org.springframework.web.servlet.DispatcherServletprotectedvoiddoDispatch(HttpServletRequestrequest,HttpServletResponseresponse)...{//processedRequest为org.apache.catalina.connector.RequestFacadeHttpServletRequestprocessedRequest=requ......
  • springmvc加文件上传支持
     找个sping.xml之类的,加入配置以及引用<beanid="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/> <dependency><groupId>commons-fileupload</groupId>......
  • 基于springmvc+spring+mybatis+hibernate 封装的框架
    基于maven  freemarker2.3.20  spirngmvc3.2.9.RELEASE  spring3.2.9.RELEASE  Hiberante3.6.9.Final(自动建表)  mybatis3.2.7数据交互  druid连接池   cxf3.0.0发布webservice  quartz2.2.1定时任务  jquery   jquery-datata......
  • 【深入浅出Spring原理及实战】「夯实基础系列」360全方位分析和探究SpringMVC的核心原
    SpringMVC简介SpringWebMVC是一种基于Java的轻量级Web框架,它实现了WebMVC设计模式,使用VC架构模式的思想将web层进行职责解耦。这种请求驱动类型的框架使用请求-响应模型,旨在简化Web开发过程。使用SpringWebMVC,我们可以更加高效地开发Web应用程序,而不必为了每个接口编写一个Ser......
  • SpringMVC参数接收与数据响应
    SpringMVC如何接受请求参数(普通类型参数/对象类型参数/数组/json数据等)1、普通类型参数(1)在可以在方法参数上使用@RequestParam注解来绑定请求参数,此注解允许指定请求参数的名称,以及是否是必须传的参数。@RequestMapping("/example")publicStringexampleMethod(@RequestPara......
  • 【2023-06-05】三胎前提
    20:00那曾柔软细腻的心,被这世界狠狠嘲笑过,但我的本质不可摧毁,我心安,释然,从容生出新叶。                                                 ——黑塞何太问我还敢不敢要......
  • springmvc后端响应给前端
    controllerpackagecom.bh.controller;importcom.bh.po.User;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.ModelAttribute;importorg.springframework.web.bind.annotation.RequestMapping;importorg.spring......