集成JAX-RS和Java servlet
我是一名大学生,目前正在为一个模块开发Android应用程序。正在将其连接到服务器以执行登录等操作。该部门为我们提供了一台服务器,并指示我们使用servlet。我宁愿以一种安静的方式来做,因为这似乎是一种行业标准。以下是我迄今为止编写的代码:集成JAX-RS和Java servlet,java,rest,servlets,Java,Rest,Servlets,我是一名大学生,目前正在为一个模块开发Android应用程序。正在将其连接到服务器以执行登录等操作。该部门为我们提供了一台服务器,并指示我们使用servlet。我宁愿以一种安静的方式来做,因为这似乎是一种行业标准。以下是我迄今为止编写的代码: import javax.ws.rs.QueryParam; /** * * @author Tom */ public class Login { public boolean doLogin(@QueryParam("email")
import javax.ws.rs.QueryParam;
/**
*
* @author Tom
*/
public class Login {
public boolean doLogin(@QueryParam("email") String email) {
return checkCredentials(email);
}
private boolean checkCredentials(String email){
boolean result = false;
if (email != ""){
try {
result = DBConnection.checkLogin(email);
} catch (Exception e) {
result = false;
}
} else {
result = false;
}
return result;
}
}
我编写了另一个类,DBConnection
,但它似乎工作正常(使用JDBC连接到MySQL数据库)
我遇到的问题是,当我运行Web服务器(使用Jetty
,而ant
是构建工具)并试图通过浏览器访问服务器上的页面时,它只会给我一个503,Servlet未初始化
错误。我假设这是因为我没有扩展HttpServlet
类?下面是他们给我们的一些Servlet代码示例:
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class Product extends HttpServlet
{
protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException
{
httpServletResponse.setContentType("text/plain");
PrintWriter out = httpServletResponse.getWriter();
out.println("Hello");
out.close();
}
}
他们给了我们一个名为JettyStart.java
的文件,当您运行ant时,该文件将启动web服务器:
import org.mortbay.jetty.Server;
import org.mortbay.jetty.servlet.ServletHttpContext;
public class JettyStart
{
public static void main(String[] args) throws Exception
{
//A server running at http://localhost:8085 is created
Server server = new Server();
server.addListener(":8085");
ServletHttpContext context = (ServletHttpContext) server.getContext("/");
context.addServlet("/path/to/Login", "package.name.Login");
server.start();
}
}
那么,我将如何将servlet集成到与服务器/数据库通信的Restful方法中呢?还是我做错了?我不确定这是否是一个答案,但如果您的项目基于maven并使用jetty maven插件,您可能会更走运。我个人有。如果您有一个可以生成简单maven原型的IDE,那么就很容易进行设置。您只需将插件放到pom中,然后从命令行运行mvnjetty:run。连接JAX-RS web服务并不太复杂,只需为它们提供正确的注释,如下所示:
package com.my.project.services;
// imports here
@Path("/login")
public class Login extends HttpServlet {
@GET
@Produces({"text/html", MediaType.TEXT_HTML})
public String getLoginInfo(@QueryParam("email") String email) {
// ...
}
}
只要您的web.xml设置正确,这就足以让JettyServlet容器获取它们。如果您使用maven webapp原型,这可能是为您完成的,否则您将不得不四处探索,但如果它有帮助,我的一个项目中的my web.xml(相关部分)就是这样的:
<web-app>
<servlet>
<servlet-name>rest</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.my.project.services</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>rest</servlet-name>
<url-pattern>/myproject/rest/*</url-pattern>
</servlet-mapping>
</web-app>
休息
com.sun.jersey.spi.container.servlet.ServletContainer
com.sun.jersey.api.json.POJOMappingFeature
真的
com.sun.jersey.config.property.packages
com.my.project.services
1.
休息
/我的项目/休息/*
这里的映射是将servlet名称“rest”映射到所有JAX-RS服务所在的包com.my.project.services,并在末尾附加@Path值(因此上面的登录服务将位于/myproject/rest/login)。可以按任何方式设置映射路径
编辑:应该提到我的项目也使用了Jersey。这里有一个很好的指南,可以帮助你建立这样一个项目:嗨,谢谢你的回答。这听起来比使用ant好,但不幸的是,服务器是与其他学生共享的,因此如果我更改构建过程,这将意味着其他学生将无法使用它。不过,我会更深入地研究,可能会有一个解决办法或其他什么。