简单的 JavaEE HTML GET/POST 应用程序
Simple JavaEE HTML GET/POST application
我刚刚开始使用 JavaEE(我的 JavaSE 相当流利),但我无法全神贯注地思考制作最简单的应用程序所需的所有新事物。现在我正在尝试使用 JAX-RS 注释在使用 Glassfish 4 的 IntelliJ 中生成一个简单的 "Hello World" html 页面。我已经搜索了这些注释的正确用法,看起来我做得正确,但无论我在 localhost 中导航到哪里,我都会收到 404。我开始认为我的代码中缺少重要的组件,而且我对 JavaEE 的了解不够了解我缺少的东西(也许它可能是网络 xml 文件中的东西,我不太了解)。这是我写的代码,减去导入:
@LocalBean
@Stateless
@Path("/hello")
@Produces("text/html")
public class Hello {
@GET
@Path("/world")
public String printHelloWorld() {
return "<html lang=\"en\"><body><h1>Hello, World!</h1></body></html>";
}
}
服务器本身已启动,运行并且应用程序似乎已正确部署。在启动时设置的默认 URL 是“http://localhost:8080/HelloWorld_war_exploded/”,
所以我的理解是我应该去
http://localhost:8080/HelloWorld_war_exploded/hello/world
显示消息。
编辑:这是我的 XML 文件,我根本没有更改它:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
</web-app>
在查看 Lutz 的评论后,我调查了基础 URL 问题,目前正在查看以下内容 link:http://www-01.ibm.com/support/knowledgecenter/SSAW57_8.5.5/com.ibm.websphere.nd.doc/ae/twbs_jaxrs_configwebxml.html?cp=SSAW57_8.5.5%2F1-3-0-28-2-0-1
我会相应地更新。
您需要在 web.xml 中配置 Jersey(Glassfish 中的 JAX-RS 实现)。您目前只有 JSF 配置
<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>the.package.where.your.resources.are</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-serlvet</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
<url-mapping>
是 Jersey 应用程序的基础。所以你会使用
http://localhost:8080/HelloWorld_war_exploded/api/hello/world
如果你想使用标准 JAX-RS 配置,你可以
<servlet>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
这将扫描整个 class 资源路径,因此您无需像之前的配置那样指定包。
或者您可以使用Java代码
@javax.ws.rs.ApplicationPath("/api")
public class RestApplication extends javax.ws.rs.core.Application {
}
将此 class 留空也会扫描整个 class 路径以查找您的资源。或者您可以显式添加 classes
@javax.ws.rs.ApplicationPath("/api")
public class RestApplication extends javax.ws.rs.core.Application {
@Override
public Set<Class<?>> getClasess() {
Set<Class<?>> classes = new HashSet<>();
classes.add(Hello.class);
return classes;
}
}
我刚刚开始使用 JavaEE(我的 JavaSE 相当流利),但我无法全神贯注地思考制作最简单的应用程序所需的所有新事物。现在我正在尝试使用 JAX-RS 注释在使用 Glassfish 4 的 IntelliJ 中生成一个简单的 "Hello World" html 页面。我已经搜索了这些注释的正确用法,看起来我做得正确,但无论我在 localhost 中导航到哪里,我都会收到 404。我开始认为我的代码中缺少重要的组件,而且我对 JavaEE 的了解不够了解我缺少的东西(也许它可能是网络 xml 文件中的东西,我不太了解)。这是我写的代码,减去导入:
@LocalBean
@Stateless
@Path("/hello")
@Produces("text/html")
public class Hello {
@GET
@Path("/world")
public String printHelloWorld() {
return "<html lang=\"en\"><body><h1>Hello, World!</h1></body></html>";
}
}
服务器本身已启动,运行并且应用程序似乎已正确部署。在启动时设置的默认 URL 是“http://localhost:8080/HelloWorld_war_exploded/”, 所以我的理解是我应该去 http://localhost:8080/HelloWorld_war_exploded/hello/world 显示消息。
编辑:这是我的 XML 文件,我根本没有更改它:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
</web-app>
在查看 Lutz 的评论后,我调查了基础 URL 问题,目前正在查看以下内容 link:http://www-01.ibm.com/support/knowledgecenter/SSAW57_8.5.5/com.ibm.websphere.nd.doc/ae/twbs_jaxrs_configwebxml.html?cp=SSAW57_8.5.5%2F1-3-0-28-2-0-1
我会相应地更新。
您需要在 web.xml 中配置 Jersey(Glassfish 中的 JAX-RS 实现)。您目前只有 JSF 配置
<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>the.package.where.your.resources.are</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-serlvet</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
<url-mapping>
是 Jersey 应用程序的基础。所以你会使用
http://localhost:8080/HelloWorld_war_exploded/api/hello/world
如果你想使用标准 JAX-RS 配置,你可以
<servlet>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
这将扫描整个 class 资源路径,因此您无需像之前的配置那样指定包。
或者您可以使用Java代码
@javax.ws.rs.ApplicationPath("/api")
public class RestApplication extends javax.ws.rs.core.Application {
}
将此 class 留空也会扫描整个 class 路径以查找您的资源。或者您可以显式添加 classes
@javax.ws.rs.ApplicationPath("/api")
public class RestApplication extends javax.ws.rs.core.Application {
@Override
public Set<Class<?>> getClasess() {
Set<Class<?>> classes = new HashSet<>();
classes.add(Hello.class);
return classes;
}
}