Java web.xml中url模式的意义是什么?如何配置servlet?

Java web.xml中url模式的意义是什么?如何配置servlet?,java,servlets,web.xml,url-pattern,servlet-mapping,Java,Servlets,Web.xml,Url Pattern,Servlet Mapping,我已经为我的应用程序手动配置了web.xml。现在,我在运行应用程序时遇到了一些问题。我正试图从我的jsp页面访问我的servlet。但是,它抛出错误,因为未找到页面 servlet放在下面的文件夹位置下 <application folder>/WEB-INF/classes/<package> /WEB-INF/classes/ 那么,在url模式和servlet映射中,servlet的条目应该是什么呢。因此,可以通过URL访问servlet。URL模式在web.

我已经为我的应用程序手动配置了
web.xml
。现在,我在运行应用程序时遇到了一些问题。我正试图从我的
jsp
页面访问我的
servlet
。但是,它抛出错误,因为未找到
页面

servlet放在下面的文件夹位置下

<application folder>/WEB-INF/classes/<package>
/WEB-INF/classes/

那么,在
url模式
servlet映射
中,servlet的条目应该是什么呢。因此,可以通过URL访问
servlet

URL模式在
web.xml
中用于将
servlet
映射到特定的URL。请参阅下面的xml代码,您可以在
web.xml
配置文件中找到类似的代码

<servlet>
    <servlet-name>AddPhotoServlet</servlet-name>  //servlet name
    <servlet-class>upload.AddPhotoServlet</servlet-class>  //servlet class
</servlet>
 <servlet-mapping>
    <servlet-name>AddPhotoServlet</servlet-name>   //servlet name
    <url-pattern>/AddPhotoServlet</url-pattern>  //how it should appear
</servlet-mapping>

AddPhotoServlet//servlet名称
upload.AddPhotoServlet//servlet类
AddPhotoServlet//servlet名称
/AddPhotoServlet//它应该如何显示
如果将
AddPhotoServlet
url模式从
/AddPhotoServlet
更改为
/MyUrl
。然后,可以使用
/MyUrl
访问
AddPhotoServlet
servlet。出于安全考虑,您需要在其中隐藏实际页面URL

Javaservlet
url模式
规范:

  • 一个字符串,以'/'字符开头,以'/*' 后缀用于路径映射
  • 以“*”开头的字符串。 前缀用作扩展映射
  • 仅包含'/'字符的字符串表示应用程序的“默认”servlet。在本例中,servlet路径 请求URI减去上下文路径,路径信息为 空
  • 所有其他字符串仅用于精确匹配
  • 参考:


    您还可以阅读此

    Servlet映射有两个子标记,url模式和Servlet名称。url模式指定应调用servlet名称中给定的servlet的url类型。请注意,容器将使用区分大小写的字符串比较来进行servlet匹配

    server.com上servlet容器上服务器上下文的
    web.xml
    文件的
    url模式的第一个规范与
    /status/*
    中的模式匹配,如下所示:

    http://server.com/server/status/synopsis               = Matches
    http://server.com/server/status/complete?date=today    = Matches
    http://server.com/server/status                        = Matches
    http://server.com/server/server1/status                = Does not match
    
     http://server.com/server/US/Oregon/Portland.map    = Matches
     http://server.com/server/US/server/Seattle.map     = Matches
     http://server.com/server/Paris.France.map          = Matches
     http://server.com/server/US/Oregon/Portland.MAP    = Does not match, the extension is uppercase
     http://example.com/examples/interface/description/mail.mapi  =Does not match, the extension is mapi rather than map`
    
    url模式的第二个规范
    位于example.com代理上的路径/示例的上下文与
    *.map
    中的模式匹配,如下所示:

    http://server.com/server/status/synopsis               = Matches
    http://server.com/server/status/complete?date=today    = Matches
    http://server.com/server/status                        = Matches
    http://server.com/server/server1/status                = Does not match
    
     http://server.com/server/US/Oregon/Portland.map    = Matches
     http://server.com/server/US/server/Seattle.map     = Matches
     http://server.com/server/Paris.France.map          = Matches
     http://server.com/server/US/Oregon/Portland.MAP    = Does not match, the extension is uppercase
     http://example.com/examples/interface/description/mail.mapi  =Does not match, the extension is mapi rather than map`
    
    url映射的第三个规范
    url映射
    ,如果没有其他模式匹配,则包含模式
    /
    的映射将匹配请求。这是默认映射。映射到此模式的servlet称为默认servlet

    默认映射通常指向应用程序的第一页。显式提供默认映射还可以确保应用程序处理格式错误的URL请求,而不是返回错误

    下面的servlet映射元素将
    server
    servlet实例映射到默认映射

    <servlet-mapping>
      <servlet-name>server</servlet-name>
      <url-pattern>/</url-pattern>
    </servlet-mapping>
    
    
    服务器
    /
    
    对于包含此元素的上下文,任何未由另一个映射处理的请求都将转发到
    服务器
    servlet

    最重要的是,我们应该了解URL路径映射的规则

  • 容器将尝试找到请求路径与servlet路径的精确匹配。成功匹配将选择servlet
  • 容器将递归地尝试匹配最长路径前缀。这是通过使用“/”字符作为路径分隔符,一次将路径树从一个目录中删除来完成的。最长匹配确定所选的servlet
  • 如果URL路径中的最后一段包含扩展名(例如.jsp),servlet容器将尝试匹配处理扩展名请求的servlet。扩展名定义为最后一个“.”字符后最后一段的一部分
  • 如果前三个规则都没有导致servlet匹配,那么容器将尝试提供适合所请求资源的内容。如果为应用程序定义了“默认”servlet,则将使用它

  • 参考

    仅添加一点,如果OP使用的是支持servlet 3.0的Web应用程序servlet,则无需在Web.xml中配置servlet。对于
    /AddPhotoServlet
    示例,有一个很好的解释——该Servlet是否可以通过
    http://AddPhotoServlet.company.com/
    ?还是可以通过
    http://company.com/AddPhotoServlet
    ?首先阅读servlet规范和映射。请参考@var_给出的答案。如果您再次面临问题或异常,请粘贴有问题的异常,社区将尝试调试该问题。您应该接受答案,让社区从中受益。