gpt4 book ai didi

spring - 有人可以解释一下 Spring web.xml 文件吗?

转载 作者:行者123 更新时间:2023-12-04 06:09:53 24 4
gpt4 key购买 nike

我是 Java Enterprise 和 Spring 的新手,但我对标准 Java 有很强的掌握。我正在查看现有的 Web 应用程序项目。该项目使用 Tomcat/Spring/Hibernate,我理解这是相当普遍的。它还使用 DWR 进行远程方法调用。我发现分离职责有点困难:Tomcat 负责什么,Spring 负责什么,请求如何从一个请求到另一个请求,以及 Spring 的主要部分如何组合在一起。我已经阅读了大量关于 Spring 的文档,特别是关于 bean 和 bean factory 的文档,我仍在阅读更多文档。欢迎大家提出任何建议,但我会提供一些具体问题。

问题 1:web.xml 适合什么地方(何时使用/调用,以及从何处调用)?

代码示例 1:

    <servlet>
<servlet-name>qrst</servlet-name>
<display-name>qrst Servlet</display-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

上面的代码片段做了什么(或者,它会导致什么发生)?在我的 Web 应用程序 qrst.jsp 中的某个时间点被使用;是使用 servlet 名称调用 qrst.jsp 的 DispatcherServlet 吗?否则 servlet 名称的意义是什么?什么是启动负载?

代码示例 2:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/someLocation/some-servlet.xml
</param-value>
</context-param>

以上内容的链接或解释?我可以通过查看 XML 文件看到它包含 bean 定义,并且我确实了解 bean 是什么以及它们是如何使用的,但我不知道关于此的任何其他详细信息,并且想了解。

代码示例 3:
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<display-name>DWR</display-name>
<servlet-class>
org.directwebremoting.servlet.DwrServlet
</servlet-class>
<init-param>
<param-name>classes</param-name>
<param-value>
somepackage.someclass
</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>

从我读到的关于 bean 的内容来看,我相信那些 init-param 元素只是在 servlet 的 java 类中设置的参数。 servlet 名称的意义是什么,启动时的负载如何? Web 应用程序以某种方式“知道”AJAX (dwr) 调用何时发生,而不是首次加载 Web 应用程序的时间(首次加载时应使用 qrst.jsp)。它怎么知道这个?它如何决定将请求路由到 DWR 而不是 qrst.jsp?它在哪里做到这一点?

谢谢。

最佳答案

Servlet 是 JavaEE 的回答用语 HTTP requests .您可以在响应请求的 Servlet 中对应用程序的行为进行编程。

Tomcat 是一个 Servlet 容器,这意味着您将应用程序部署在 Tomcat 中,它将为您管理所有通信基础设施:它接受连接、管理数据库连接 (*) 并将调用您的 servlet 来处理传入的请求。
web.xml是任何 JavaEE 应用程序的一部分,而不是 Spring。您的代码示例 1 声明您的应用程序将使用类 org.springframework.web.servlet.DispatcherServlet 的实例。处理传入的请求。

尽管 servlet 是 JavaEE 开发的基本基础,但不建议自己创建;相反,使用 Spring,您可以创建 MVC controllers .然后 DispatcherServlet 将调用这些 Controller 来处理请求。这只是另一个间接(但非常强大!)

is it the DispatcherServlet that calls qrst.jsp using the servlet name?



不直接。您的 servlet 和 JSP 文件具有相同的名称只是巧合。

What is loaded on startup?



您的代码示例 2 指示 DispatcherServlet 从文件 /someLocation/some-servlet.xml 加载 bean。 .如果有 Controller bean 在此文件中并根据您如何配置 网址映射 , 此文件中的 bean 将响应传入的请求。见 the reference .

I believe those init-param elements are just parameters that get set in the servlet's java class



web.xml 中的 init-param 元素用于 servlet 类。

The web app somehow "knows" when an AJAX (dwr) call is happening versus when the web app is being loaded for the first time (when its loading for the first time it should use qrst.jsp). How does it know this?



问题中缺少 <servlet-mapping>元素(在 web.xml 中找到),或 url 映射(在 spring 文件中找到)。它们负责决定 URL 应该由调度程序 servlet 还是 dwr servlet 处理。

例如,使用如下所示的 servlet 映射:
<servlet-mapping>
<servlet-name>qsrt</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>dwr</servlet-name>
<url-pattern>*.dwr</url-pattern>
</servlet-mapping>

然后所有以 .do 结尾的 URL将由调度程序 servlet 应答,以及以 .dwr 结尾的那些将由 dwr servlet 处理。这就是 servlet 名称很重要的地方。

JSP 文件是另一回事。容器将简单地使用它们来处理以 *.jsp 结尾的 URL。不要为以 *.jsp 结尾的 URL 创建 onw servlet 映射.这只会引起头痛。这可能是未指定的行为。

编辑:

However, the URL in the browser's address bar always looks the same: it would always invoke the qrst servlet



那么您的 servlet 映射可能非常广泛(类似于: <url-pattern>/*</url-pattern> ),以至于它可以处理您扔在服务器上的任何内容,并且永远不会给其他 servlet 处理它的机会。

最后但并非最不重要的一点是,在使用 DWR 或任何 Ajax 技术时,请安装 HttpFox extension for Firefox这样您就可以监控应用程序的 Ajax 调用。

关于spring - 有人可以解释一下 Spring web.xml 文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5837122/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com