在这张图中(我从这里得到的),HTTP请求向Dispatcher Servlet发送一些东西。
我的问题是Dispatcher Servlet做什么?
它是否类似于从网页中获得抛出的信息并将其抛出给控制器?
在这张图中(我从这里得到的),HTTP请求向Dispatcher Servlet发送一些东西。
我的问题是Dispatcher Servlet做什么?
它是否类似于从网页中获得抛出的信息并将其抛出给控制器?
当前回答
我们可以说DispatcherServlet负责Spring MVC中的一切。
在web容器启动时:
DispatcherServlet将通过调用来加载和初始化 init()方法 DispatcherServlet的init()将尝试识别Spring 具有命名约定的配置文档 "servlet_name-servlet.xml"则可以标识所有bean。
例子:
public class DispatcherServlet extends HttpServlet {
ApplicationContext ctx = null;
public void init(ServletConfig cfg){
// 1. try to get the spring configuration document with default naming conventions
String xml = "servlet_name" + "-servlet.xml";
//if it was found then creates the ApplicationContext object
ctx = new XmlWebApplicationContext(xml);
}
...
}
因此,通常DispatcherServlet捕获请求URI并将其传递给HandlerMapping。HandlerMapping使用控制器的方法搜索映射bean,其中控制器返回逻辑名(视图)。然后这个逻辑名通过HandlerMapping发送给DispatcherServlet。然后DispatcherServlet通过附加前缀和后缀告诉ViewResolver给出视图的完整位置,然后DispatcherServlet将视图传递给客户端。
其他回答
在Spring MVC中,所有传入的请求都通过单个servlet。这个servlet——DispatcherServlet——是前端控制器。前端控制器是web应用程序开发中的一种典型设计模式。在这种情况下,单个servlet接收所有请求并将它们传输到应用程序的所有其他组件。
DispatcherServlet的任务是向特定的Spring MVC控制器发送请求。
通常我们有很多控制器,DispatcherServlet引用以下映射器之一来确定目标控制器:
BeanNameUrlHandlerMapping; ControllerBeanNameHandlerMapping; ControllerClassNameHandlerMapping; DefaultAnnotationHandlerMapping; SimpleUrlHandlerMapping。
如果没有配置,DispatcherServlet默认使用BeanNameUrlHandlerMapping和DefaultAnnotationHandlerMapping。
确定目标控制器后,DispatcherServlet向其发送请求。控制器根据请求执行一些工作 (或将其委托给其他对象),并返回给DispatcherServlet,其中包含模型和视图的名称。
视图的名称只是一个逻辑名称。然后使用这个逻辑名来搜索实际的View(以避免与控制器和特定的View耦合)。然后DispatcherServlet引用ViewResolver并将视图的逻辑名映射到视图的特定实现。
ViewResolver的一些可能实现有:
BeanNameViewResolver; ContentNegotiatingViewResolver; FreeMarkerViewResolver; InternalResourceViewResolver; JasperReportsViewResolver; ResourceBundleViewResolver; TilesViewResolver; UrlBasedViewResolver; VelocityLayoutViewResolver; VelocityViewResolver; XmlViewResolver; XsltViewResolver。
当DispatcherServlet确定将显示结果的视图时,它将作为响应呈现。
最后,DispatcherServlet将Response对象返回给客户机。
我们可以说DispatcherServlet负责Spring MVC中的一切。
在web容器启动时:
DispatcherServlet将通过调用来加载和初始化 init()方法 DispatcherServlet的init()将尝试识别Spring 具有命名约定的配置文档 "servlet_name-servlet.xml"则可以标识所有bean。
例子:
public class DispatcherServlet extends HttpServlet {
ApplicationContext ctx = null;
public void init(ServletConfig cfg){
// 1. try to get the spring configuration document with default naming conventions
String xml = "servlet_name" + "-servlet.xml";
//if it was found then creates the ApplicationContext object
ctx = new XmlWebApplicationContext(xml);
}
...
}
因此,通常DispatcherServlet捕获请求URI并将其传递给HandlerMapping。HandlerMapping使用控制器的方法搜索映射bean,其中控制器返回逻辑名(视图)。然后这个逻辑名通过HandlerMapping发送给DispatcherServlet。然后DispatcherServlet通过附加前缀和后缀告诉ViewResolver给出视图的完整位置,然后DispatcherServlet将视图传递给客户端。
DispatcherServlet的工作是获取一个传入URI并找到处理程序(通常是Controller类上的方法)和视图(通常是jsp)的正确组合,它们组合在一起形成应该在该位置找到的页面或资源。
我可能有
文件/WEB-INF/jsp/pages/Home.jsp 和类上的方法 @RequestMapping (value = " /页面/ home。") 私有ModelMap buildHome() { 返回somestuff; }
Dispatcher servlet“知道”在浏览器请求页面时调用该方法,并将其结果与匹配的JSP文件结合起来以生成html文档。
它如何实现这一点,随着配置和Spring版本的不同而有很大差异。
最终的结果也没有理由非得是网页。它可以做同样的事情来定位RMI端点、处理SOAP请求以及任何可以进入servlet的事情。
Dispatcher Controller显示在图中,所有传入的请求都被作为前端控制器的Dispatcher servlet拦截。 dispatcher servlet从XML文件获取到处理程序映射的条目,并将请求转发给Controller。
<?xml version='1.0' encoding='UTF-8' ?>
<!-- was: <?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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
<context:component-scan base-package="com.demo" />
<context:annotation-config />
<mvc:annotation-driven />
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" />
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="datasource" />
</bean>
<bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/employee" />
<property name="username" value="username" />
<property name="password" value="password" />
</bean>
</beans>