【问题标题】:Scanning rest resources in application with existing servlets使用现有 servlet 扫描应用程序中的剩余资源
【发布时间】:2012-03-02 20:59:05
【问题描述】:

我有一个应用程序,它同时具有 Rest 资源和自定义 servlet,配置如下。跟着它,rest资源是可达的,但是servlet是不可达的。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name></display-name>
<listener>
    <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>
<context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>true</param-value>
</context-param>
<context-param>
    <param-name>resteasy.servlet.mapping.prefix</param-name>
    <param-value>/abc/api/*</param-value>
</context-param>
<servlet>
    <description></description>
    <display-name>Servlet1</display-name>
    <servlet-name>Servlet1</servlet-name>
    <servlet-class>com.servlet.Servlet1</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Servlet1<servlet-name>
    <url-pattern>/abc/*</url-pattern>
</servlet-mapping>

【问题讨论】:

  • 功能需求是什么?到目前为止发布的配置,/abc/api/* 上的所有请求都将调用 Rest 资源,但 不是 servlet。只有在/abc/* 匹配/abc/api/* 的请求才应该调用servlet。
  • 是的,基本要求与您阐述的完全一样,但不知何故不起作用。
  • 您使用的是哪个 servlet 容器?
  • 我使用您的 web.xml 文件进行了测试,我无法启动 Tomcat 7 服务器,出现 servlet 映射错误,请查看与其他问题 stackoverflow.com/questions/8581770/… 相关的 @Balusc 答案,我我有点困惑,因为你说休息很轻松,因为我根本无法启动服务器

标签: jsp rest servlets resteasy


【解决方案1】:

我使用一个简单的应用程序进行了测试,就 servlet 而言,以下配置有效。 您的 web.xml 和我的唯一变化是 metadata-complete=true,我没有测试其余部分,尽管只有 servlet 部分

http://serverurl/contextRoot/abc/Servlet1(有效)

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web- app_3_0.xsd" 
    id="WebApp_ID" version="3.0" metadata-complete="true">
     <display-name></display-name>
       <context-param>
             <param-name>resteasy.scan</param-name>
             <param-value>true</param-value>
        </context-param>
       <context-param>
           <param-name>resteasy.servlet.mapping.prefix</param-name>
           <param-value>/abc/api/*</param-value>
        </context-param>
  <listener>
   <display-name>Rest Easy JBOSS</display-name>
   <listener-class>
        org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
    </listener>
    <servlet>
       <display-name>Servlet1</display-name>
       <servlet-name>Servlet1</servlet-name>
       <servlet-class>prasanna.servlets.PrintEnvServlet</servlet-class>
       <load-on-startup>1</load-on-startup>
     </servlet>
     <servlet-mapping>
      <servlet-name>Servlet1</servlet-name>
       <url-pattern>/abc/*</url-pattern>
      </servlet-mapping>
   </web-app>

我的 Servelt 课程

    public class PrintEnvServlet extends HttpServlet 
    {

   private static final long serialVersionUID = 4765435575183820979L;

   protected void doGet(javax.servlet.http.HttpServletRequest req,     javax.servlet.http.HttpServletResponse resp) throws javax.servlet.ServletException, java.io.IOException
    {
     java.util.Map<String,String> mapOfEnv = System.getenv();
     StringBuilder builder = new StringBuilder();
     for(String key : mapOfEnv.keySet())
     {
        builder.append(key);
        builder.append(":");
        builder.append(mapOfEnv.get(key));
        builder.append("\n\n");
     }
     resp.getWriter().write(builder.toString());
    }

 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多