Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [jetty-users] Either OR but not Both.

A reminder this is the Main function I am working with for jetty 11.


import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;

/**
 *  This class launches the web application in an embedded Jetty container.
 *  This is the entry point to your application. The Java
 *  command that is used for launching should fire this main method.
 */

public class Main {

    public static void main(String[] args) throws Exception{
        // The port that we should run on can be set into an environment variable
        // Look for that variable and default to 8080 if it isn't there.
        String webPort = System.getenv("PORT");
        if (webPort == null || webPort.isEmpty()) {
            webPort = "8080";
        }

        final Server server = new Server(Integer.valueOf(webPort));
        final WebAppContext root = new WebAppContext();

        root.setContextPath("/");
        root.setParentLoaderPriority(true);

        final String webappDirLocation = "src/main/webapp/";
        root.setDescriptor(webappDirLocation + "/WEB-INF/web.xml");
        root.setResourceBase(webappDirLocation);

        server.setHandler(root);

        server.start();
        server.join();
    }
}


On Mon, 5 Apr 2021, 01:31 Som Lima, <somplasticllc@xxxxxxxxx> wrote:
Thank you I also agree that is the correct jetty  reponse.

I am using embedded  jetty 11.
Using webAppContext for configuration.
we also have agreed that 
 " in jetty 11 there is indeed no ClassList, so that part is "broken".  ".

What  other method of configuration I  have available  for  adding  features as and when I need them  
to the embedded jetty 11  org.eclipse.jetty.server.Server object  apart from using ServletContextHandler   ?

Please send me  link showing the instructions.





On Sun, 4 Apr 2021, 23:23 Greg Wilkins, <gregw@xxxxxxxxxxx> wrote:
Som,

Without a web.xml, the Jersey servlet is not setup to handle requests.   
Without Jersey, there is nothing in Jetty to map any request to MyResource.

Unless there is something annotated or in a discovered webfragment, then Jetty has no handler for that request and 404 is the correct response.

regards



On Mon, 5 Apr 2021 at 00:10, Som Lima <somplasticllc@xxxxxxxxx> wrote:
Let me put it another way.
If I remove web.xml why does the following code  give me 404  in jetty 11 ?


import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;

/**
 * Root resource (exposed at "myresource" path)
 */
@Path("myresource")
public class MyResource {

    /**
     * Method handling HTTP GET requests. The returned object will be sent
     * to the client as "text/plain" media type.
     *
     * @return String that will be returned as a text/plain response.
     */
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getIt() {
        return "got, it!";
    }
}

On Sun, 4 Apr 2021, 15:03 Joakim Erdfelt, <joakim@xxxxxxxxxxx> wrote:
<welcome-file-list> is only used when Jetty is in charge of serving static content.
Or said another way, when there is a request for a resource that doesn't match a url-pattern that the webapp has specified, then the servlet spec Default Servlet kicks in and determines static content, welcome-files, etc ...

You have jersey setup with <url-pattern>/*</url-pattern>, which means Jersey is responsible for 100% of content served.
Jetty is not involved in much with that configuration.

I don't understand this kind of configuration, Jersey usage should be focused, only on REST api resources, not 100% of content, including static and default servlet.
I would recommend that you specify jersey on a narrow focused url-pattern, like `/api/*` and leave the other requests for resources to Jetty (it can serve static content WAY BETTER than Jersey can).

Joakim Erdfelt / joakim@xxxxxxxxxxx


On Sat, Apr 3, 2021 at 1:55 AM Som Lima <somplasticllc@xxxxxxxxx> wrote:

IF I have the web.xml then localhost:8080/myresource  works fine
BUT the index.jsp is not picked  with localhost:8080 or http://localhost/index.jsp
I got an 404.
URI:/
STATUS:404

IF I remove the web.xml then the index.jsp is picked up which is what is meant to happen with jetty because it's built in functionality
assumes an index.jsp file is there and will pick it and publish it.
But the I get a 404 with localhost:8080/myresource  now.
I want both index.jsp to be picked up and have the jersey functionality localhost:8080/myresource with the web.xml
but I can only have one or the other.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
        version="5.0">

    <servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.example</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
   
   <!-- no effect  -->
    <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
   
</web-app>


import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;

/**
 * Root resource (exposed at "myresource" path)
 */
@Path("myresource")
public class MyResource {

    /**
     * Method handling HTTP GET requests. The returned object will be sent
     * to the client as "text/plain" media type.
     *
     * @return String that will be returned as a text/plain response.
     */
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getIt() {
        return "got, it!";
    }
}



Preferably I also want the Rest API Config to work as well as the index.jsp so that I can call the resource localhost:8080/v1/myresource

import jakarta.ws.rs.ApplicationPath;
import jakarta.ws.rs.core.Application;

@ApplicationPath("v1")
public class RestAppConfig extends Application{
}


_______________________________________________
jetty-users mailing list
jetty-users@xxxxxxxxxxx
To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/jetty-users
_______________________________________________
jetty-users mailing list
jetty-users@xxxxxxxxxxx
To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/jetty-users
_______________________________________________
jetty-users mailing list
jetty-users@xxxxxxxxxxx
To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/jetty-users


--
_______________________________________________
jetty-users mailing list
jetty-users@xxxxxxxxxxx
To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/jetty-users

Back to the top