Java tomcat7上的jersey servlet未找到,即使调试显示响应正确
我使用Jersey网站上的一个示例在NetBeans JEE 8.1中构建了一个简单的测试项目。我可以附加调试器,观察服务代码的执行情况,并生成包含JSON内容的已创建响应。发送到浏览器的是404而不是响应。我简化了服务代码,以消除除其余相关行之外的所有内容。该应用程序的代码为:Java tomcat7上的jersey servlet未找到,即使调试显示响应正确,java,servlets,jersey,jax-rs,java-ee-6,Java,Servlets,Jersey,Jax Rs,Java Ee 6,我使用Jersey网站上的一个示例在NetBeans JEE 8.1中构建了一个简单的测试项目。我可以附加调试器,观察服务代码的执行情况,并生成包含JSON内容的已创建响应。发送到浏览器的是404而不是响应。我简化了服务代码,以消除除其余相关行之外的所有内容。该应用程序的代码为: package com.domenix.resttestproject; import java.util.HashSet; import java.util.Set; import javax.ws.rs.Appl
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 );
}
}
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>
<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_-$&@#%!]{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_-$&@#%!]{8,20}" maxlength="20" placeholder="8-20 characters" required><br><br>
<input id="submitlogin" type="submit" value="Submit">
</fieldset>
</form>
</div>
</body>
</html>
休息试验
泽西岛休息服务
org.glassfish.jersey.servlet.ServletContainer
jersey.config.server.provider.packages
com.domenix.restestproject.TestApplication
1.
泽西岛休息服务
/*
index.html文件是:
<?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>
<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_-$&@#%!]{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_-$&@#%!]{8,20}" maxlength="20" placeholder="8-20 characters" required><br><br>
<input id="submitlogin" type="submit" value="Submit">
</fieldset>
</form>
</div>
</body>
</html>
数据服务测试
创建新用户
用户标识:
密码:
类型:
学生
生意
以用户身份登录
用户标识:
密码:
映射中似乎缺少了什么,是什么
谢谢。您的应用程序甚至配置不正确。但这并不能解释这种行为。1) 此init param
jersey.config.server.provider.packages
的param值应该是要扫描的包的名称。不是应用程序类。如果希望使用应用程序类而不是扫描,则应使用此参数名javax.ws.rs.application
。至于404,如果端点被击中,我不确定怎么会发生这种情况。我会一步一步地调试发送的响应,以查看返回后是否有任何其他错误。配置的另一个问题是,如果您使用的是url映射和应用程序类,则应该去掉@ApplictionPath
。它们是相似的。只会使用一个。没有测试,不知道哪一个将被使用,但你的甚至不匹配。扔掉一个。谢谢@peeskillet。就在我发布帖子之后,我开始升级到Windows10,但一直没有恢复。我今天就试试。谢谢你的帮助。@peeskillet,我仔细检查了一下,删除了web.xml,修复了代码上的标记,然后重新测试。它工作得很好,所以我在所有其他函数中都添加了,它们也可以工作。谢谢你的帮助。