我是Java Enterprise和Spring的新手,但我对标准Java有很强的把握.我正在查看现有的Web应用程序项目.该项目使用Tomcat/Spring/Hibernate,我理解这是相当普遍的.它还使用DWR进行远程方法调用.我发现分离职责有点困难:Tomcat负责什么,Spring负责什么,请求如何从一个到另一个,以及Spring的主要部分如何组合在一起.我已经阅读了大量有关Spring的文档,特别是有关bean和bean工厂的文档,我还在阅读更多内容.我们欢迎您提出任何建议,但我会提供一些具体问题.
问题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>
Run Code Online (Sandbox Code Playgroud)
上面的代码片段做了什么(或者它会导致什么原因发生)?在我的网络应用程序的某些时候,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>
Run Code Online (Sandbox Code Playgroud)
链接或解释上述内容的作用?我可以从查看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>
Run Code Online (Sandbox Code Playgroud)
从我读到的关于bean的内容来看,我相信那些init-param元素只是在servlet的java类中设置的参数.servlet名称的重要性是什么,以及启动时的负载如何?Web应用程序以某种方式"知道"何时发生AJAX(dwr)调用,而不是第一次加载Web应用程序时(第一次加载时应该使用qrst.jsp).怎么知道这个?它如何决定将请求路由到DWR而不是qrst.jsp?这是做什么的?
谢谢.
Leo*_*nel 13
Servlet是JavaEE用于回答HTTP请求的习惯用语.您可以在Servlet中编写应用程序的行为,该Servlet将响应请求.
Tomcat是一个Servlet容器,这意味着您在Tomcat中部署应用程序,它将为您管理所有通信基础结构:它接受连接,管理数据库连接(*)并将调用您的servlet来处理传入的请求.
web.xml
是任何JavaEE应用程序的一部分,而不是Spring.您的代码示例1声明您的应用程序将使用类的实例org.springframework.web.servlet.DispatcherServlet
来处理传入的请求.
虽然servlet是JavaEE开发的基础,但建议不要创建自己的; 相反,使用Spring,您可以创建MVC控制器.然后DispatcherServlet将调用这些控制器来处理请求.这只是另一个间接(但非常强大!)
是DispatcherServlet使用servlet名称调用qrst.jsp吗?
不是直接的.您的servlet和JSP文件具有相同的名称只是巧合.
启动时加载了什么?
您的代码示例2指示DispatcherServlet从文件加载bean /someLocation/some-servlet.xml
.如果此文件中存在控制器bean,并且根据您配置url映射的方式,此文件中的bean将应答传入的请求.参见参考文献.
我相信那些init-param元素只是在servlet的java类中设置的参数
web.xml中的init-param元素用于servlet类.
Web应用程序以某种方式"知道"何时发生AJAX(dwr)调用,而不是第一次加载Web应用程序时(第一次加载时应该使用qrst.jsp).怎么知道这个?
缺少问题的是<servlet-mapping>
元素(在web.xml中找到)或url映射(在spring文件中找到).这些负责决定是否应由调度程序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>
Run Code Online (Sandbox Code Playgroud)
然后,所有以URL结尾的URL .do
将由调度程序servlet应答,而以结尾的所有URL .dwr
将由dwr servlet处理.这里是servlet名称的重要部分.
JSP文件是一个不同的故事.容器将简单地使用它们来处理以*.jsp结尾的URL.不要为以...结尾的URL创建onw servlet映射*.jsp
.这只会引起头痛.这可能是未指明的行为.
编辑:
但是,浏览器地址栏中的URL看起来总是一样的:它总是会调用第一个servlet
那么你的servlet映射可能是如此宽泛(类似于:) <url-pattern>/*</url-pattern>
,它将处理你在服务器上抛出的任何内容,并且永远不会让其他servlet处理它.
最后但并非最不重要的是,在使用DWR或任何Ajax技术时,请安装适用于Firefox的HttpFox扩展,以便您可以监视应用程序的Ajax调用.
归档时间: |
|
查看次数: |
8055 次 |
最近记录: |