仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 680|回复: 19
打印 上一主题 下一主题

[学习教程] JAVA网页编程之第一个Servlet

[复制链接]
老尸 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:32:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。servlet作者:神仙掌事情室


  3.1Servlet基础布局

  上面的代码显现了一个复杂Servlet的基础布局。该Servlet处置的是GET哀求,所谓的GET哀求,假如你不熟习HTTP,能够把它当作是当用户在扫瞄器地点栏输出URL、点击Web页面中的链接、提交没有指定METHOD的表单时扫瞄器所收回的哀求。Servlet也能够很便利地处置POST哀求。POST哀求是提交那些指定了METHOD=“POST”的表单时所收回的哀求,详细请拜见稍后几节的会商。
importjava.io.*;
importjavax.servlet.*;
importjavax.servlet.http.*;

publicclassSomeServletextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,
HttpServletResponseresponse)
throwsServletException,IOException{

//利用“request”读取和哀求有关的信息(好比Cookies)
//和表双数据

//利用“response”指定HTTP应对形态代码和应对头
//(好比指定内容范例,设置Cookie)

PrintWriterout=response.getWriter();
//利用"out"把应对内容发送到扫瞄器
}
}




  假如某个类要成为Servlet,则它应当从HttpServlet承继,依据数据是经由过程GET仍是POST发送,掩盖doGet、doPost办法之一或全体。doGet和doPost办法都有两个参数,分离为HttpServletRequest范例和HttpServletResponse范例。HttpServletRequest供应会见有关哀求的信息的办法,比方表双数据、HTTP哀求优等等。HttpServletResponse除供应用于指定HTTP应对形态(200,404等)、应对头(Content-Type,Set-Cookie等)的办法以外,最主要的是它供应了一个用于向客户端发送数据的PrintWriter。关于复杂的Servlet来讲,它的年夜部合作作是经由过程println语句天生向客户端发送的页面。

  注重doGet和doPost抛出两个非常,因而你必需在声明中包括它们。别的,你还必需导进java.io包(要用到PrintWriter等类)、javax.servlet包(要用到HttpServlet等类)和javax.servlet.http包(要用到HttpServletRequest类和HttpServletResponse类)。

  最初,doGet和doPost这两个办法是由service办法挪用的,偶然你大概必要间接掩盖service办法,好比Servlet要处置GET和POST两种哀求时。

  3.2输入纯文本的复杂Servlet

  上面是一个输入纯文本的复杂Servlet。

  3.2.1HelloWorld.java
packagehall;

importjava.io.*;
importjavax.servlet.*;
importjavax.servlet.http.*;

publicclassHelloWorldextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,
HttpServletResponseresponse)
throwsServletException,IOException{
PrintWriterout=response.getWriter();
out.println("HelloWorld");
}
}




  3.2.2Servlet的编译和安装

  分歧的Web服务器上安装Servlet的详细细节大概分歧,请参考Web服务器文档懂得更威望的申明。假定利用JavaWebServer(JWS)2.0,则Servlet应当安装到JWS安装目次的servlets子目次下。在本文中,为了不统一服务器上分歧用户的Servlet定名抵触,我们把一切Servlet都放进一个自力的包hall中;假如你和其别人共用一个服务器,并且该服务器没有“假造服务器”机制来制止这类定名抵触,那末最好也利用包。把Servlet放进了包hall以后,HelloWorld.java实践上是放在servlets目次的hall子目次下。

  年夜多半其他服务器的设置办法也类似,除JWS以外,本文的Servlet和JSP示例已在BEAWebLogic和IBMWebSphere3.0下经由测试。WebSphere具有优异的假造服务器机制,因而,假如只是为了不定名抵触的话并不是必定要用包。

  关于没有利用过包的初学者,上面我们先容编译包内里的类的两种办法。

  一种办法是设置CLASSPATH,使其指向实践寄存Servlet的目次的上一级目次(Servlet主目次),然后在该目次中按一般的体例编译。比方,假如Servlet的主目次是C:\JavaWebServer\servlets,包的名字(即主目次下的子目次名字)是hall,在Windows下,编译历程以下:
DOS>setCLASSPATH=C:\JavaWebServer\servlets;%CLASSPATH%
DOS>cdC:\JavaWebServer\servlets\hall
DOS>javacYourServlet.java



  第二种编译包内里的Servlet的办法是进进Servlet主目次,实行“javacdirectory\YourServlet.java”(Windows)大概“javacdirectory/YourServlet.java”(Unix)。比方,再次假定Servlet主目次是C:\JavaWebServer\servlets,包的名字是hall,在Windows中编译历程以下:
DOS>cdC:\JavaWebServer\servlets
DOS>javachall\YourServlet.java



  注重在Windows下,年夜多半JDK1.1版本的javac请求目次名字前面加反斜杠(\)。JDK1.2已更正这个成绩,但是因为很多Web服务器仍然利用JDK1.1,因而大批的Servlet开辟者仍然在利用JDK1.1。

  最初,Javac另有一个初级选项用于撑持源代码和.class文件的分隔安排,即你能够用javac的“-d”选项把.class文件安装到Web服务器所请求的目次。

  3.2.3运转Servlet

  在JavaWebServer下,Servlet应当放到JWS安装目次的servlets子目次下,而挪用Servlet的URL是http://host/servlet/ServletName。注重子目次的名字是servlets(带“s”),而URL利用的是“servlet”。因为HelloWorldServlet放进包hall,因而挪用它的URL应当是http://host/servlet/hall.HelloWorld。在其他的服务器上,安装和挪用Servlet的办法大概略有分歧。

  年夜多半Web服务器还同意界说Servlet的别号,因而Servlet也大概用http://host/any-path/any-file.html情势的URL挪用。详细怎样举行设置完整依附于服务器范例,请参考服务器文档懂得细节。

  3.3输入HTML的Servlet

  年夜多半Servlet都输入HTML,而不象上例一样输入纯文本。要输入HTML另有两个分外的步骤要做:告知扫瞄器接上去发送的是HTML;修正println语句机关出正当的HTML页面。

  第一步经由过程设置Content-Type(内容范例)应对头完成。一样平常地,应对头能够经由过程HttpServletResponse的setHeader办法设置,但因为设置内容范例是一个很频仍的操纵,因而ServletAPI供应了一个公用的办法setContentType。注重设置应对头应当在经由过程PrintWriter发送内容之行进行。上面是一个实例:

  HelloWWW.java
packagehall;

importjava.io.*;
importjavax.servlet.*;
importjavax.servlet.http.*;

publicclassHelloWWWextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,
HttpServletResponseresponse)
throwsServletException,IOException{
response.setContentType("text/html");
PrintWriterout=response.getWriter();
out.println("<!DOCTYPEHTMLPUBLIC\"-//W3C//DTDHTML4.0"+
"Transitional//EN\">\n"+
"<HTML>\n"+
"<HEAD><TITLE>HelloWWW</TITLE></HEAD>\n"+
"<BODY>\n"+
"<H1>HelloWWW</H1>\n"+
"</BODY></HTML>");
}
}




  3.4几个HTML工具函数

  经由过程println语句输入HTML其实不便利,基本的办理办法是利用JavaServerPages(JSP)。但是,关于尺度的Servlet来讲,因为Web页面中有两个部分(DOCTYPE和HEAD)一样平常不会改动,因而能够用工具函数来封装天生这些内容的代码。

  固然年夜多半支流扫瞄器城市疏忽DOCTYPE行,但严厉地说HTML标准是请求有DOCTYPE行的,它有助于HTML语法反省器依据所声明的HTML版本反省HTML文档正当性。在很多Web页面中,HEAD部分只包括<TITLE>。固然很多有履历的编写者城市在HEAD中包括很多META标志和款式声明,但这里只思索最复杂的情形。

  上面的Java办法只承受页面题目为参数,然后输入页面的DOCTYPE、HEAD、TITLE部分。清单以下:

  ServletUtilities.java
packagehall;

publicclassServletUtilities{
publicstaticfinalStringDOCTYPE=
"<!DOCTYPEHTMLPUBLIC\"-//W3C//DTDHTML4.0Transitional//EN\">";

publicstaticStringheadWithTitle(Stringtitle){
return(DOCTYPE+"\n"+
"<HTML>\n"+
"<HEAD><TITLE>"+title+"</TITLE></HEAD>\n");
}

//其他工具函数的代码在本文前面先容
}




  HelloWWW2.java

  上面是使用了ServletUtilities以后重写HelloWWW类失掉的HelloWWW2:
packagehall;

importjava.io.*;
importjavax.servlet.*;
importjavax.servlet.http.*;

publicclassHelloWWW2extendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,
HttpServletResponseresponse)
throwsServletException,IOException{
response.setContentType("text/html");
PrintWriterout=response.getWriter();
out.println(ServletUtilities.headWithTitle("HelloWWW")+
"<BODY>\n"+
"<H1>HelloWWW</H1>\n"+
"</BODY></HTML>");
}
}


你精通任何一门语言就最强大。现在来看,java的市场比C#大,C#容易入手,比较简单,java比较难
莫相离 该用户已被删除
沙发
发表于 2015-1-21 09:53:17 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
爱飞 该用户已被删除
板凳
发表于 2015-1-27 13:42:23 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
若相依 该用户已被删除
地板
发表于 2015-2-1 10:22:35 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
活着的死人 该用户已被删除
5#
发表于 2015-2-1 20:21:27 来自手机 | 只看该作者
是一种为 Internet发展的计算机语言
admin 该用户已被删除
6#
发表于 2015-2-5 15:15:16 | 只看该作者
是一种使用者不需花费很多时间学习的语言
飘飘悠悠 该用户已被删除
7#
发表于 2015-2-9 08:51:45 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
8#
发表于 2015-2-11 11:11:13 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
变相怪杰 该用户已被删除
9#
发表于 2015-2-13 22:49:56 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
再现理想 该用户已被删除
10#
发表于 2015-2-21 04:11:22 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
海妖 该用户已被删除
11#
发表于 2015-3-5 14:59:51 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
冷月葬花魂 该用户已被删除
12#
发表于 2015-3-9 20:26:44 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
飘灵儿 该用户已被删除
13#
发表于 2015-3-17 00:36:32 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
兰色精灵 该用户已被删除
14#
发表于 2015-3-23 09:21:40 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
再见西城 该用户已被删除
15#
发表于 2015-3-27 21:00:22 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
谁可相欹 该用户已被删除
16#
发表于 2015-3-29 11:11:08 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
蒙在股里 该用户已被删除
17#
发表于 2015-4-3 16:59:35 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
第二个灵魂 该用户已被删除
18#
发表于 2015-4-6 04:09:43 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
分手快乐 该用户已被删除
19#
发表于 2015-4-7 22:55:33 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
小女巫 该用户已被删除
20#
发表于 2015-4-13 00:11:44 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 21:54

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表