当前位置: 首页 > 知识库问答 >
问题:

简单的JavaEE HTML GET/POST应用程序

佴涵蓄
2023-03-14

我刚刚开始使用JavaEE(我精通JavaSE),并且很难将我的大脑包裹在制作最简单的应用程序所需的所有新事物上。现在,我正在尝试使用JAX-RS注释使用Glassfish 4在IntelliJ中生成一个简单的“Hello World”html页面。我已经四处搜索了这些注释的正确使用,似乎我做得正确,但是无论我在 localhost 中的哪个位置导航,我都会不断得到 404。我开始认为我的代码中缺少重要的组件,而且我对JavaEE的了解还不够多,不知道是什么。我错过了(也许可能是 web 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>
        <html" target="_blank">servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>
</web-app>

在查看Lutz的评论后,我已经调查了基本URL问题,目前正在查看以下链接: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/1-3-0-28-2-0-1

我会相应地更新。

共有1个答案

花俊雄
2023-03-14

您需要在 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>

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>

这将扫描整个类路径以查找资源,因此您无需像以前的配置那样指定包。

或者你可以使用 Java 代码

@javax.ws.rs.ApplicationPath("/api")
public class RestApplication extends javax.ws.rs.core.Application {

}

将此类留空还将扫描整个类路径以查找资源。或者,您可以显式添加类

@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;
     }
}

 类似资料:
  • 初始化应用 让我们来开发一个简单的应用,通过这个应用可以学习到开发单页面应用所需的主要知识。 首先在项目文件夹下创建应用的入口文件 index.html: <!doctype html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scal

  • 在本章中,我们将了解如何在FuelPHP框架中创建一个简单的应用程序。 如前所述,您知道如何在Fuel中创建新项目。 我们可以举一个员工细节的例子。 让我们首先使用以下命令创建一个名为Employee的项目。 oil create employee 执行命令后,将使用以下file structure创建employee项目 - employee ├── CHANGELOG.md ├── co

  • 我在mongoDB 2.6.5和grails 2.4.4中遇到了一个无法解决的问题。为了隔离问题,我创建了一个简单的2.4.4 grails应用程序,安装了grails mongob插件(编译": mongob: 3.0.2"),注释掉Hibernate依赖项,添加了我的mongob数据源,并设置了一个简单的域类(com.nerds.Nerd)。当我生成-all然后启动应用程序并导航到NerdCo

  • 错误:不可转换类型 我的登录文件的代码: 我的struts配置文件的代码: 我的loginform文件的代码 公共类LoginForm{String userName;String password;公共字符串getUserName(){System.out.println(“内部getter”userName);返回userName;}public void setUserName(字符串用户名

  • 我有一个非常简单的Rails3.2.6应用程序。我多年来一直使用Heroku来托管原型,总是在免费层上。我终于在我最新的应用程序上添加了一个付费的dyno,并添加了新的Relic来监控性能。 我在极其简单的页面上看到4500+ms的请求时间,几乎零流量(我们还没有推出)。New Relic表示,99%的时间都花在了渲染模板上。这是一个75行完全静态的haml模板内的100行布局。应用程序模板具有标

  • 本文向大家介绍AngularJS教程之简单应用程序示例,包括了AngularJS教程之简单应用程序示例的使用技巧和注意事项,需要的朋友参考一下 按以下步骤来创建AngularJS应用  第1步:加载框架 作为一个纯粹的JavaScript框架,它可以使用<script>标签来添加。 第2步:使用ng-app指令定义AngularJS应用 第3步:用 ng-model指令定义的模式名称 <p>Ent

  • 问题内容: 我目前正在使用Jetty hightide vesion 7作为独立服务器。我有一个简单的Web项目,上面有几个jsp和后备类,目前正以未爆炸的方式部署到JETTY_HOME / webapps目录。 当前,jetty可以轻松获取任何静态的jsp / html更改。如果我理解正确,我可以配置我的应用程序,以便码头可以在不重新启动服务器的情况下进行任何类更改?我目前在我的jetty-we

  • 线程“main”中的异常javax.naming.NoFirst alContextException:需要在环境或系统属性中指定类名,或者作为小程序参数,或者在应用程序资源文件中指定类名:java.naming.factory.initialjavax.naming.spi.NamingManager.getjavax.naming.的初始上下文(未知源)ontext.getjavax.nami