有人能解释一下SpringWeb.xml文件吗?

有人能解释一下SpringWeb.xml文件吗?,spring,dwr,Spring,Dwr,我不熟悉Java Enterprise和Spring,但我对标准Java有很强的掌握。我正在浏览一个现有的web应用程序项目。该项目使用Tomcat/Spring/Hibernate,据我所知这是相当常见的。它还使用DWR进行远程方法调用。我发现区分责任有点困难:Tomcat负责什么,Spring负责什么,请求如何从一个请求传递到另一个请求,以及Spring的主要部分如何组合在一起。我已经阅读了大量关于Spring的文档,特别是关于beans和bean factory的文档,目前仍在阅读更多的文

我不熟悉Java Enterprise和Spring,但我对标准Java有很强的掌握。我正在浏览一个现有的web应用程序项目。该项目使用Tomcat/Spring/Hibernate,据我所知这是相当常见的。它还使用DWR进行远程方法调用。我发现区分责任有点困难:Tomcat负责什么,Spring负责什么,请求如何从一个请求传递到另一个请求,以及Spring的主要部分如何组合在一起。我已经阅读了大量关于Spring的文档,特别是关于beans和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>

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

代码示例2:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /someLocation/some-servlet.xml
    </param-value>
</context-param>

上下文配置位置
/someLocation/some-servlet.xml
以上内容的链接或解释?通过查看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>

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


谢谢

Servlets是JavaEE用来回答问题的习惯用法。您可以在一个Servlet中对应用程序的行为进行编程,该Servlet将响应请求

Tomcat是一个Servlet容器,这意味着您可以在Tomcat中部署应用程序,它将为您管理所有通信基础设施:它接受连接,管理数据库连接(*),并调用Servlet来处理传入的请求

web.xml
是任何JavaEE应用程序的一部分,而不是Spring。您的代码示例1声明您的应用程序将使用类
org.springframework.web.servlet.DispatcherServlet
的实例来处理传入请求

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

是DispatcherServlet使用servlet名称调用qrst.jsp吗

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

启动时加载的是什么

代码示例2指示DispatcherServlet从文件
/someLocation/someservlet.xml
加载bean。如果此文件中有控制器bean,并且根据您如何配置url映射,此文件中的bean将响应传入的请求。看

我相信这些init param元素只是在servlet的java类中设置的参数

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

web应用不知何故“知道”何时发生AJAX(dwr)调用,何时首次加载web应用(首次加载时应使用qrst.jsp)。它是怎么知道的

问题中缺少
元素(位于web.xml中)或url映射(位于spring文件中)。它们负责决定是由dispatcher servlet还是dwr servlet处理URL

例如,使用如下所示的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>

qsrt
*.做
dwr
*D.dwr
然后,所有以
.do
结尾的URL将由dispatcher servlet应答,而那些以
.dwr
结尾的URL将由dwr servlet处理。这里是servlet的名称很重要的地方

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

编辑:

但是,浏览器地址栏中的URL看起来总是一样的:它总是调用qrst servlet

然后,您的servlet映射可能非常广泛(比如:
/*
),它将处理您向服务器抛出的任何内容,而不会让其他servlet有机会处理它


最后但并非最不重要的一点是,在使用DWR或任何Ajax技术时,请安装,以便可以监视应用程序的Ajax调用。

非常感谢您的帮助。我确实为qrst和dwr调用程序定义了一个servlet映射,所以您所说的对我来说很有意义!但是,浏览器地址栏中的URL看起来总是一样的:它总是调用qrst servlet。dwr在发出请求之前是否可以在javascript代码中设置URL?我已经找了一点,但是如果我愿意的话,我没有看到类似的东西