servlet3.0 jar都有哪些注解

2935人阅读
& & & & 在servlet3.0中可以使用注解方式来简化web.xml中对Servlet的配置,当然不仅仅是对Servlet进行配置,还可以对Filter,Listener。
& & & & 在servlet3.0中同样也可以使用web.xml,在&web-app&标签下有一属性metadata-complete=&true&
在设置true时,Servlet中的注解会失效,默认值为false。在注解和web.xml中同时对一个url-pattern进行设置时,我实验的结果是注解会覆盖web.xml中的设置,书上所说的和我所实验的结果完全相反,即web.xml中设置会覆盖注解的设置,请网友各自验证后,麻烦通知我一下。
& & & & &项目中没有web.xml文件,下面我直接上代码:
@WebServlet(&/login.do&)
public class Login extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter(&name&);
PrintWriter out = response.getWriter();
out.print(&hello : & + name);
out.close();
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:27296次
排名:千里之外
原创:29篇
(1)(1)(1)(2)(1)(1)(1)(1)(1)(8)(2)(1)(3)(5)(3)(5)(1)Servlet3.0下基于注解的SpringMVC3.1配置-完全零配置文件 – OneCoder
Spring3.1.x系列的一个新特性就是支持了Servlet3.0规范,基于注解的方式配置SpringMVC框架。官方文档描述如下:
3.1.10&Support for Servlet 3 code-based configuration of Servlet Container
The new&WebApplicationInitializer&builds atop Servlet 3.0's&ServletContainerInitializer&support to provide a programmatic alternative to the traditional web.xml.
See org.springframework.web.WebApplicationInitializer Javadoc
&demonstrating migration from web.xml to&WebApplicationInitializer
既然如此,我们就来实现一下。根据WebApplicationInitializer&的注释说明,实现该接口即可。
* 基于Servlet3.0的,相当于以前&b&web.xml&/b&配置文件的配置类
* @author OneCoder
下午1:16:59
public class DefaultWebApplicationInitializer implements
WebApplicationInitializer {
public void onStartup(ServletContext appContext)
throws ServletException {
AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
rootContext.register(DefaultAppConfig.class);
appContext.addListener(new ContextLoaderListener(rootContext));
ServletRegistration.Dynamic dispatcher = appContext.addServlet(
&dispatcher&, new DispatcherServlet(rootContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping(&/&);
这里说明一下,根据WebApplicationInitializer&类的注释说明(建议大家多阅读代码注释(Javadoc),其实也就是API文档。),其实这里有两种初始化rootContext的方式。一种是利用XmlWebApplicationContext,即Spring的配置是通过传统的Xml的方式配置的。另一种就是这里用到的AnnotationConfigWebApplicationContext&,即Spring的配置也是通过注解的方式。这里,我们既然说了是完全零配置文件,那么我就采用第二种方式。利用新建的配置类,配置注解的方式,完成配置。
* Spring3.1基于注解的配置类, 用于代替原来的&b&applicationContext.xml&/b&配置文件
* @author lihzh
下午4:23:13
@Configuration
@ComponentScan(basePackages = &com.coderli.shurnim.*.biz&)
public class DefaultAppConfig {
可以看到,基本原有在配置文件里的配置,这里都提供的相应的注解与之对应。这里我们仅仅配置的包扫描的根路径,用于SpringMVC配置的扫描,以进一步达到零配置文件的效果。在业务包下,写一个MVC的controller类:
* 用户操作Action类
* @author lihzh
下午4:12:54
@Controller
public class UserAction {
@RequestMapping(&/user.do&)
public void test(HttpServletResponse response) throws IOException {
response.getWriter().write(&Hi, u guy.&);
启动Tomcat,浏览器访问地址:&
怎么样,OK了吧。看看我们的工程,这回是不是真的一个配置文件都没有。
写在最后,这里只是零配置文件的配置方式,不参与讨论配置文件与注解的优劣问题的争执。我觉得,这就是个人喜好问题。任何东西,有好的一面就有不利的一面,坚持你喜欢的并承担相应后果就好:)
I am a coder.
Servlet3.0下基于注解的SpringMVC3.1配置-完全零配置文件 was published on October 15, 2012.
& 2015 OneCoder. Powered by基于Servlet3.0 WebFragment特性优化Web产品的客户化定制开发模式
- lixor - ITeye技术网站
博客分类:
如果图片看不到,请移步:http://sdrv.ms/1dGzTCh
一、Web产品的客户化定制开发概述
很多产品在为具体客户进行部署后,每个客户都有可能提出一些个性化的需求,这就需要对产品进行一定的定制开发,此现象在中小IT公司尤其常见。在产品的定制开发过程中不可避免的需要在原产品中增加或修改功能,由于JavaWeb技术本身对模块化的支持严重不足,在进行定制开发时通常会导致版本控制混乱、开发调试不便和部署复杂等问题。
目前客户化定制开发常见模式主要有:
1.直接修改方式
通常通过SVN创建产品的分支,然后直接修改源码,添加或变更产品的部分功能。
此方式修改方便,但会导致产品版本控制混乱。
2.覆盖方式
类似直接修改方式,但不直接在产品源码中修改,在部署时先部署产品然后将修改后的类和资源文件向产品部署目录进行覆盖。
此方式部署较复杂,通常还需要修改已部署产品的配置文件,另外也会导致版本控制问题。
3.产品架构设计支持方式
产品在设计之初就考虑到各种客户化定制的需求,采用OSGI插件或其它技术支持客户化功能变更。
此方式的主要问题是设计复杂增加开发难度,另外调试不便。
Servlet3.0 WebFragment简介
2010年发布的Servlet3.0规范(从属于JavaEE6的一部分)中增加了Web片段技术,大大加强了Web项目的模块化开发支持。Servlet3.0中同时增加了异步Servlet、WebSocket、原生文件上传、注解等多种现代化特性。
目前几乎各种主流Web服务器都已经支持Servlet3.0/JavaEE6,例如:Tomcat7.x、Jetty8.x、GlassFish3.x等。
同样各种开发工具也已经提供支持,例如:Eclipse3.6、MyEclipse9.1、Netbeans7.x、IntelliJ IDEA 10.x等。
二、WebFragment实践
开发环境:MyEclipse9.1/Tomcat7.0
1.创建一个标准Web Project做为主项目
此项目除了JavaEE版本从JavaEE5变化为JavaEE6,项目整体结构上没有特别之处,主要区别是web.xml中的版本号定义为3.0。
1.1项目结构视图
屏幕剪辑的捕获时间:
1.2 web.xml截图
屏幕剪辑的捕获时间:
2.创建一个Web Fragment Project做为项目模块
2.1选择Web Fragment Project项目向导
屏幕剪辑的捕获时间:
注意:如果找不到Web Fragment Project,请勾选“Show All Wizards”选项。
2.2 创建Web Fragment Project项目
屏幕剪辑的捕获时间:
注意:“Dynamic Web Project name”项务必选中主项目。
2.3 Web Fragment项目结构视图
屏幕剪辑的捕获时间:
可以看到此项目结构类似于普通的“Java Project",项目结构中没有常见Web项目的WebRoot目录,而是在src下多了一个META-INF目录。
目录下的resources目录相当于主Web项目中的WebRoot目录,resources目录需要自行创建。
目录下的web-fragment.xml就是此Web项目片段的配置文件,相当于主Web项目中的web.xml。
web-fragment.xml截图
屏幕剪辑的捕获时间:
可以看到web-fragment.xml文件中的根标签与web.xml文件中的根标签不同,但实际上它们的内容元素(子标签)都是相同的。
3.在主项目和模块项目中各自Servlet和JSP尝试模块化开发模式
3.1在主项目“Product”中创建ServletA
创建Serlvet的过程与Serlvet2.5/JavaEE5中基本没有区别,使用默认生成的代码即可。
3.2在模块项目“ProductPlugin”中创建ServletB
3.2.1使用Servlet向导创建ServletB
屏幕剪辑的捕获时间:
注意:可以不用勾选“Generate/Map web.xml file”选项,因为在Fragment项目中根本不存在web.xml文件,所以也不需要理会向导中的错误提示信息。
3.2.2 在模块项目中引入JavaEE6库
ServletB创建之后会发现,代码中出现错误提示
屏幕剪辑的捕获时间:
此错误很明显是由于项目中未引入JavaEE相关类库,导致无法识别HttpServlet类。
在项目上右击,选择“Build Path -& Add Library”,打开添加库窗口,选择“MyEclipse Libraries -& JavaEE 6 Libraries”点击确定,错误自动消除。
屏幕剪辑的捕获时间:
3.2.3 配置ServletB
可以按照JavaEE5中配置Servlet的标准方式在web-fragment.xml中配置ServletB,在此示例中将尝试注解的方式进行配置。
打开ServletB代码,在类声明前增加“@WebServlet("/ServletB")”,注解括号中是指ServletB的UrlMapping,可以按需设置。
3.3 在模块项目中创建一个JSP
只要把JSP文件创建到src/META-INF/resources/目录下即可,可以在文件内容中添加一些关于模块项目的说明文字。
4.运行项目,验证模块化开发结果
4.1运行效果截图
4.1.1 主项目默认欢迎页
4.1.2 主项目ServletA
4.1.3 模块项目ServetB
4.1.4 模块项目JSP
通过每个功能的URL地址来看,使用WebFragment模块化开发的运行结果,与普通的WebProject开发的运行结果是一致的。
4.3 打包项目部署,分析打包结果
将主项目按照传统过程导出为标准WAR文件,然后按照生产环境部署到Tomcat7中。
进入Tomcat7/webapps/Product目录,可以看到目录中并不存在模块项目“ProductPlugin”中的jsp/servlet文件,而是在“WEB-INF/lib”目录下多出了一个“ProductPlugin.jar”文件。
模块项目“ProductPlugin”以jar的方式存在,所有模块项目的代码和资源文件都已经打包在“ProductPlugin.jar”文件中,主项目的web.xml文件中没有额外的配置,因此模块项目的加入没有污染主项目,部署也非常简单。
因此Servlet3.0 WebFragment提供的模块化开发模式,完全克服了传统产品客户化项目的问题,其效果达到了引用第三方jar包的便捷性。
浏览: 61241 次
来自: 合肥
简单实用,非常不错!
&div class=&quote_title ...
还有一种更好的方法,修改上面server.xml中protoc ...
&Connector port=&44 ...
LZ下的是哪个呢 里面好几个东东随笔 - 260
评论 - 668Servlet3.1规范(最终版)中文版下载 - 开涛的博客 - ITeye技术网站
博客分类:
最近也发布了,其包含的Servlet 3.1规范也发布了最终版,之前翻译的早期预览版本《》也有少许变化。所以最近利用业余时间修订了一下,提供给大家下载。
另外,目前正在整理一份,包含了servlet3.0及servlet3.1新特性的演示代码,可以前往github学习。
-----------------------------------------------------------------------------------------------------------------------------------
如下列表中红色部分是与之前的预览版之间的主要变化:
1. 1.6节,“与Java Servlet规范 2.5版本间的兼容性”。移除“1.6.1 监听器(Listener)顺序”。
2. 2.3.3.3节,“异步处理”,和AsyncContext的javadoc。
a. 明确了AsyncListener.onStartAsync的行为。
b. 修复示例代码中的错误和注释。
c. 明确了异步请求完成或分派之后的AsyncContext.getRequest和AsyncContext.getResponse的行为。
d. 指定默认异步超时值。
e. 出错时明确AsyncListener的行为。
3. 添加2.3.3.5节,“升级处理”,和新的类ProtocolHandler和WebConnection。
4. 3.2节,“文件上传”,明确了什么时候处理multi-part/form-data。
5. 3.7节“非阻塞IO”,5.7节“响应对象的生命周期”添加异步IO。
6. 明确4.4节,“配置方法”,ServletContextListener必须声明在描述符或以@WebListener注解的。
7. 添加HttpSessionIdListener到4.4.3.1节“void addListener(String className) ”、4.4.3.2节“&T extends EventListener& void addListener(T t) ”、4.4.3.3节“void addListener(Class &? extends EventListener& listenerClass) ”、4.4.3.4节“&T extends EventListener& void createListener(Class&T& clazz) ”、8.1.4节“@WebListener” 和15.5节“注解和资源注入”的监听器列表。
8. 4.4.3.5节,“用于编程式添加Servlet、Filter和Listener的注解处理需求”。更新参考。
9. 4.7节,“多主机和Servlet上下文”。添加ServletContext.getVirtualServerName方法。
10. 5.1节,“缓冲”,和ServletResponse的javadoc。明确了ServletResponse.reset的行为。
11. 第5章,“头字段”。更新X-Powered-By头字段。
12. 6.2.1节,“过滤器生命周期”(4)。需要过滤器和Servlet在同一个线程中处理。
13. 7.2节,“创建会话”。添加了更高会话ID。
14. 8.1节,“注解和可插拔性”,8.2.1节,“web.xml模块”,和1.6.1节,“处理注解”。明确metadata-complete行为。
15. 8.1.1节,“@WebServlet”。编程式添加servlet与一个名字不同于指定在注解中的。
16. 8.2.2节,“web.xml和web-fragment.xml顺序”,和8.2.4节,“共享库 / 运行时可插拔性”。无论是否设置了metadata-complete,HandlesTypes注解将应用。
17. 8.2.3节,“装配web.xml、web-fragment.xml描述符和注解”。明确Listener调用顺序。
18. 8.2.4节,“共享库 / 运行时可插拔性”,明确创建ServletCotnainerInitilizer实例。
19. 9.4节,“Forward方法”,明确了当请求进入异步模式时response的行为。
20. 表格11-2。添加“改变ID”事件。
21. 10.9.2节,“Error-Page”和14.4节,“部署描述符图解”。添加默认错误页面描述。
22. 11.3.3节,“监听器注册”。明确顺序。
23. 12.2节,“映射规范”。明确servlet映射到相同模式的行为。
24. 13.3节,“编程式安全”,13.4.1.3节,“映射@HttpConstraint和@HttpMethodConstraint为XML”,和13.8.1节,“组合约束”。添加角色“*”和“**”的描述。
25. 13.6.3节,“基于表单的认证”,添加状态码303。
26. 添加13.6.3.1节,“登录表单”。添加autocomplete=”off”。
27. 添加13.8.4节,“未覆盖(uncovered)的协议方法”。
28.14.3节,“部署描述符”,更新schema URL。
29. 章节15.3.1,“EJB(TM)调用中的安全身份传播”,明确提到Servlet.init和Servlet.destroy。
30. 15.5.15,“JavaEE要求的上下文和依赖注入”。添加HttpUpgradeHandler和添加Java EE 7规范参考。
31. 在ServletRequestWrapper、ServletResponseWrapper和HandlesTypes中添加泛型。
32. HttpServletResponse.sendRedirect的javadoc:支持的网络路径引用。
33. 添加新的方法ServletRequest.getContentLengthLong和ServletResponse.setContentLengthLong。
34. 添加新的Part.getSubmittedFileName。
下载次数: 3116
下载次数: 8398
浏览 23038
jinnianshilongnian 写道NightSnow 写道看了下楼主代码,咱们管理AsyncContext的数据结构和方式都差不多 我遇到了一个问题,就是超时之后跨域的请求就会终止轮询了,而非跨域或者有消息在超时前推送,轮询都是正常的。想请教下楼主在AsyncContext超时的时候能够返回正确的状态码给客户端浏览器吗?想解决轮询的问题,而且客户端浏览器看到很多超时的错误也不舒服。客户端的超时应该比服务器端的超时稍微长点。如果是服务器,可以使用AsyncListener.onTimeout 回调 返回响应,你试试这个地控制下如果是客户端,也需要接timeout异常,服务器无法返回数据。 长轮询不是很可靠,比如网络不是很好的时候,可能消息的推送是有问题的。 客户端没回调那天我后来才发现是跨域请求超时jquery不会回调error事件,后来我换成jquery-jsonp就好了。现在我不想往客户端浏览器返回错误码,AsyncListener.onTimeout(AsyncEvent even)监听我之前用来清理已被管理的连接,但是此时我用response往客户端写响应数据和设置状态码好像都没能返回到客户端。你测试过在onTimeout事件之后还可以写吗?如果实在没办法的话只能再用nginx之类的试一下。onTimeout 比如jetty的默认行为是再隔几秒重新调度; 所以按理说还是可以写的; onTimeout需要自己complete,否则一直没释放;
NightSnow 写道看了下楼主代码,咱们管理AsyncContext的数据结构和方式都差不多 我遇到了一个问题,就是超时之后跨域的请求就会终止轮询了,而非跨域或者有消息在超时前推送,轮询都是正常的。想请教下楼主在AsyncContext超时的时候能够返回正确的状态码给客户端浏览器吗?想解决轮询的问题,而且客户端浏览器看到很多超时的错误也不舒服。客户端的超时应该比服务器端的超时稍微长点。如果是服务器,可以使用AsyncListener.onTimeout 回调 返回响应,你试试这个地控制下如果是客户端,也需要接timeout异常,服务器无法返回数据。 长轮询不是很可靠,比如网络不是很好的时候,可能消息的推送是有问题的。 客户端没回调那天我后来才发现是跨域请求超时jquery不会回调error事件,后来我换成jquery-jsonp就好了。现在我不想往客户端浏览器返回错误码,AsyncListener.onTimeout(AsyncEvent even)监听我之前用来清理已被管理的连接,但是此时我用response往客户端写响应数据和设置状态码好像都没能返回到客户端。你测试过在onTimeout事件之后还可以写吗?如果实在没办法的话只能再用nginx之类的试一下。
看了下楼主代码,咱们管理AsyncContext的数据结构和方式都差不多 我遇到了一个问题,就是超时之后跨域的请求就会终止轮询了,而非跨域或者有消息在超时前推送,轮询都是正常的。想请教下楼主在AsyncContext超时的时候能够返回正确的状态码给客户端浏览器吗?想解决轮询的问题,而且客户端浏览器看到很多超时的错误也不舒服。客户端的超时应该比服务器端的超时稍微长点。如果是服务器,可以使用AsyncListener.onTimeout 回调 返回响应,你试试这个地控制下如果是客户端,也需要接timeout异常,服务器无法返回数据。 长轮询不是很可靠,比如网络不是很好的时候,可能消息的推送是有问题的。
& 上一页 1
jinnianshilongnian
浏览: 5466903 次
浏览量:932968
浏览量:968626
浏览量:1744177
浏览量:109717
浏览量:413436
浏览量:124085
浏览量:778434
浏览量:71504
zqb666kkk 写道zqb666kkk 写道xiaozhi ...
zqb666kkk 写道xiaozhi7616 写道world ...
xiaozhi7616 写道worldfather168 写道 ...
java.lang.NullPointerException

我要回帖

更多关于 servlet3 注解 的文章

 

随机推荐