这是一个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 | } |

被折叠的 条评论
为什么被折叠?



