Web资源:web组件,静态web文件如图片
Web程序:可发布的Web资源集合
Web程序根目录下有个web-inf文件夹,如果只有jsp和静态资源,里面可以没有web.xml
根目录下可以直接放东西,也可以新建自定义目录
自动部署功能在开发完上线后要记得关闭,负责一自动重新部署,所有会话将失效
包javax.servlet和javax.servlet.http提供了servlet的接口和类
所有的servlet类都必须实现servlet接口,它定义了servlet的生命周期
父类可以是GenericServlet类或HttpServlet类
Web容器控制着Servlet的生命周期,当请求调用某个Servlet时
找到这个类,实例化,init()初始化,都只有一次
调用service(),传递request和response,可以反复
最后调用destroy(),一次
在生命周期中某些事件发生时,可以绑定一些监听器做一些处理
可以监听ServletContext,Session,Request
可以指定某个具体异常到某个页面处理
Web组件之间共享信息可以通过私有的javaBean属性,公开的域对象的属性,干脆数据库,或者其他Web资源
域对象有四种:
Javax.servlet.ServletContext
Javax.servlet.http.HttpSession
javax.servlet.ServletRequest的子类
Javax.servlet.jsp.PageContext
服务器总是要处理并发的情形,Servlet默认不是线程安全的,要自己编程处理
service()方法对于HttpServlet来说是通过doMethod()实现的
通常来说都是接受request,进行一些处理,产生response
对于HttpServlet,要求首先response一个头部,然后是具体内容
所有的request都实现了ServletRequest接口,它定义了参数,属性,协议信息和本地化信息
可以用request的getReader或getInputStream手动处理信息
对于HttpServlet则是一个HttpServletRequest对象,还包括URL,头部信息,查询串等等
所有的response都实现了ServletResponse接口
可以用getWriter或getOutputStream手动输出信息
HttpServletResponse还包括状态码和Cookie信息等
过滤器可以对requeset和response过滤,当然都包括头部和内容
过滤器本身并不产生response,它总是依赖于其他的Web资源
每个Web资源可以有0或多个filter,这个filterchain在Web资源被实例化的时候会被确定
Filter,FilterChain及FilterConfig接口定义在javax.servlet包中
通过实现Filter接口定义一个filter,doFilter()方法传递request,response,filterchain
filterchain的前面是n个filter,最后面是那个Web资源,会依次往后传递
不调用doFilter()也就是请求被拒绝
另外filter也有int()和destroy()
filter可以有初始参数,会通过FilterConfig对象传递到init()方法,整个filter中都可使用
filter要想修改response必须在response发送到客户端前截获它
可以传递一个标准输入流来包装response,然后那个Servlet会被阻塞
现在可以实现自己的response了
修改request同理
filter-mapping默认只会过滤request,也就是客户端发来的URL
自己内部的forward,include,errorpage不会过滤
/* 表示对所有URL都过滤
一个filter可以映射到多个web资源,一个web资源也可以映射多个filter
通过getRequestDispatcher("URL")来获得一个RequestDispatcher对象进行include或forward
可以从request调用,也可以从ServletContext调用
不同的是,request得到的可以不用/开头,ServletContext得到的要用/开头
他俩都是相对于/myWeb/根路径的
但如果URL不对的话,RequestDispatcher对象会是null,编程时要判断下
被include的web资源不能更改原来页面的头部
如果已经想用ServletOutputStream 或 PrintWriter对象输出了,再调用forward会报错
之前的那个request会作为forward之后的那个页面的request的一些属性存在
属性名为:javax.servlet.forward.[request-uri|context-path|servlet-path|path-info|query-string]
Enumeration a = req.getAttributeNames(); while(a!=null&&a.hasMoreElements()){//得到转发前的request Object nextElement = a.nextElement(); System.out.println(nextElement+"\t"+req.getAttribute((String)nextElement)); } System.out.println("\n");
request.getSession()可以得到HttpSession对象,可以附加各种属性供会话调用
客户端无法通知一个session结束,只能设置几分钟后自动过期
调用session的某个方法会让这个时间重置,所以是闲置时间
不过服务器端可以调用invalidate()让会话失效,并删除session数据
要想使用session跟踪,要调用resoonse.encodeURL(URL)方法
当cookie不可用时,会自动将sessionId添加到url后面
通常这么写,response.encodeURL(request.getContextPath()+”/catalog”);
调用destroy()也不会立即终止Servlet执行,但等待一定时间后会即刻终止
用以下措施来保证destroy时所有services都已结束:
1.
publicclassShutdownExampleextendsHttpServlet{ privateintserviceCounter=0;//设置一个字段,表示正有几个线程调用该servlet ... //有线程进入和退出时进行记录 protected synchronized void enteringServiceMethod(){ serviceCounter++; } protected synchronized void leavingServiceMethod(){ serviceCounter--; } protected synchronized int numServices(){ returnserviceCounter; } } protected void service(HttpServletRequestreq, HttpServletResponseresp) throwsServletException,IOException{ enteringServiceMethod(); try{ super.service(req,resp); }finally{ leavingServiceMethod(); } }
2.还在调用service时,资源就被destroy了,那当然不行
public class ShutdownExample extends HttpServlet{ private boolean shuttingDown; ... //同步方法来访问 protectedsynchronizedvoidsetShuttingDown(booleanflag){ shuttingDown=flag; } protectedsynchronizedbooleanisShuttingDown(){ returnshuttingDown; } } public void destroy(){ //还有线程在使用的话,通知其要关闭了 if(numServices()>0){ setShuttingDown(true); } /*等待service关闭.*/ while(numServices()>0){ try{ Thread.sleep(interval); }catch(InterruptedExceptione){ } } }
3.需要长时间执行的方法要经常判断该servlet是否要关闭了
public void doPost(...){ ... for(i=0;((i<lotsOfStuffToDo)&& !isShuttingDown());i++){ try{ partOfLongRunningOperation(i); }catch(InterruptedExceptione){ ... } } }
相关推荐
《JavaEE7 Tutorial》是Java企业版7(Java Platform, Enterprise Edition 7)的官方教程,旨在帮助开发者全面理解和掌握这一强大的服务器端开发框架。JavaEE7是Oracle公司推出的一套用于构建分布式、多层的企业级...
- **JSR 317 - Servlet 3.0**: - **介绍**:Servlet 3.0 规范提供了对 HTTP 请求和响应的标准化处理方式。 - **新特性**:支持异步处理、过滤器链中的异步支持、非阻塞 I/O 操作等。 #### 三、Java EE 6 技术栈 ...
该教程详细介绍了Java EE 5的核心概念、技术组件以及开发实践,覆盖了从Web层到企业级服务的所有关键方面。 #### 关键知识点详解 ##### 1. Java EE 应用模型 - **分布式多层应用**:Java EE支持构建跨多个服务器和...
**JavaEE 5 教程概述** ...通过学习《JavaEE 5 Tutorial》,开发者可以掌握这些核心技术,为构建高效、可维护的分布式企业级应用打下坚实基础。这个教程详细阐述了每个主题,适合初学者和有经验的开发者参考学习。
总结来说,JavaEE Tutorial将带你探索这个强大的企业级开发平台,包括但不限于Web服务、安全、并发、性能优化等方面,帮助你成为一名熟练的JavaEE开发者。通过阅读教程中的PDF文档,你将能够掌握JavaEE的核心技术和...
1. **Servlet 3.0**:Servlet 3.0引入了注解驱动的配置,简化了部署描述符,支持异步处理,以及动态注册Servlet和过滤器,极大地提高了开发效率。 2. **JSP 2.2**:增强了表达式语言(EL),简化了页面脚本,支持...
在"javaee7-tutorial-master"这个压缩包中,很可能是包含了整个教程的源码、步骤指南和其他辅助资料,帮助学习者逐步了解并掌握Java EE 7的关键技术和开发流程。如果你希望深入学习Java EE 7,可以按照教程中的指导...
根据给定的文件信息,文件名为"javaeetutorial7.pdf",描述为"JavaEE7的官方教程,英文原版,适合有一定英文阅读能力的读者",标签为"javaee7 tutorial7"。从这些信息中,我们可以得知知识点主要围绕Java EE 7 (Java...
- **Web 层**:支持Web应用开发,包括Servlet、JSP(Java Server Pages)、JSF(JavaServer Faces)等技术。 - **客户端层**:包括各种客户端应用程序,如Applets、桌面应用程序或移动设备上的应用程序。 #### 2. ...
Basic Concepts部分(588页)主要面向初学者,详细介绍了JavaEE平台的基础知识,包括Servlet、JSP(JavaServer Pages)、JPA(Java Persistence API)以及EJB(Enterprise JavaBeans)的基本概念和用法。这部分内容...
5. **JPA(Java Persistence API)**:JPA是Java EE的标准ORM(对象关系映射)规范,允许开发者使用面向对象的方式操作数据库。Java EE 6中的JPA 2.0增强了 Criteria查询和多表关联的功能。 6. **JAX-RS(Java API ...
【J2EE Tutorial中文版】是Java企业版(Java Enterprise Edition,简称JavaEE)学习的重要参考资料,由知名IT人士单兴华总裁推荐。这本教程是JavaEE 6的版本,意味着它涵盖了JavaEE 6规范中的所有核心技术和组件,为...
《Java EE 5 Tutorial》是SUN公司发布的一份官方教程,主要针对Java企业级应用开发,涵盖了J2EE 5版本的相关技术。这个PDF文件是开发者入门和深入理解Java企业级开发的重要参考资料。J2EE(Java 2 Platform, ...
JavaEE_API_5[1].0.chm JavaScript Professional Projects.chm JavaScript20.chm JavaScript中文手册.CHM JavaScript手册.chm JavaScript语言中文参考手册.chm java_ee_api_中英文对照版.chm jBPM 4.4 API.chm jdk ...
这个压缩包包含了一个名为"JavaEE-enterprise-application-development-tutorial-master"的项目文件,这通常是一个GitHub仓库的克隆,里面包含了完整的源代码、文档和其他相关资源。 JavaEE(Java Platform, ...
在Java EE 6 tutorial的example代码中,这个文件可能详细阐述了使用、修改和分发这些代码的条款和条件。阅读并遵守这些许可条款对于合法使用这些学习资源至关重要。 "examples"目录是核心部分,它包含了各种Java EE...
│ JavaEE_API_5[1].0.chm │ JavaScript Professional Projects.chm │ JavaScript20.chm │ JavaScript中文手册.CHM │ JavaScript手册.chm │ JavaScript语言中文参考手册.chm │ java_ee_api_中英文对照版.chm ...
5. **EJB(Enterprise JavaBeans)**:EJB是Java EE中的核心组件,提供了一种标准的方式来实现业务逻辑。在Duke's Bookstore,EJB可能被用来封装复杂的业务规则,如库存管理、订单处理和支付验证。 6. **JAX-RS...