采用Jetty搭建简单的WebApplicationServer
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
采用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; publicclassOneWebApp { publicstaticvoid 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; /** *@authorFenglb *@version1.0 *创建时间:2009-8-19下午02:06:47 *类说明:Servlet */ publicclassMyServlet extends HttpServlet { privatestaticfinallongserialVersionUID = 1L; protectedvoid 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); } } protectedvoid 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; /** *@authorFenglb *@version1.0 *创建时间:2009-8-20上午09:23:29 *类说明:过滤器 */ publicclass MyFilterimplements Filter{ publicvoid destroy() { //TODO Auto-generated method stub } publicvoid 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); } publicvoid 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> |
到此为止,基本的框框架架都有了,要做什么样的具体应用就可以在此上面进行扩展操作了。
本文出自:冯立彬的博客
给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
采用Jetty搭建简单的WebApplicationServer相关推荐
- 前端app调起摄像头 只显示在页面_猫也能看得懂的教程之一分钟使用Vue搭建简单Web页面...
本教程适合人群: 已经了解过过html.js.css,想深入学习前端技术的小伙伴 有前端开发经验.但是没有使用过Vue的小伙伴 有过其他编程经验,对前端开发感兴趣的小伙伴 学习本教程之后你将会: 了解 ...
- 用Python中的py2neo库操作neo4j,搭建简单关联图谱—基于家有儿女中的人物关系
我第一次建立关联图谱用的是R语言,通过写代码帮公安挖掘团伙犯罪,并用图形展示团伙之间的关联关系.如有需要请关注 "阿黎逸阳的代码" 公众号的后续文章,会手把手教大家用R搭 ...
- 使用docker部署nginx搭建简单的idea-2019 jrebel插件激活服务器
使用docker部署nginx搭建简单的idea-2019 jrebel插件激活服务器 前言 之前用的jrebel激活方式一直都是用的 *lanyus* 大神的 [jrebel激活](http://i ...
- springboot+vue搭建简单的聊天网站,从0到上线(腾讯云)
springboot+vue搭建简单的聊天网站,从0到上线 整体架构简单梳理 云服务器 nginx的基础配置 springboot-eureka简单梳理 聊天功能实现的基础流程 ws的实现 整体架构简 ...
- Pytorch:手把手教你搭建简单的卷积神经网络(CNN),实现MNIST数据集分类任务
关于一些代码里的解释,可以看我上一篇发布的文章,里面有很详细的介绍!!! 可以依次把下面的代码段合在一起运行,也可以通过jupyter notebook分次运行 第一步:基本库的导入 import n ...
- SSM+MyBatis-Plus+EasyExcel+腾讯云tianai滑动验证码接入项目搭建+简单实现增、删、改、查、导入、滑动验证码功能
SSM+MyBatis-Plus+EasyExcel+腾讯云&tianai滑动验证码接入项目搭建+简单实现增.删.改.查.导入.滑动验证码功能 文章末尾附源码 一.什么是SSM框架 SSM框架 ...
- Linux下采用ss5搭建sock5服务器使用proxychains进行sock5客户端代理
Linux下采用ss5搭建sock5服务器&使用proxychains进行sock5客户端代理 1.ss5搭建sock5服务器 1.1下载ss5源码 1.2安装相关yum依赖 1.3编绎安装 ...
- 【CyberSecurityLearning 附】使用PHP语言搭建简单的论坛:注册功能实现+PHP个人中心设计+简单留言板
使用PHP语言搭建简单的论坛 简单留言板 留言 个人中心 登录 验证码 注册 头像 ...
- php手游管理系统,搭建简单的游戏管理系统
这次给大家带来搭建简单的游戏管理系统,搭建简单游戏管理系统的注意事项有哪些,下面就是实战案例,一起来看一下. 一. 分析&布局设计 当前我们项目的界面是这样的: 简单来说,看不出一点管理系统的 ...
最新文章
- LeetCode简单题之仅执行一次字符串交换能否使两个字符串相等
- Ubuntu双系统Grub启动菜单修复
- android ADT学习总结
- QT教程1:ubuntu18.04安装QT5
- VC6中根据需要显示滚动条
- Machine Learning on Spark——第四节 统计基础(二)
- P3041-[USACO12JAN]Video Game G【AC自动机,dp】
- exe打包工具哪个最好_一键分发工具哪个最好用?30万人选择这款
- Codechef之CodeCraft: IIIT Hyderabad
- 华为手机连电脑_移动办公利器华为MatePad Pro:能写会画有键盘,能当电脑连手机...
- ES常用DSL语句(kibana常用语句)
- opencv-python学习一--人脸检测
- JDK官方文档(包含所有版本)
- 软件考试(一)计算机技术与软件专业技术资格(水平)考试(以下简称软件水平考试)含金量最高,与职称挂钩。
- 倪光南李开复景鲲等15位产业领袖纵论中国AI现状:价值重估,落地为王
- 【硬件篇之电源纹波噪声测试】
- UbuntuNAT内网穿透实现远程访问
- 港科夜闻|香港科技大学校长叶玉如教授,新加坡国立大学曾运雄博士:发现阿尔茨海默病新疗法...
- python查看手机上wifi密码_忘了wifi密码怎么办?用Python查!
- CVE-2018-12613 --- 本地文件包含造成远程代码执行漏洞复现
热门文章
- 云图说|华为HiLens云上管理平台 花样管理多种端侧设备
- 前端开发还可以这么玩?元数据实践分享
- 用好CloudIDE提升Web全栈编码效率
- 【华为云技术分享】iSulad轻量化容器实践解析
- 本科阶段就挑战自动驾驶开发?华为云ModelArts帮你轻松实现!
- 某学校有计算机主机1300台,网络互联技术与实践第14章:构建基于静态路由的多层网络.ppt...
- c语言 b的作用,在C语言中各个标点符号的作用
- php 5.6.29,源码编译安装PHP 5.6.29
- pandas中的数据如何转化为张量?
- 【Paper-Attack Defense】Adversarial Label-Flipping Attack and Defense for Graph Neural Networks