仓酷云

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

[学习教程] JAVA网页编程之J2EE 探究者:利用 Java Servlets 2.4 ...

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

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

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

x
C#是盗用了Java的源代码,仿照开发的,原因是Java是开源的啊,盗了也白盗,还有一点,开发C#语言的团队是就是开发Java语言的团队,是微软重金挖过去的啊j2ee|servlet|实行ServletAPI好久之前就已成为企业使用开辟的基石,而Servlet过滤器则是对J2EE家属的绝对较新的增补。在J2EE探究者系列文章的最初一篇中,作者KyleGabhart将向您先容Servlet过滤器系统布局,界说过滤器的很多使用,并引导您完成典范过滤器完成的三个步骤。他还会泄漏bean的一些冲动民气的变更,估计刚公布的JavaServlet2.4标准会引进这些变更。
Servlet过滤器是可拔出的Web组件,它同意我们完成Web使用程序中的预处置和前期处置逻辑。过滤器撑持servlet和JSP页面的基础哀求处置功效,好比日记纪录、功能、平安、会话处置、XSLT转换,等等。过滤器最后是随JavaServlet2.3标准公布的,比来定稿的2.4标准对它举行了严重晋级。在这J2EE探究者系列文章的最初一篇中,我将向您先容Servlet过滤器的基本常识――好比整体的系统布局计划、完成细节,和在J2EEWeb使用程序中的典范使用,还会触及一些估计最新的Servlet标准将会供应的扩大功效。

Servlet过滤器是甚么?
Servlet过滤器是小型的Web组件,它们拦阻哀求和呼应,以便检察、提取或以某种体例操纵正在客户机和服务器之间互换的数据。过滤器是一般封装了一些功效的Web组件,这些功效固然很主要,可是关于处置客户机哀求或发送呼应来讲不是决意性的。典范的例子包含纪录关于哀求和呼应的数据、处置平安协定、办理会话属性,等等。过滤器供应一种面向对象的模块化机制,用以将大众义务封装到可拔出的组件中,这些组件经由过程一个设置文件来声明,并静态地处置。

Servlet过滤器中分离了很多元素,从而使得过滤器成为共同、壮大和模块化的Web组件。也就是说,Servlet过滤器是:

声明式的:过滤器经由过程Web部署形貌符(web.xml)中的XML标签来声明。如许同意增加和删除过滤器,而无需修改任何使用程序代码或JSP页面。


静态的:过滤器在运转时由Servlet容器挪用来拦阻和处置哀求和呼应。


天真的:过滤器在Web处置情况中的使用很普遍,涵盖诸如日记纪录和平安等很多最大众的帮助义务。过滤器仍是天真的,由于它们可用于对来自客户机的间接挪用实行预处置和前期处置,和处置在防火墙以后的Web组件之间调剂的哀求。最初,能够将过滤器链接起来以供应必须的功效。


模块化的:经由过程把使用程序处置逻辑封装到单个类文件中,过滤器从而界说了可简单地从哀求/呼应链中增加或删除的模块化单位。


可移植的:与Java平台的其他很多方面一样,Servlet过滤器是跨平台和跨容器可移植的,从而进一步撑持了Servler过滤器的模块化和可重用实质。


可重用的:回功于过滤器完成类的模块化计划,和声明式的过滤器设置体例,过滤器能够简单地超过分歧的项目和使用程序利用。


通明的:在哀求/呼应链中包含过滤器,这类计划是为了增补(而不是以任何体例替换)servlet或JSP页面供应的中心处置。因此,过滤器能够依据必要增加或删除,而不会损坏servlet或JSP页面。
以是Servlet过滤器是经由过程一个设置文件来天真声明的模块化可重用组件。过滤器静态地处置传进的哀求和传出的呼应,而且无需修正使用程序代码就能够通明地增加或删除它们。最初,过滤器自力于任何平台大概Servlet容器,从而同意将它们简单地部署就任何相容的J2EE情况中。

在接上去的几大节中,我们将进一步考查Servlet过滤器机制的整体计划,和完成、设置和部署过滤器所触及的步骤。我们还将切磋Servlet过滤器的一些实践使用,最初扼要考查一下模子-视图-把持器(MVC)系统布局中包括的Servlet过滤器,从而停止本文的会商。

Servlet过滤器系统布局
正如其称号所表示的,Servlet过滤器用于拦阻传进的哀求和/或传出的呼应,并监督、修正或以某种体例处置正在经由过程的数据流。过滤器是自包括、模块化的组件,能够将它们增加到哀求/呼应链中,大概在无需影呼应用程序中其他Web组件的情形下删除它们。过滤器仅只是修改哀求和呼应的运转时处置,因此不该该将它们间接嵌进Web使用程序框架,除非是经由过程ServletAPI中优秀界说的尺度接口来完成。

Web资本能够设置为没有过滤器与之联系关系(这是默许情形)、与单个过滤器联系关系(这是典范情形),乃至是与一个过滤器链相干联。那末过滤器事实做甚么呢?像servlet一样,它承受哀求并呼应对象。然后过滤器会反省哀求对象,并决意将该哀求转发给链中的下一个组件,大概中断该哀求并间接向客户机发还一个呼应。假如哀求被转发了,它将被传送给链中的下一个资本(另外一个过滤器、servlet或JSP页面)。在这个哀求想法经由过程过滤器链并被服务器处置以后,一个呼应将以相反的按次经由过程该链发送归去。如许就给每一个过滤器都供应了依据必要处置呼应对象的时机。

当过滤器在Servlet2.3标准中初次引进时,它们只能过滤Web客户机和客户机所会见的指定Web资本之间的内容。假如该资本然后将哀求调剂给其他Web资本,那就不克不及向幕后托付的任何哀求使用过滤器。2.4标准打消了这个限定。Servlet过滤器如今能够使用于J2EEWeb情况中存在哀求和呼应对象的任何中央。因而,Servlet过滤器能够使用在客户机和servlet之间、servlet和servlet或JSP页面之间,和所包含的每一个JSP页面之间。这才是我所称的壮大才能和天真性!

完成一个Servlet过滤器
他们说“一帆风顺”。我不晓得“他们”指的是谁,大概这句陈旧的谚语事实有多实在,可是完成一个Servlet过滤器切实其实要履历三个步骤。起首要编写过滤器完成类的程序,然后要把该过滤器增加到Web使用程序中(经由过程在Web部署形貌符/web.xml中声明它),最初要把过滤器与使用程序一同打包并部署它。我们将具体研讨这个中的每一个步骤。

1.编写完成类的程序
过滤器API包括3个复杂的接口(又是数字3!),它们整齐地嵌套在javax.servlet包中。那3个接口分离是Filter、FilterChain和FilterConfig。从编程的角度看,过滤器类将完成Filter接口,然后利用这个过滤器类中的FilterChain和FilterConfig接口。该过滤器类的一个援用将传送给FilterChain对象,以同意过滤器把把持权传送给链中的下一个资本。FilterConfig对象将由容器供应给过滤器,以同意会见该过滤器的初始化数据。

为了与我们的三步形式坚持分歧,过滤器必需使用三个办法,以便完整完成Filter接口:

init():这个办法在容器实例化过滤器时被挪用,它次要计划用于使过滤器为处置做筹办。该办法承受一个FilterConfig范例的对象作为输出。


doFilter():与servlet具有一个service()办法(这个办法又挪用doPost()大概doGet())来处置哀求一样,过滤器具有单个用于处置哀求和呼应的办法――doFilter()。这个办法承受三个输出参数:一个ServletRequest、response和一个FilterChain对象。


destroy():正如您想像的那样,这个办法实行任何清算操纵,这些操纵大概必要在主动渣滓搜集之行进行。
清单1展现了一个十分复杂的过滤器,它跟踪满意一个客户机的Web哀求所花的大抵工夫。

清单1.一个过滤器类完成


importjavax.servlet.*;
importjava.util.*;
importjava.io.*;

publicclassTimeTrackFilterimplementsFilter{
privateFilterConfigfilterConfig=null;

publicvoidinit(FilterConfigfilterConfig)
throwsServletException{

this.filterConfig=filterConfig;
}

publicvoiddestroy(){

this.filterConfig=null;
}

publicvoiddoFilter(ServletRequestrequest,
ServletResponseresponse,FilterChainchain)
throwsIOException,ServletException{

DatestartTime,endTime;
doubletotalTime;

startTime=newDate();

//Forwardtherequesttothenextresourceinthechain
chain.doFilter(request,wrapper);

//--Processtheresponse--

//Calculatethedifferencebetweenthestarttimeandendtime
endTime=newDate();
totalTime=endTime.getTime()-startTime.getTime();
totalTime=totalTime/1000;//Convertfrommillisecondstoseconds

StringWritersw=newStringWriter();
PrintWriterwriter=newPrintWriter(sw);

writer.println();
writer.println("===============");
writer.println("Totalelapsedtimeis:"+totalTime+"seconds.");
writer.println("===============");

//Logtheresultingstring
writer.flush();
filterConfig.getServletContext().
log(sw.getBuffer().toString());

}
}



这个过滤器的性命周期很复杂,不论如何,我们仍是研讨一下它吧:

初始化
当容器第一次加载该过滤器时,init()办法将被挪用。该类在这个办法中包括了一个指向FilterConfig对象的援用。我们的过滤器实践上其实不必要如许做,由于个中没有利用初始化信息,这里只是出于演示的目标。


过滤
过滤器的年夜多半工夫都损耗在这里。doFilter()办法被容器挪用,同时传进分离指向这个哀求/呼应链中的ServletRequest、ServletResponse和FilterChain对象的援用。然后过滤器就无机会处置哀求,将处置义务传送给链中的下一个资本(经由过程挪用FilterChain对象援用上的doFilter()办法),以后在处置把持权前往该过滤器时处置呼应。


析构
容器紧跟在渣滓搜集之前挪用destroy()办法,以便可以实行任何须需的清算代码。
2.设置Servlet过滤器
过滤器经由过程web.xml文件中的两个XML标签来声明。<filter>标签订义过滤器的称号,而且声明完成类和init()参数。<filter-mapping>标签将过滤器与servlet或URL形式相干联。

清单2摘自一个web.xml文件,它展现了怎样声明过滤器的包括干系:

清单2.在web.xml中声明一个过滤器

<filter>
<filter-name>PageRequestTimer</filter-name>
<filter-class>TimeTrackFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>PageRequestTimer</filter-name>
<servlet-name>MainServlet</servlet-name>
</filter-mapping>
<servlet>
<servlet-name>MainServlet</servlet-name>
<servlet-class>MainServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MainServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>



下面的代码示例声了然一个过滤器("PageRequestTimer"),并把它映照到一个servlet("MainServlet")。然后为该servlet界说了一个映照,以便把每一个哀求(由通配符指定)都发送到该servlet。这是把持器组件的典范映照声明。您应当注重这些声明的按次,由于万万不克不及背叛这些元素的按次。

3.部署Servlet过滤器
现实上,与Web使用程序一同部署过滤器相对不触及任何庞大性。只需把过滤器类和其他Web组件类包含在一同,并像您一般所做的那样把web.xml文件(连同过滤器界说和过滤器映照声明)放进Web使用程序布局中,servlet容器将处置以后的其他一切事变。

过滤器的很多使用
您在J2EEWeb使用程序中使用过滤器的才能,仅遭到您本人的制造性和使用程序计划伎俩的限定。在合适利用粉饰过滤器形式大概拦阻器形式的任何中央,您都可使用过滤器。过滤器的一些最广泛的使用以下:

加载:关于抵达体系的一切哀求,过滤器搜集诸如扫瞄器范例、一天中的工夫、转发URL等相干信息,并对它们举行日记纪录。


功能:过滤器在内容经由过程线路传来并在抵达servlet和JSP页面之前解紧缩该内容,然后再获得呼应内容,并在将呼应内容发送到客户机呆板之前将它转换为紧缩格局。


平安:过滤器处置身份考证令牌的办理,并得当地限定平安资本的会见,提醒用户举行身份考证和/或将他们指引到第三方举行身份考证。过滤器乃至可以办理会见把持列表(AccessControlList,ACL),以便除身份考证以外还供应受权机制。将平安逻辑放在过滤器中,而不是放在servlet大概JSP页面中,如许供应了伟大的天真性。在开辟时代,过滤器能够封闭(在web.xml文件中正文失落)。在临盆使用中,过滤器又能够再次启用。别的还能够增加多个过滤器,以便依据必要进步平安、加密和不成回绝的服务的品级。


会话处置:将servlet和JSP页面预会话处置代码混同在一同大概会带来相称年夜的贫苦。利用过滤器来办理会话可让Web页面会合精神思索内容显现和托付处置,而不用忧虑会话办理的细节。


XSLT转换:不论是利用挪动客户端仍是利用基于XML的Web服务,无需把逻辑嵌进使用程序就在XML语法之间实行转换的才能都相对是无价的。
使过滤器顺应MVC系统布局
模子-视图-把持器(Model-View-Controller,MVC)系统布局是一个无效的计划,它如今已作为最主要的计划办法学,整合到了诸如JakartaStruts和Turbine等年夜多半盛行的Web使用框架中。过滤器旨在扩大MVC系统布局的哀求/呼应处置流。不论哀求/呼应产生在客户机和服务器之间,仍是产生在服务器上的其他组件之间,过滤器在处置流中的使用都是不异的。从MVC的概念看,调剂器组件(它大概包含在把持器组件中,大概共同把持器组件事情)把哀求转发给得当的使用程序组件以举行处置。这使得把持器层成为包含Servlet过滤器的最好地位。经由过程把过滤器放在把持器组件自己的后面,过滤器能够使用于一切哀求,大概经由过程将它放在把持器/调剂器与模子和把持器之间,它能够使用于独自的Web组件。

MVC系统布局广为传布,并具有优秀的文档。请经由过程参考材料中的链接懂得关于MVC和MVC系统布局中的Servlet完成的更多信息。

停止语
固然过滤器才呈现几年工夫,但它们自己已作为一个关头组件嵌进到了一切急迅的、面向对象的J2EEWeb使用程序中。本文向您先容了Servlet过滤器的利用。本文会商了过滤器的初级计划,对照了以后标准(2.4)和之前(2.3)的模子,报告了完成过滤器所触及的准确步骤,和怎样在Web使用程序中声明过滤器,然后与使用程序一同部署它。本文还论述了Servlet过滤器的一些最广泛使用,并提到了过滤器怎样顺应传统的MVC系统布局。

这是J2EE探究者系列的最初一篇文章。我们在岁首经由过程大略研讨EnterpriseJavaBean组件来入手下手我们的路程,并提到了什么时候利用这些组件才真正成心义,和什么时候这些组件才会变得牛鼎烹鸡的成绩。然后我们将眼光转向了Web层,绘制了一条经由过程Servlet、JSP页面、JavaBean手艺和JavaServletAPI中的有数选择和功效的路径。在这个系列文章中与您一同艰辛跋涉真是一件康乐的事变。我享用着编写这个系列文章的兴趣,而且我从人人的反应中晓得,这对您也是一个很有代价的历程。感激您对本系列文章的介入。祝您好运,探究康乐!



再说第三点:我并没有提到服务器也要整合,然后是IDE,一个好的IDE能够200%提高开发的速度,就说图形方面:你是经过简单托拽和点击就能实现功能好那。
变相怪杰 该用户已被删除
沙发
发表于 2015-1-20 23:54:56 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
山那边是海 该用户已被删除
板凳
发表于 2015-1-24 20:35:35 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
深爱那片海 该用户已被删除
地板
发表于 2015-1-24 22:27:06 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
小魔女 该用户已被删除
5#
发表于 2015-2-1 16:05:06 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
不帅 该用户已被删除
6#
发表于 2015-2-7 07:19:49 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
只想知道 该用户已被删除
7#
发表于 2015-2-10 20:49:39 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
爱飞 该用户已被删除
8#
发表于 2015-2-15 18:50:16 | 只看该作者
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
简单生活 该用户已被删除
9#
发表于 2015-2-17 02:17:28 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
兰色精灵 该用户已被删除
10#
 楼主| 发表于 2015-3-3 18:20:53 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
蒙在股里 该用户已被删除
11#
发表于 2015-3-3 20:20:25 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
若相依 该用户已被删除
12#
发表于 2015-3-11 13:07:13 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
莫相离 该用户已被删除
13#
发表于 2015-3-18 11:56:34 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
分手快乐 该用户已被删除
14#
发表于 2015-3-25 20:22:40 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 21:59

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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