Простое Javaee HTML Get / Post Application -- java поле с участием jakarta-ee поле с участием intellij-idea поле с участием glassfish поле с участием jax-rs пол Связанный проблема

Simple JavaEE HTML GET/POST application


1
vote

проблема

русский

Я просто начинаю с Javaee (я вполне свободно владею в Javase), и у меня возникли проблемы с обездованием моего мозга вокруг всех новых вещей, которые необходимы для того, чтобы сделать даже самые простые приложения. Прямо сейчас я пытаюсь использовать аннотации JAX-RS для генерации простых «Hello World» HTML-страницы в Intellij, используя Glassfish 4. Я искал для правильного использования этих аннотаций, и кажется, что я делаю это правильно , но я продолжаю получать 404, независимо от того, где я ориентироваться в Localhost. Я начинаю думать, что мне не хватает жизненно важных компонентов в моем коде, и я не знаю достаточно о 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>         <servlet-name>Faces Servlet</servlet-name>         <url-pattern>*.xhtml</url-pattern>     </servlet-mapping> </web-app>   

При взгляде на комментарий Лутца я исследовал проблему Base URL и в настоящее время просматриваю следующую ссылку: http: // www-01 .ibm.com / support / innowledgecenter / 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

Я буду обновлять соответственно.

Английский оригинал

I'm just starting out with JavaEE (I'm decently fluent in JavaSE) and am having trouble wrapping my brain around all the new things that are required to make even the simplest of applications. Right now I am trying to use JAX-RS annotations to generate a simple "Hello World" html page in IntelliJ using Glassfish 4. I've searched around for the proper use of these annotations, and it seems like I'm doing it correctly, but I keep getting a 404 no matter where I navigate in localhost. I'm starting to think I'm missing vital components in my code, and I don't know enough about JavaEE to know what I'm missing (perhaps it could be something in the web xml file, which I don't know too much about). Here is the code that I wrote, minus the imports:

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

The server itself is up and running and the application seems to deploy correctly. The default URL that is set up at launch time is "http://localhost:8080/HelloWorld_war_exploded/", so my understanding is that I should be going to http://localhost:8080/HelloWorld_war_exploded/hello/world to display the message.

EDIT: Here is my XML file, which I did not change at all:

<?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> 

Upon looking at Lutz's comment, I've investigated the base URL issue and am currently viewing the following 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

I will update accordingly.

</div
              
       
       

Список ответов

2
 
vote
vote
Лучший ответ
 

Вам нужно настроить Джерси (реализация JAX-RS в Glassfish) в вашем web.xml. У вас сейчас есть только конфигурация 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> - это база для вашего приложения Джерси. Так что вы бы использовали

 <код> 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;      } }   
 

You need to configure Jersey (the JAX-RS implementation in Glassfish) in your web.xml. You currently only have JSF configuration

<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> 

The <url-mapping> is the base for your Jersey app. So you would use

http://localhost:8080/HelloWorld_war_exploded/api/hello/world 

If you want to use Standard JAX-RS configuration, you can do

<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> 

This will scan your entire classpath for resources, so you don't need to specify the package, like the previous configuration.

Or you can use Java code

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

Leaving this class empty will also scan the entire classpath for your resources. Or you can add your classes explicitly

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

Связанный проблема

0  Выберите JVM при запуске зажигания  ( Select jvm when running spark job ) 
Как я могу пройти путь Java, чтобы выпить, чтобы выбрать JVM, который не по умолчанию (не в Java_home)? Мне не разрешено устанавливать какие-либо env vars в м...

12  Способ вызова в EJB на jboss запустить [дубликат]  ( Call method in ejb on jboss startup ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

1  Eclipse IDE отключается часто  ( Eclipse ide shuts down frequently ) 
Я пытался использовать SDK SDK SDK 22.3.0-887826, чтобы узнать о Develeopment Android, однако IDE отключается часто. Это происходит много, но в основном при и...

2  Как получить направление на кратчайший путь внешнего круга в Google Maps Android, когда мое текущее местоположение находится внутри 2 или более кругов?  ( How to get direction to the shortest path outside circle in google maps android ) 
Как получить направление к ближайшему расположению внешний круг, если голубые точки - текущее местоположение? 1 [ 1 и как отображать маркеры только во...

105  Почему C # реализует методы как не виртуальные по умолчанию?  ( Why c sharp implements methods as non virtual by default ) 
В отличие от Java, почему C # методы лечения как не виртуальные функции по умолчанию? Скорее всего, это проблема производительности, а не на других возможных ...

0  Java нерешенная переменная JPanel?  ( Java unresolved jpanel variable ) 
Почему не может <код> aniPanel быть разрешена в переменной. Я пробовал <код> AniPanel aniPanel = new AniPanel(); Но это не решает проблему. Я также по...

0  Как удалить начальное нулевое значение?  ( How to remove initial null value ) 
Я загружаю файл и отображаю его как ссылку ... но изначально, когда я загружаю страницу, она отображает нулевое значение ... Я хочу удалить это нулевое значен...

1  Получить все идентификаторы элементов из Dynamodb Java с помощью dynamodbmapper  ( Retrieve all items ids from dynamodb java using dynamodbmapper ) 
Моя цель - получить идентификаторы всех предметов. Для этого я собираюсь использовать Java и Dynamodbmapper. Способ сделать это использовать сканирование . П...

0  Чехол для тестирования, где нуль должен быть возвращен с помощью RestController с Mockito Change  ( Testing case where null should be returned using restcontroller with mockito fai ) 
Я хочу проверить корпус NullPointexception, который следует бросить контроллер, который я проверяю, но я всегда получаю ошибку NullPointexception. Я пытаюсь п...

1  WebView loaddatawithbaseurl java.lang.nullpointerexception  ( Webview loaddatawithbaseurl java lang nullpointerexception ) 
<код> //. . . public class MainActivity extends Activity { //. . . @Override protected void onCreate( Bundle savedInstanceState ) { //....

0  Basic Echo Server, отношения клиент-сервера  ( Basic echo server client server relationship ) 
Так как мой проект, который мне пришлось написать класс клиента и простой класс серверов, который будет эхом сообщение, написанным клиентом. По какой-то при...

-1  SQL Server для моего SQL  ( Sql server to my sql ) 
У меня есть новый проект от моего учителя, чтобы преобразовать базу данных в другую. Как я могу преобразовать базу данных MS SQL в MySQL с помощью Java? ...

0  Создание ссылки IPC между плагинами APC Java и C #  ( Establishing ipc link between a java app and c based plugins ) 
У нас есть приложение Java, а также ряд плагинов C #, для других приложений (например, Excel), которые могут взаимодействовать с основным приложением. Слой св...

0  Этикетки для вершин с использованием библиотеки Юнга  ( Labels for vertices using jung library ) 
Я начал использовать библиотеку Юнга для моей визуализации графика. Основная проблема в настоящее время в настоящее время я не знаю, как установить этикетки /...

0  ConstanaintValidator - сделать JPA сделать проверку после ввода  ( Constraintvalidator make jpa make the validation after input ) 
Можно ли сделать JPA проверить вход сразу после типов пользователей в чем-либо? Я использую EclipseLink. Я не хочу ждать, пока JPA сохраняется для проверк...

Связанный проблема

0  Выберите JVM при запуске зажигания 
12  Способ вызова в EJB на jboss запустить [дубликат] 
1  Eclipse IDE отключается часто 
2  Как получить направление на кратчайший путь внешнего круга в Google Maps Android, когда мое текущее местоположение находится внутри 2 или более кругов? 
105  Почему C # реализует методы как не виртуальные по умолчанию? 
0  Java нерешенная переменная JPanel? 
0  Как удалить начальное нулевое значение? 
1  Получить все идентификаторы элементов из Dynamodb Java с помощью dynamodbmapper 
0  Чехол для тестирования, где нуль должен быть возвращен с помощью RestController с Mockito Change 
1  WebView loaddatawithbaseurl java.lang.nullpointerexception 
0  Basic Echo Server, отношения клиент-сервера 
-1  SQL Server для моего SQL 
0  Создание ссылки IPC между плагинами APC Java и C # 
0  Этикетки для вершин с использованием библиотеки Юнга 
0  ConstanaintValidator - сделать JPA сделать проверку после ввода 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.