采用Jetty搭建简单的WebApplicationServer
采用Jetty搭建简单的WebApplicationServer 一、基本设置希望采用Web的方式,远程对服务的配置进行管理,考虑到Jetty作为Web容器是纯JAVA写的,并且能够很好的与JAVA应用程序集成在一起使用,于是就采用它了。下面是对搭建Jetty应用的记录过程。当前的Jetty版本为:jetty-6.1.14,在Eclipse新建一个工程名为Test,并新建包:tes
采用Jetty搭建简单的WebApplicationServer
一、基本设置
希望采用Web的方式,远程对服务的配置进行管理,考虑到Jetty作为Web容器是纯JAVA写的,并且能够很好的与JAVA应用程序集成在一起使用,于是就采用它了。下面是对搭建Jetty应用的记录过程。
当前的Jetty版本为:jetty-6.1.14,在Eclipse新建一个工程名为Test,并新建包:test.jetty,然后从下载的Jetty包中的如此路径:jetty-6.1.14/examples/embedded/src/main/java/org/mortbay/jetty/example拷贝JAVA类OneWebApp.java到test.jetty包中,在Eclipse中打开并修改其包名为test.jetty,代码不用作任何修改,因为这已经是一个现成的WebServer了,源码如下:
package test.jetty;
import org.mortbay.jetty.Connector; import org.mortbay.jetty.Server; import org.mortbay.jetty.nio.SelectChannelConnector; import org.mortbay.jetty.webapp.WebAppContext;
public class OneWebApp { public static void main(String[] args) throws Exception { String jetty_default=new java.io.File("./start.jar").exists()?".":"../.."; String jetty_home = System.getProperty("jetty.home",jetty_default);
Server server = new Server();
Connector connector=new SelectChannelConnector(); connector.setPort(Integer.getInteger("jetty.port",8080).intValue()); server.setConnectors(new Connector[]{connector});
WebAppContext webapp = new WebAppContext(); webapp.setContextPath("/"); webapp.setWar(jetty_home+"/webapps/test"); webapp.setDefaultsDescriptor(jetty_home+"/etc/webdefault.xml");
server.setHandler(webapp);
server.start(); server.join(); } }
|
在工程Test所在路径下面新建目录lib,并将Jetty服务需要的最小JAR包拷贝到该目录,JAR包有:ant-1.6.5.jar、commons-logging-1.0.4.jar、core-3.1.1.jar、jetty-6.1.14.jar、jetty-util-6.1.14.jar、jsp-2.1.jar、jsp-api-2.1.jar、servlet-api-2.5-6.1.14.jar,并加入到ECLIPSE的CLASSPATH中。
这个时候,在Test目录下再新建etc、webapps两个目录,将解压打开的Jetty目录下etc目录下的webdefault.xml拷贝到新建的etc目录、将Jetty目录下webapps目录的test目录也拷贝到新建的webapps目录下。然后直接在Eclipse中,点右键在该类文件上,选择“Run as-->Java Application”,此时服务就已经启动起来了,打开浏览器,输入:http://localhost:8080,就可以看到如下页面了:
到此为止,一个简单的应用服务就搭建起来了,没有写一句代码,因为这些Jetty已经为我们考虑到了。
二、高级应用
1、编写Servlet
以上的设置只是满足了我们可以将一个静态页面拷贝到webapps的test目录下,并可以通过浏览器打开,但是还不能够处理我们在页面的输入框中输入一些东西,将其写入文件或者是数据等运算操作。
这个时候,我们要在当前应用的基础之上配置自己的Servlet,用以处理特定的业务,编写如下简单Servlet:
package test.servlet;
import java.io.IOException; import java.util.Enumeration;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
/** * @author Fenglb * @version 1.0 * 创建时间:2009-8-19 下午02:06:47 * 类说明:Servlet */ public class MyServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("calling MyServlet"); Enumeration e=request.getParameterNames(); while(e.hasMoreElements()){ String name = (String)e.nextElement(); String value=request.getParameter(name); System.out.println("name="+name+":value="+value); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } } |
为了让该Servlet能够工作,我们需要将其配置在具体应用的/WEB-INF/web.xml文件中,如这里应该配置在“Test工程所在目录/webapps/test/WEB-INF/web.xml”文件中,在其中加入如下代码:
<!--配置一个Servlet类,并取名为httpprocesserservlet--> <servlet> <servlet-name>httpprocesserservlet</servlet-name> <servlet-class> test.servlet.MyServlet </servlet-class> <load-on-startup>2</load-on-startup> </servlet> <!--配置请求处理映射,就是前台通过什么样的路径请求通过这处理,这里就配置为前台页面中往后台提交时, form的action为"httpprocesserservlet"时,通过测试的Servlet处理--> <servlet-mapping> <servlet-name>httpprocesserservlet</servlet-name> <url-pattern>/httpprocesserservlet</url-pattern> </servlet-mapping> |
新建一个HTML页面,名称随意,内容如下,不过form的action一定要为"httpprocesserservlet":
<%@ page contentType="text/html; charset=gbk" %> <HTML> <HEAD> <TITLE>MyServlet Test</TITLE> <META http-equiv="Pragma" content="no-cache"> <META http-equiv="Cache-Control" content="no-cache,no-store"> </HEAD> <BODY> <form action="/httpprocesserservlet" method="post" name="form1"> <table> <tr> <td><input type="text" name="mytext" size="20"> </td> <td> <input type="submit" name="mysub" value="提交"> </td> </tr> </table> </form> </BODY> </HTML> |
我就将该页面放于test应用的根目录下,并命名为"myservlet.html",在浏览器中打入:http://localhost:8080/myservlet.html,就可以看到该页面如下:
随意在框中输入内容,就可以在后台看到有输出,这表示配置正确了。
2、编写过滤器
但是这个时候你会发现一个问题,递交到后台的中文全部是乱码,这个为了处理乱码的问题,我们就需要为其设置编码,最好的方式就是编写过滤器了,如下代码:
package test.servlet;
import java.io.IOException;
import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; /** * @author Fenglb * @version 1.0 * 创建时间:2009-8-20 上午09:23:29 * 类说明:过滤器 */ public class MyFilter implements Filter{
public void destroy() { // TODO Auto-generated method stub
}
public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain chain) throws IOException, ServletException { System.out.println("Calling MyFilter"); HttpServletRequest request = (HttpServletRequest) srequest; request.setCharacterEncoding("GBK"); chain.doFilter(srequest, sresponse); }
public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub
}
} |
将该过滤器也配置在web.xml中,做如下配置:
<filter> <filter-name>EncodingFilter</filter-name> <filter-class>test.servlet.MyFilter</filter-class> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> |
到此为止,基本的框框架架都有了,要做什么样的具体应用就可以在此上面进行扩展操作了。
本文出自:冯立彬的博客
更多推荐
所有评论(0)