2016-07-13 6 views
0

Ich schaue mir einen Beispielcode von Simple Servlet in Java.Können wir HTTPServlet in Main-Methode ausführen Java-Klasse

In diesem Beispiel Servletis durch ein WEB-INF/web.xml Dateieintrag gestartet

<servlet-class>com.mkyong.ServletDemo1</servlet-class> 



<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 

    <servlet> 
     <servlet-name>Servlet Name For Demo1</servlet-name> 
     <servlet-class>com.mkyong.ServletDemo1</servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>Servlet Name For Demo1</servlet-name> 
     <url-pattern>/Demo1</url-pattern> 
    </servlet-mapping> 
</web-app> 

Kann ich starten (com.mkyong.ServletDemo1) in einer Java-Anwendung innerhalb von main() Methode, eine Methode aufrufen . ist es möglich ?

Danke für die Hilfe.

+0

Ich glaube nicht – Jens

Antwort

0

Um HTTPServlet zu verwenden, benötigen Sie einen Anwendungsserver wie Tomcat. Sie können nicht einfach Hauptmethode verwenden.

3

Ja, es ist möglich. Sie können Jetty, einen leichten Servlet-Container, verwenden. Es ist möglich, Jetty in Ihrer eigenen Anwendung so einzubetten (in diesem Beispiel direkt aus den Jetty documentation genommen wird):

public class MinimalServlets 
{ 
    public static void main(String[] args) throws Exception 
    { 
     // Create a basic jetty server object that will listen on port 8080. 
     // Note that if you set this to port 0 then a randomly available port 
     // will be assigned that you can either look in the logs for the port, 
     // or programmatically obtain it for use in test cases. 
     Server server = new Server(8080); 

     // The ServletHandler is a dead simple way to create a context handler 
     // that is backed by an instance of a Servlet. 
     // This handler then needs to be registered with the Server object. 
     ServletHandler handler = new ServletHandler(); 
     server.setHandler(handler); 

     // Passing in the class for the Servlet allows jetty to instantiate an 
     // instance of that Servlet and mount it on a given context path. 

     // IMPORTANT: 
     // This is a raw Servlet, not a Servlet that has been configured 
     // through a web.xml @WebServlet annotation, or anything similar. 
     handler.addServletWithMapping(HelloServlet.class, "/*"); 

     // Start things up! 
     server.start(); 

     // The use of server.join() the will make the current thread join and 
     // wait until the server is done executing. 
     // See 
     // http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#join() 
     server.join(); 
    } 

    @SuppressWarnings("serial") 
    public static class HelloServlet extends HttpServlet 
    { 
     @Override 
     protected void doGet(HttpServletRequest request, 
           HttpServletResponse response) throws ServletException, 
                  IOException 
     { 
      response.setContentType("text/html"); 
      response.setStatus(HttpServletResponse.SC_OK); 
      response.getWriter().println("<h1>Hello from HelloServlet</h1>"); 
     } 
    } 
} 
0

Ja Es ist möglich !!

Im Folgenden Code können Sie ausführen zu erreichen Servlet in Main-Methode einer Java-Klasse

MainClass.java

import java.net.*; 
import java.io.*; 

    public class MainClass 
    { 
     public static void main (String args[]) 
     { 
      String line; 
      try 
      { 
       URL url = new URL("http://localhost:8085/E/MyServlet?name=Ashok"); 
       BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 
       line = in.readLine(); 
       System.out.println(line); 
       in.close(); 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
     } 
    } 

MyServlet.java

import java.io.*; 
import javax.servlet.http.*; 
import javax.servlet.*;  
public class MyServlet extends HttpServlet 
{ 
    public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException 
     { 
      PrintWriter out = res.getWriter(); 
      out.println ("Hello " + req.getParameter("name") + ", this is SpecialServlet!"); 
      out.close(); 
     } 
    } 
laufen

web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    id="WebApp_ID" version="2.5"> 
    <display-name>E</display-name> 
    <servlet> 
     <servlet-name>MyServlet</servlet-name> 
     <servlet-class>MyServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>MyServlet</servlet-name> 
     <url-pattern>/MyServlet</url-pattern> 
    </servlet-mapping> 
</web-app> 

Put MyServlet.class innerhalb WEB-INF ->classes Ordner.

führen Sie dann die MainClass.java

Ausgabe

Hallo Ashok dies SpecialServlet!

Verwandte Themen