DispatcherServlet描述

本文详细介绍了DispatcherServlet在处理请求过程中的三大步骤:初始化信息、根据请求路径查找处理方法及发送响应。DispatcherServlet主要负责根据前端请求路径调用相应的Controller方法,处理业务逻辑。对于找不到对应方法的请求,它会尝试寻找静态资源或返回404错误。此实现虽简单,但体现了类似SpringBoot框架中的请求调度机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#DispatcherServlet描述

在我们的ClientHandler里边分为三部分

1.初始信息加载;包括对请求信息的提取封装,以及对响应容器的初始化,响应容器对外提供设置它的内容的方法

//1、解析请求
            HttpServletRequest request=new HttpServletRequest(socket);
            HttpServletResponse response=new HttpServletResponse(socket);

2.根据请求路径找方法来装填响应容器;此工程在初始化的时候就会根据我们给的路径来加载controller包下的Controller类,因为我们在Controller类中每个方法上都加上了@RequestMaping注解,因此我们在加载的时候就会把请求路径与对应的MethodMapping(类型为map)封装到一个map里边,方便后边查找,MethodMapping中放的是Controller类的类对象实例,以及具体的方法(类型Method),究其原因是因为后边在使用反射机制使用方法invoke时需要传入三个实例类型参数(在这里我们传入的是Controller类对象,request类对象,response类对象,),这是invoke方法的要求.在DispatcherServlet中,一旦拿着从HttpServletRequestpath里边获取到的path在(path,MethodMapping)这个Map中找到对应值,就开始将参数传入,invoke方法运行,将参数什么的进一步传到控制各个具体业务的Controller中的method中,Controller类里边的method都是面向response和request传值的,因此将这两个对象传给它,他就可以进行各种值的处理,将处理完毕的数据一个个封装到response里边.
对于在(path,MethodMapping)中没有找到对应方法的路径我们以其path拼接到staticDir路径进行是否为文件的判断,若是文件便可以直接设置响应正文内容为文件,返回,若再不是,便判定此path错误,返回404页面

DispatcherServlet servlet=new DispatcherServlet();
servlet.service(request,response);//往response里边装东西

3.发送响应页面

response.response();

整个2都是在进行响应内容的设置,可以说DispatcherServlet的作用就是根据前端传来的路径来找对应的处置方法,无非三种:业务/文件/错误访问,讲它的作用就是职责调度工作,本身主要用于控制流程


ps:本DispatcherServlet并不同于Spring等框架中的DispatcherServlet,本项目都是在模仿SpringBoot框架的,作用大体相似,但仅仅是基础性的,望周知

在Spring MVC框架中,`DispatcherServlet`是一个核心组件,它负责接收HTTP请求并将其映射到相应的控制器处理方法。以下是配置`DispatcherServlet`的基本步骤: 1. 添加依赖:首先,在你的`pom.xml`或`build.gradle`文件中添加Spring Web MVC的依赖。 ```xml <!-- Maven --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.x.y</version> </dependency> // Gradle (Kotlin DSL) implementation 'org.springframework.boot:spring-boot-starter-web' ``` 2. 配置web.xml(如果使用Spring Boot 1.x或基于XML的配置): 在web应用的部署描述符(如`web.xml`)中,添加`DispatcherServlet`的初始化参数和监听器配置。 ```xml <web-app> <!-- ... --> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- ... --> </web-app> ``` 这里`contextConfigLocation`指定了Spring MVC的配置文件位置。 3. 配置Spring Boot(如果你使用Spring Boot 2.x及以上): 如果你使用的是Spring Boot,那么不需要手动配置`web.xml`,只需在`application.properties`或`application.yml`中添加相关的启用信息,并指定`@EnableWebMvc`注解。 ```properties server.servlet.context-path = /api spring.mvc.view.prefix = /WEB-INF/views/ spring.mvc.view.suffix = .jsp ``` 然后在`MainApplication.java`或其他启动类上添加`@SpringBootApplication`和`@EnableWebMvc`。 4. 创建Spring MVC配置文件(例如:spring-mvc.xml 或 application-context.xml): 在这个文件中定义视图解析器、控制器扫描路径等设置。 ```xml <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> <!-- 或者 ".html", ".th", 等 --> </bean> <mvc:annotation-driven /> <context:component-scan base-package="your.package.name" /> ``` 将`base-package`属性替换为你实际的控制器包名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值