即使调试显示响应正确,也找不到tomcat7上的jersey servlet

时间:2016-04-17 02:38:01

标签: java servlets jersey jax-rs java-ee-6

我使用Jersey网站上的一个示例在NetBeans JEE 8.1中构建了一个简单的测试项目。我可以附加调试器并观察正在执行的服务代码并生成带有JSON内容的CREATED响应。发送到浏览器的是404而不是响应。我已经简化了服务代码以消除除REST相关线之外的其他问题。该应用程序的代码是:

package com.domenix.resttestproject;

import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

/**
 *
 * @author tswanson
 */
@ApplicationPath("/test")
public class TestApplication extends Application
{

  /**
   *
   * @return
   */
  @Override
  public Set<Class<?>> getClasses()
  {
    final Set<Class<?>> retValue = new HashSet<Class<?>>();
    retValue.add( SvcsService.class );
    return( retValue );
  }
}

该服务的代码是:

package com.domenix.resttestproject;

import javax.json.Json;
import javax.json.JsonObjectBuilder;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;

import java.util.concurrent.atomic.AtomicInteger;
import javax.json.JsonObject;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response.ResponseBuilder;

/**
 *
 * @author tswanson
 */
@Path("/svcs")
public class SvcsService
{
  AtomicInteger idGen = new AtomicInteger(1);

  @Path("/create")
  @Consumes("application/x-www-form-urlencoded")
  @Produces("application/json")
  public Response createUser( @FormParam("userid") String userId ,
                              @FormParam("password") String pwd ,
                              @FormParam("role") String role )
  {
    JsonObjectBuilder bldr = Json.createObjectBuilder();
    JsonObject resp = bldr.add( "userIdx" , idGen.getAndIncrement() )
                          .add( "userName" , userId )
                          .add( "pwd" , pwd )
                          .add( "role" , role ).build();
    ResponseBuilder respBldr = Response.ok( resp.toString() ,
                   MediaType.APPLICATION_JSON_TYPE );
    respBldr.status( HttpServletResponse.SC_CREATED );
    Response myResp = respBldr.build();

    return( myResp );
  }
}

web.xml文件是:

    <?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" 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>REST Test</display-name>
 <servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
     <!-- Register resources and providers under com.vogella.jersey.first package. -->
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.domenix.resttestproject.TestApplication</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>

index.html文件是:

    <html>
  <head>
    <title>Data Service Testing</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  </head>
  <body>
    <div>
      <p>
      <form id="createuser" action="test/svcs/create" method="POST">
        <fieldset>
          <legend>Create a new user</legend>
          <label for="userid"><b>Userid:</b> </label>
          <input id="userid" name="userid" type="text" placeholder="Required" maxlength="32" autofocus required><br><br>
          <label for="password"><b>Password:</b> </label>
          <input id="password" name="password" type="password" pattern="[a-zA-Z0-9_-$&amp;@#%!]{8,20}" maxlength="20"  placeholder="8-20 characters" required><br><br>
          <label for="usertypes"><b>Type:</b> </label>
          <select id="usertypes" name="role" required>
            <option value="Student" selected>Student</option>
            <option value="Business">Business</option>
          </select><br><br>
          <input id="submitbutton" type="submit" value="Submit">
        </fieldset>
      </form><br><br>
      <form id="loginuser" action="test/svcs/login" method="POST">
        <fieldset>
          <legend>Login as a user</legend>
          <label for="loginid"><b>Userid:</b> </label>
          <input id="loginid" name="UserID" type="text" placeholder="Required" maxlength="32" autofocus required><br><br>
          <label for="loginpwd"><b>Password:</b> </label>
          <input id="loginpwd" name="Password" type="password" pattern="[a-zA-Z0-9_-$&amp;@#%!]{8,20}" maxlength="20"  placeholder="8-20 characters" required><br><br>
          <input id="submitlogin" type="submit" value="Submit">
        </fieldset>
      </form>
    </div>
  </body>
</html>

映射中似乎缺少某些东西,它是什么?

感谢。

0 个答案:

没有答案