(转)Jetty入门

来源:互联网 发布:krenz网络班 编辑:程序博客网 时间:2024/06/03 04:13

这是一个JavaProject

 

首先是待纳入Jetty管理的LoginServlet.java

01

package com.jadyer.servlet;

02

 

 

03

import java.io.IOException;

04

import java.io.PrintWriter;

 

05

 

06

import javax.servlet.ServletException;

 

07

import javax.servlet.http.HttpServlet;

08

import javax.servlet.http.HttpServletRequest;

 

09

import javax.servlet.http.HttpServletResponse;

10

 

 

11

public class LoginServlet extends HttpServlet {

12

    private static final long serialVersionUID = 2827360195836107171L;

 

13

 

14

    @Override

 

15

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

16

        System.out.println("收到请求参数[" + request.getParameter("username") + "]");

 

17

        response.setContentType("text/html; charset=UTF-8");

18

        PrintWriter out = response.getWriter();

 

19

        out.print("<h2>这是我的嵌入式Jetty测试结果</h2>");

20

        out.flush();

 

21

        out.close();

22

    }

 

23

}


下面这个也是待纳入Jetty管理的UserServlet.java

01

package com.jadyer.servlet;

02

 

 

03

import java.io.IOException;

04

import java.io.PrintWriter;

 

05

 

06

import javax.servlet.ServletException;

 

07

import javax.servlet.http.HttpServlet;

08

import javax.servlet.http.HttpServletRequest;

 

09

import javax.servlet.http.HttpServletResponse;

10

 

 

11

public class UserServlet extends HttpServlet {

12

    private static final long serialVersionUID = 2827360195836107171L;

 

13

 

14

    @Override

 

15

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

16

        System.out.println("收到请求参数[" + request.getParameter("username") + "]");

 

17

        response.setContentType("text/html; charset=UTF-8");

18

        PrintWriter out = response.getWriter();

 

19

        out.print("<h2>这是我的嵌入式Jetty测试结果-->用户访问Servlet成功</h2>");

20

        out.flush();

 

21

        out.close();

22

    }

 

23

}


最后是自己编写的Jetty启动类MyServer.java(内含Jetty嵌入式的简单用法)

查看源码

打印?

001

package com.jadyer.jetty;

002

 

 

003

import java.util.HashMap;

004

import java.util.Map;

 

005

 

006

import javax.servlet.Servlet;

 

007

 

008

import org.eclipse.jetty.server.Server;

 

009

import org.eclipse.jetty.servlet.ServletContextHandler;

010

import org.eclipse.jetty.webapp.WebAppContext;

 

011

 

012

import com.jadyer.servlet.LoginServlet;

 

013

import com.jadyer.servlet.UserServlet;

014

 

 

015

/**

016

 * @see --------------------------------------------------------------------------------------------------------------

    

 

017

 * @see Jetty简介

018

 * @see Jetty是一个嵌入式的Web服务器

 

019

 * @see Jetty官网:http://www.eclipse.org/jetty/

020

 * @see Jetty下载:http://download.eclipse.org/jetty/

 

021

 * @see --------------------------------------------------------------------------------------------------------------

022

 * @see Jetty与Tomcat比较(取自网络)

    

 

023

 * @see Jetty的架构要比Tomcat简单一些,它是基于Handler来实现的,它可以通过Handler来进行扩展

024

 * @see Tomcat的架构是基于容器设计的,扩展Tomcat时需要了解Tomcat的整体设计结果,故不易扩展

 

025

 * @see --------------------------------------------------------------------------------------------------------------

026

 * @see Jetty使用

    

 

027

 * @see 0)版本选择:由于Jetty9需要JDK7的支持,所以我们这里使用jetty-distribution-8.1.10.v20130312.zip

028

 * @see 1)修改端口:修改\\JETTY_HOME\\etc\\jetty.xml第40行default="8080"即可

 

029

 * @see 2)非嵌入式的项目发布(有两种方式)

030

 * @see   非嵌入式的启动方式为命令行下执行该命令-->D:\Develop\jetty-distribution-8.1.10.v20130312>java -jar start.jar

 

031

 * @see   第一种:项目打成war包放到\\JETTY_HOME\\webapps\\下即可,访问地址为http://127.0.0.1:8080/warName(war名字大小写严格相同)

032

 * @see   第二种:类似于Tomcat的<Context path="" docBase="">的方式,即在\\JETTY_HOME\\contexts\\目录下新增一个名字随意的xml文件

 

033

 * @see         文件格式与该目录下的javadoc.xml相同,其中主要修改以下两处

034

 * @see         <Set name="contextPath">/testBbb</Set>

 

035

 * @see         <Set name="resourceBase">F:/Tool/Code/JavaSE/loginManager/WebRoot</Set>

036

 * @see 3)嵌入式的项目发布

 

037

 * @see   也就是把Jetty提供的jar加入到项目中(可以是Java项目或Web项目),然后编写通过一个main()启动Jetty,所用到的jar如下

038

 * @see   JETTY_HOME中的lib目录,和lib下的jsp目录,这俩目录中的jar加入到项目中即可(若不涉及jsp页面,就不需要jsp目录下的jar了)

 

039

 * @see   具体写法详见这里的startForServlet()和startForWebApp()方法

040

 * @see --------------------------------------------------------------------------------------------------------------

   

 

041

 * @create Jul 5, 2013 12:54:24 PM

042

 * @author 玄玉<http://blog.csdn.net/jadyer>

 

043

 */

044

public class MyServer {

 

045

    public static void main(String[] args) {

046

        Map<Class<? extends Servlet>, String> servletMap = new HashMap<Class<? extends Servlet>, String>();

 

047

        servletMap.put(UserServlet.class, "/user");

048

        servletMap.put(LoginServlet.class, "/login");

 

049

        startForServlet(8089, "/testJettyDemo", servletMap);

050

        startForWebApp(8089, "/gbook", "F:/Tool/Code/JavaSE/guestbook/WebRoot");

 

051

    }

052

     

 

053

     

054

    /**

 

055

     * 针对Servlet

056

     * @see 通过servletMap参数可以使得该方法直接同时发布多个Servlet

 

057

     * @param port        访问服务器的端口

058

     * @param contextPath 访问服务器的地址

 

059

     * @param servletMap  发布的Servlet(这是一个Map,键为Servlet的class对象,值为映射url-pattern)

060

     */

 

061

    private static void startForServlet(int port, String contextPath, Map<Class<? extends Servlet>, String> servletMap){

062

        //绑定端口

 

063

        Server server = new Server(port);

064

        //可以使用ServletContextHandler处理Servlet

 

065

        ServletContextHandler context = new ServletContextHandler();

066

        //添加Servlet并指定映射url-pattern

 

067

        for(Map.Entry<Class<? extends Servlet>, String> servletEntry : servletMap.entrySet()){

068

            context.addServlet(servletEntry.getKey(), servletEntry.getValue());

 

069

        }

070

        //此时访问路径就是http://127.0.0.1:port/contextPath/urlPattern

 

071

        context.setContextPath(contextPath);

072

        //绑定Handler

 

073

        server.setHandler(context);

074

        //启动服务

 

075

        try {

076

            server.start();

 

077

        } catch (Exception e) {

078

            System.out.println("启动Jetty时发生异常,堆栈轨迹如下");

 

079

            e.printStackTrace();

080

        }

 

081

        if(server.isStarted()){

082

            System.out.println("Servlet服务启动成功");

 

083

        }

084

    }

 

085

     

086

     

 

087

    /**

088

     * 针对一个Web应用

 

089

     * @see 注意resourceBase参数指向的应用所依赖的jar必须全部存放在其WebRoot\WEB-INF\lib目录中

090

     * @see 否则应用启动后,访问时会由于在lib中找不到jar而报告java.lang.ClassNotFoundException

 

091

     * @param port         访问服务器的端口

092

     * @param contextPath  访问服务器的地址

 

093

     * @param resourceBase Web应用的目录(需指向到WebRoot目录下)

094

     */

 

095

    private static void startForWebApp(int port, String contextPath, String resourceBase){

096

        Server server = new Server(port);

 

097

        //使用WebAppContext时就必须设置resourceBase

098

        WebAppContext context = new WebAppContext();

 

099

        //此时访问路径就是http://127.0.0.1:port/contextPath

100

        context.setContextPath(contextPath);

 

101

        context.setResourceBase(resourceBase);

102

        server.setHandler(context);

 

103

        try {

104

            server.start();

 

105

        } catch (Exception e) {

106

            System.out.println("启动Jetty时发生异常,堆栈轨迹如下");

 

107

            e.printStackTrace();

108

        }

 

109

        if(server.isStarted()){

110

            System.out.println("Web服务启动成功");

 

111

        }

112

    }

 

113

}

 

0 0
原创粉丝点击