这是一个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.youkuaiyun.com/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 | } |