Java标注Q?span style="color: blue;">AnnotationQ是Java语言5.0版本开始支持加入源代码的特D语?a title="元数?>元数?/a>?/p>
Java语言中的cR方法、变量、参数和包等都可以被标注。Java标注?a class="new" title="JavadocQ尚未撰写)">Javadoc不同Q标注有自反性。在~译器生成类文gӞ标注可以被嵌入到?/p>
Java标注可以用于~译Ӟ也可以用于运行时。下面的讨论主要集中于运行时?/p>
Annotation分类
1Q内建Annotation——Java5.0版在java语法中经常用到的内徏AnnotationQ?/strong>
@Deprecated用于修饰已经q时的方法;
@Override用于修饰此方法覆盖了父类的方法(而非重蝲Q;
@SuppressWarnings用于通知java~译器禁止特定的~译警告?br />
下面代码展示了内建Annotationcd的用法:
2,开发者自定义AnnotationQ由开发者自定义Annotationcd?/strong>
一、Servletqo器的概念Q?/strong>
◆Servletqo器是在Java Servlet规范2.3中定义的Q它能够对Servlet容器的请求和响应对象q行查和修改。
◆Servletqo器本wƈ不生请求和响应对象Q它只能提供qo作用。Servletq期能够在Servlet被调用之前检查Request对象Q修改Request Header和Request内容Q在Servlet被调用之后检查Response对象Q修改Response Header和Response内容?/p>
Servletq期负责qo的Weblg可以是Servlet、JSP或者HTML文g。
二、Servletqo器的特点Q?/strong>
◆Servletqo器可以检查和修改ServletRequest和ServletResponse对象
◆Servletqo器可以被指定和特定的URL兌Q只有当客户h讉K该URLӞ才会触发qo?/p>
◆Servletqo器可以被串联在一P形成道效应Q协同修改请求和响应对象
三、Servletqo器的作用Q?/strong>
◆查询请求ƈ作出相应的行动?/p>
◆阻塞请?响应对,使其不能q一步传递?/p>
◆修改请求的头部和数据。用户可以提供自定义的请求?/p>
◆修改响应的头部和数据。用户可以通过提供定制的响应版本实现?/p>
◆与外部资源q行交互?/p>
四、Servletqo器的适用场合Q?/strong>
◆认证过?/p>
◆登录和审核qo
◆图像{换过?/p>
◆数据压~过?/p>
◆加密过?/p>
◆o牌过?/p>
◆资源访问触发事件过?/p>
◆XSL/Tqo
◆Mime-typeqo
五、Servletqo器接口的构成Q?/strong>
所有的Servletqo器类都必d现javax.servlet.Filter接口。这个接口含?个过滤器cdd现的ҎQ?/p>
◆init(FilterConfig)Q?br /> q是Servletqo器的初始化方法,Servlet容器创徏Servletqo器实例后调用这个方法。在q个Ҏ中可以读取web.xml文g中Servletqo器的初始化参?/p>
◆doFilter(ServletRequest,ServletResponse,FilterChain)Q?br /> q个Ҏ完成实际的过滤操作,当客戯求访问于qo器关联的URLӞServlet容器先调用qo器的doFilterҎ。FilterChain参数用于讉K后箋qo?/p>
◆destroy()Q?br /> Servlet容器在销毁过滤器实例前调用该ҎQ这个方法中可以释放Servletqo器占用的资源
六、Servletqo器的创徏步骤Q?/strong>
◆实现javax.servlet.Filter接口
◆实现initҎQ读取过滤器的初始化函数
◆实现doFilterҎQ完成对h或过滤的响应
◆调用FilterChain接口对象的doFilterҎQ向后箋的过滤器传递请求或响应
◆销毁过滤器
七、Servletqo器对h的过滤:
◆Servlet容器创徏一个过滤器实例
◆过滤器实例调用initҎQ读取过滤器的初始化参数
◆过滤器实例调用doFilterҎQ根据初始化参数的值判断该h是否合法
◆如果该h不合法则d该请?/p>
◆如果该h合法则调用chain.doFilterҎ该h向后l传?/p>
八、Servletqo器对响应的过滤:
◆过滤器截获客户端的h
◆重新封装ServletResponseQ在装后的ServletResponse中提供用戯定义的输出流
◆将h向后l传?/p>
◆Weblg产生响应
◆从装后的ServletResponse中获取用戯定义的输出流
◆将响应内容通过用户自定义的输出写入到~冲中
◆在~冲中修改响应的内容后清空~冲,输出响应内容
九、Servletqo器的发布Q?/strong>
◆发布Servletqo器时Q必dweb.xml文g中加入﹤filterH元素和Hfilter-mappingH元素?/p>
◆filter元素用来定义一个过滤器Q?/p>
◆filter-mapping元素用于过滤器和URL兌Q?/p>
十一、Servletqo器用的注意事项
◆由于Filter、FilterConfig、FilterChain都是位于javax.servlet包下Qƈ非HTTP包所Ҏ的,所以其中所用到的请求、响应对象ServletRequest、ServletResponse在用前都必d转换成HttpServletRequest、HttpServletResponse再进行下一步操作?/p>
◆在web.xml中配|Servlet和Servletqo器,应该先声明过滤器元素Q再声明Servlet元素
◆如果要在Servlet中观察过滤器生成的日志,应该保在server.xml的localhost对应的﹤hostH元素中配置如下HloggerH元素:
Servletqo器的情况向你介l到q里Q那么你对Servletqo器是否有了了解呢Q?/p>
Sun 的关?JavaBean 规范见:http://java.sun.com/javase/technologies/desktop/javabeans/docs/spec.htmlQ其中可下蝲?JavaBean 规范?nbsp; PDF 文?br />
实际中的问题
?
先,当然q是要说它的属性及 setter/getter Ҏ。属性以写字母开_驼峰命名格式Q相应的 getter/setter Ҏ?
get/set 接上首字母大写的属性名。多数情冉|对的Q且当前行?IDE(Eclipse、JBuilder) 也都认这个死理,q里
NetBean
值得表扬一下。但要是到些遗留的代码中属性名不规范,或者有些h是固Q或真是对属性命名犹豫不x的写下的代码Ӟ那还是有得你研究一下?br />
q里来看?Eclipse 为几个属性生成的 getter/setter Ҏ吧:
sName(?C 转过来的Q受匈牙利的影响Q认?Name 是个字符Ԍ所以加个前~ s) getSName()/setSName(String name)
URL (qx认ؓ是羃略语/专有名词Q理当全部大写,q在我们对待 ID 时经常发生的) getURL()/setURL(String url)
?
面第一个由 Eclipse 为我们生成的 getSName()/setSName(String name) ҎQ参?JavaBean
规范来说Q其实是错误的。如果出现这LҎQ放到我们的标签(?Struts 标签Q如 <s:textfield
name="sName"/>)Q或是进?Hibernate/iBatis 那种映射Ӟ你就能收到报 找不?sName 属性相应的 getter/setter Ҏ 那样的错误。不是明明有 getSName() ?setSName(String name)Q可是方法名错了Q正的版本应该?getsName() ?setsName(String name)?br />
前面首先解释了属性命名不规范产生问题的原因,现在来更仔l的了解关于 JavaBean 属性及?getter/setter Ҏ的约定,有些是硬性的?br />
属性与存取讉K的规?/font>
?JavaBean 创徏属性时Q必ȝ讎ͼ~略语通常被视Z个独立的单词Q而不是单个字母。例如,URL 对应的属性名应该?urlQ相应的 getUrl()/setUrl()Q所?ID q是?id 作ؓ属性吧Q相应的 getId()/setId()?br />
?
范中另一个特别的地方是Q第二个字母为大写的属性名要区别对待。如果属性名的第二个字母是大写的Q那么该属性名直接用作 getter/setter
Ҏ?get/set 的后部分Q就是说大小写不变。这是Z?sName 对应的存取方法是 getsName()/setsName()
的原因,不能不说q条规则很o解。那更有必要看看下面表格的规范Q?/p>
属性名/cd | getter Ҏ | setter Ҏ |
xcoordinate/Double | public Double getXcoordinate() | public void setXcoordinate(Double newValue) |
xCoordinate/Double | public Double getxCoordinate() | public void setxCoordinate(Double newValue) |
XCoordinate/Double | public Double getXCoordinate() | public void setXCoordinate(Double newValue) |
Xcoordinate/Double | 不允?/td> | 不允?/td> |
student/Boolean | public Boolean getStudent() | public void setStudent(Boolean newValue) |
student/boolean | public boolean getStudent() public boolean isStudent() |
public void setStudent(boolean newValue) |
Java 代码 | 点记?/strong> |
anOrder.getAccount().getUsername() | anOrder.account.username |
anOrder.getOrderItem().get(0).getProductId() | anOrder.orderItem[0].productId |
anObject.getId() | anObject.id |
anObject.getxCoordinate() | anObject.xCoordinate |