为什么不直接调用servlet? web.xml中

时间:2015-12-25 21:37:43

标签: jsp web.xml

对于某些人来说,这可能是一个显而易见的问题,但我正在努力深入了解JSP web.xml文件。

到目前为止,我对web.xml文件的理解是,我们可以将虚构的URL映射到内部名称到物理servlet。

  <servlet>
    <servlet-name>internalName</servlet-name>
    <servlet-class>dk.something.servlets.Servlet1</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>internalName</servlet-name>
    <url-pattern>/fictionalUrl.do</url-pattern>
  </servlet-mapping>

最终用户将看到fictionalUrl.do。

但是为什么我们不直接调用servlet?为什么我们需要/想要创建一个虚构的网址呢?

我尝试了谷歌这个主题,但我能得到的只是一个模糊的解释,直接调用servlet会带来安全风险,但他们对这个问题没有更深入的解释。

我也看到最后使用.do的例子是他们的具体原因吗?

2 个答案:

答案 0 :(得分:1)

  

但是为什么我们不直接调用servlet?为什么我们需要/想要创建一个虚构的网址呢?

那是因为浏览器不了解JAVA代码。浏览器理解通常用标签(HTML,JSP,XML,...)定义的一组语言。如果直接将servlet调用到浏览器中,它就不会理解所有代码。这就是为什么你需要使用包含浏览器可以理解的东西的JSP页面,以便在JAVA代码和浏览器之间建立桥梁。这是MVC (Model-View-Controller) Framework

  

我也看到最后使用.do的例子是他们的具体原因吗?

不,没有。您可以使用.jsp或更好,没有。

答案 1 :(得分:1)

  

但是为什么我们不直接调用servlet?我们为什么需要/想要   在它面前创建一个虚构的网址?

我们需要指定一个URL路径,以便允许服务器将请求定向到正确的servlet。此路径可以与servlet名称相同/相似,但出于安全原因,我们可能决定不希望将应用程序的内部暴露给外部世界。因此,使用不同的URL路径是个好主意。拥有不同路径的另一个原因是我们可能希望为最终用户提供更好的URL路径。当然,没有什么可以阻止你让servlet类,servlet名称和URL路径几乎相同。

为什么我们不直接将URL映射到servlet类,而是需要通过URL将servlet名称转换为servlet类映射? 好吧,我们可能多次使用相同的servlet类,例如,如果我们想为不同的用例配置不同的servlet类。

<servlet>
  <servlet-name>HelloWorld</servlet-name> 
  <servlet-class>examples.HelloWorld</servlet-class>

  <init-param>
    <param-name>greeting</param-name> 
    <param-value>Welcome</param-value> 
  </init-param>
</servlet>
<servlet>
  <servlet-name>HelloWorld2</servlet-name> 
  <servlet-class>examples.HelloWorld</servlet-class>

  <init-param>
    <param-name>greeting</param-name> 
    <param-value>Hello</param-value> 
  </init-param>
</servlet>

请注意,我们也可能将多个URL路径映射到同一个servlet,而在早期的 web.xml 标准中,一个映射只包含一个URL(自servlet 2.5标准以来不再是这种情况)。肯定还有其他方法可以解决这个问题,但是 web.xml 格式的早期设计师采用了使用name to class然后命名为URL映射的方向,因为它提供了高度的灵活性和可配置性

  

我也看到最后使用.do的例子,是他们的具体内容   原因是什么?

这只是作者选择的惯例,因为他/她发现在末尾说“do”表示对此URL的调用将执行某些操作。

相关问题