兄弟连_马剑威_JavaWeb_097_Servlet3.0新特性

合集下载

Servlet3.0 新特性

Servlet3.0 新特性

一、概述Servlet 是Java EE 规范体系的重要组成部分,也是Java 开发人员必须具备的基础技能,Servlet 3.0 引入的若干重要新特性,包括异步处理、新增的注解支持、可插性支持等,为读者顺利向新版本过渡扫清障碍。

Tomcat 支持servlet版本Servlet版本Tomcat版本Jdk最小版本JA V A EE版本Servlet 2.5 Tomcat 6 1.5 Java EE5Servlet 3.0 Tomcat7 1.6 Java EE6servlet3.0 的新特性包括如下方面 :1.异步处理支持:有了该特性,Servlet 线程不再需要一直阻塞,直到业务处理完毕才能再输出响应,最后才结束该Servlet 线程。

在接收到请求之后,Servlet 线程可以将耗时的操作委派给另一个线程来完成,自己在不生成响应的情况下返回至容器。

针对业务处理较耗时的情况,这将大大减少服务器资源的占用,并且提高并发处理速度。

2.新增的注解支持:该版本新增了若干注解,用于简化Servlet、过滤器(Filter)和监听器(Listener)的声明,这使得web.xml 部署描述文件从该版本开始不再是必选的了。

3.可插性支持:开发者可以通过插件的方式很方便的扩充已有Web 应用的功能,而不需要修改原有的应用。

二、异步处理支持异步处理特性可以应用于Servlet 和过滤器两种组件,由于异步处理的工作模式和普通工作模式在实现上有着本质的区别,因此默认情况下,Servlet 和过滤器并没有开启异步处理特性。

异步处理关键是在于将复杂业务处理另外开一个线程,而Servlet将执行好的业务先送往jsp输出,等到耗时业务做完后再送往JSP页面,即先显示一部分,好事业务处理完后再显示一部分。

1.对于使用传统的部署描述文件(web.xml) 配置Servlet 和过滤器的情况,Servlet 3.0 为<servlet> 和<filter> 标签增加了<async-supported> 子标签,该标签的默认取值为false,要启用异步处理支持,则将其设为true 即可。

兄弟连_马剑威_JavaWeb_090_Servlet线程安全

兄弟连_马剑威_JavaWeb_090_Servlet线程安全

第讲线程安第90讲:Servlet线程安全
课程大纲•1、Servlet线程安全
1、Servlet线程安全
•Servlet引擎采用多线程模式运行,它为并发的每个访问请求都使用一个独立的线程来进行响应,但带来了线程安全问题。

•两个方法解决这个问题:
•1、SingleThreadModel接口
•Servlet实现了SingleThreadModel接口,那么Servlet引擎将以单线程模式来调用S l t i方法对于实现了Si l Th dM d l S l t S l t
Servlet的service方法。

对于实现了SingleThreadModel接口的Servlet,Servlet引擎仍然支持对该Servlet的多线程并发访问,其采用的方式是产生多个Servlet实例对象,并发的每个线程分别调用独立的一个Servlet实例对象。

•2、使用同步代码块
1、Servlet线程安全
•哪些情况下需要考虑线程安全问题:
•(1)访问成员变量时
•(2)访问共享资源时
THANK
YOU!
微信号:weige-java
扫一扫,关注威哥微信公众平台。

简述servlet3.0技术

简述servlet3.0技术

一、servlet3.0技术简介Servlet3.0是JavaEE6规范中的一部分,它引入了许多新特性,丰富了Servlet的功能和灵活性。

在之前的Servlet版本中,开发者需要通过web.xml文件配置Servlet的映射关系和其他参数,而在Servlet3.0中,可以为Servlet提供注解方式的配置,简化了开发流程。

Servlet3.0还支持异步处理请求、动态注册Servlet和过滤器等功能,使得Servlet在处理Web请求方面更加高效、灵活。

二、Servlet3.0的新特性1. 注解配置在Servlet3.0中,可以使用注解方式来配置Servlet和Filter,不再需要在web.xml文件中进行繁琐的配置。

开发者只需在Servlet类或者Filter类上使用WebServlet或WebFilter注解,并指定相关的配置参数,即可在应用启动时自动注册Servlet和Filter。

2. 异步处理请求Servlet3.0引入了异步处理请求的功能,通过调用HttpServletRequest的startAsync方法,将请求分发给另一个线程去处理,同时当前线程可以处理其他请求,提高了服务器的并发处理能力。

3. 动态注册Servlet和Filter在Servlet3.0中,可以通过ServletCont本人nerInitializer接口来动态注册Servlet和Filter,无需在web.xml中配置,使得应用的灵活性和可扩展性得到了增强。

4. 文件上传Servlet3.0提供了新的Part接口,用于处理文件上传,开发者可以通过HttpServletRequest的getParts方法获取上传的文件,简化了文件上传的处理流程。

5. 长时间连接Servlet3.0支持长时间连接,可以在Servlet中处理长时间的连接请求,例如WebSocket等。

6. 无部署描述符在Servlet3.0中,支持无部署描述符的部署方式,即可以在不使用web.xml文件的情况下部署应用。

兄弟连_马剑威_JavaWeb_092_过滤器Filter

兄弟连_马剑威_JavaWeb_092_过滤器Filter

第92讲:过滤器Filter课程大纲•1、过滤器的概念•2、将过滤器映射到Servlet•3、将多个过滤器映射到一个Servlet •4、改变过滤器应用于servlet的顺序•5、为过滤器配置初始参数•6、可选择地使用过滤器阻塞请求1、过滤器的概念•Servlet过滤是在2001年由servlet API2.3版本中提出的。

过滤是一种功能强大的技术,servlet开发人员可以用它来生成一系列的Java类,以一定的顺序执行,响应客户端的请求。

•开发人员从创建一个或多个实现javax.servlet.Filter接口的Java类开始,这些类可以在Servlet请求处理之前采取一些动作,换句话说,它先于与之相关的servlet或JSP页面运行在服务器上。

在请求发送到其目标之前创建系列动作(包括完全阻塞请求)。

运行在服务器上。

在请求发送到其目标之前创建一系列动作(包括完全阻塞请求)。

1、过滤器的概念•过滤器的基本原理:1、过滤器的概念•过滤器的基本原理:1、过滤器的概念•过滤器的基本原理:•在Servlet作为过滤器使用时,它可以对客户的请求进行处理。

处理完成后,它会交给下一个过滤器处理,这样,客户的请求在过滤链里逐个处理,直到请求发送到目标为止。

1、过滤器的概念•过滤器的基本原理:•例如edit.jspdit j1、检查会话是否失效的过滤器2、统一设置编码的过滤器目标对象:Servlet、JSP、HTML目标对象等2、将过滤器映射到Servlet•问题:如何将过滤器映射或应用到一个Serlvet?••解决:在web.xml中使用filter和filter-mapping元素关联过滤器和servlet••WEB容器可以通过部署描述文件中的信息,找到希望应用于servlet上的过滤器。

filter 元素将过滤器名一实现javax.servlet.Filter接口的Java类关联在一起。

然后与以前在b l l t i元素类似filt i元素将个过滤器与web.xml中使用的servlet-mapping元素类似,filter-mapping元素将一个过滤器与URL 映射或路径关联在一起。

Servlet工作原理

Servlet工作原理

Servlet工作原理Servlet是Java编写的服务器端程序,用于处理客户端的请求并生成响应。

它是Java Servlet API的一部分,可以在支持Java的Web服务器上运行。

本文将详细介绍Servlet的工作原理。

1. Servlet容器Servlet容器是Web服务器或应用服务器中的一个组件,用于管理和执行Servlet。

它负责加载、初始化和销毁Servlet,以及处理客户端的请求和生成响应。

常见的Servlet容器有Tomcat、Jetty和WebLogic等。

2. Servlet生命周期Servlet的生命周期包括三个阶段:加载和初始化、请求处理和销毁。

2.1 加载和初始化当Servlet容器启动时,会加载并初始化配置的Servlet。

加载过程中,容器会查找并加载Servlet的类文件。

初始化过程中,容器会调用Servlet的init()方法,用于执行一些初始化操作,如读取配置文件、建立数据库连接等。

2.2 请求处理当客户端发送请求时,Servlet容器会创建一个Servlet实例来处理该请求。

容器会调用Servlet的service()方法,并将请求和响应对象作为参数传递给该方法。

在service()方法中,开发人员可以根据请求类型(GET、POST等)进行相应的处理逻辑,如读取请求参数、调用业务逻辑处理数据等。

2.3 销毁当Servlet容器关闭或重新加载Web应用程序时,会销毁所有已加载的Servlet 实例。

容器会调用Servlet的destroy()方法,开发人员可以在该方法中执行一些清理操作,如关闭数据库连接、释放资源等。

3. Servlet映射和URL匹配Servlet容器通过URL映射来确定哪个Servlet应该处理特定的请求。

URL映射可以通过web.xml配置文件或使用注解的方式进行定义。

例如,可以将特定URL 模式映射到某个Servlet,或将特定文件扩展名映射到某个Servlet。

兄弟连_马剑威_JavaWeb_097_Servlet3.0新特性

兄弟连_马剑威_JavaWeb_097_Servlet3.0新特性

第97讲:Servlet3.0新特性课程大纲•1、Annotation进行配置•2、模块化编程•3、Servlet异步处理•4、异步Listener•5、文件上传API简化1、Annotation进行配置•tomcat 7.0.X 支持Servlet 3.0•Servlet、Filter、Listener无需在web.xml中进行配置,可以通过Annotation进行配置• 1.Servlet•只需要在java源文件的Servlet类前面加上:•@WebServlet(name="",urlPatterns={""},initParams={@WebInitParam(name="",value =""),loadOnStartup=1})•public class MyServlet extends HttpServlet{}1、Annotation进行配置•Servlet 3.0 web.xml•<?xml version="1.0" encoding="UTF-8"?>•<web-app version="3.0" xmlns="/xml/ns/javaee"•xmlns:xsi="/2001/XMLSchema-instance"•xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_3_0.xsd">•</web-app>1、Annotation进行配置•Servlet、Filter、Listener无需在web.xml中进行配置,可以通过Annotation进行配置• 2.Filter•只需要在java源文件的Filter类前面加上•@WebFilter(filterName="",urlPattern={"/"});1、Annotation进行配置•Servlet、Filter、Listener无需在web.xml中进行配置,可以通过Annotation进行配置• 3.Listener•现在只需要在java源文件的Listener类前面加上•@WebListener即可;2、模块化编程•原本一个web应用的任何配置都需要在web.xml中进行,因此会使得web.xml变得很混乱,而且灵活性差,因此Servlet 3.0可以将每个Servlet、Filter、Listener打成jar包,然后放在WEB-INF\lib中;注意各自的模块都有各自的配置文件,这个配置文件的名称为web-fragment.xml ;web-fragment xml;••制作一个Servlet模块的步骤:• 1.编写Servlet,并编译;1并编译;• 2.将此编译class文件及所在包通过jar包命令打成jar包;• 3.将此jar包解压打开,将META-INF中的•manifest删除并添加web-fragment.xml;web fragment xml• 4.将此jar包放入WEB-INF\lib中即可;•2、模块化编程•web-fragment.xml注意点:• 1.根元素为<web-fragment>;• 2.<name></name>表示模块名称;• 3.<ordering></ordering>是此模块的加载顺序;• 4.<before><others/></before>表示第一个加载;• 5.<after><name>A</name></after>表示比A后面加载;• 6.可以在里面部署listener、filter、servlet2、模块化编程•web-fragment.xml 头声明:•<?xml version="1.0" encoding="UTF-8"?>•<web-fragment xmlns="/xml/ns/javaee"•xmlns:xsi="/2001/XMLSchema-instance"•xsi:schemaLocation="/xml/ns/javaee •/xml/ns/javaee/web-fragment_3_0.xsd"•version="3.0">•</web-fragment>3、Servlet异步处理•Servlet在MVC中作为控制器,控制器负责分发任务给MODEL完成,然后把结果交给JSP显示;•而如果有许多MODEL,其中有一个MODEL处理时间很长,则会导致整个页面的显示很慢;很慢•异步处理关键点:将复杂业务处理另外开一个线程,而Servlet将执行好的业务先送往jsp输出,等到耗时业务做完后再送往JSP页面;句话:先显示部分,再显示部分;•一句话:先显示一部分再显示一部分;•异步处理Servlet的注意点是:• 1.需要在Annotation中注明asyncSupported=true;4、异步Listener•异步监听器用来监听异步处理事件;即“三”中讲到的知识点;•此监听器类似于ServletContextListener的机制;•只需要实现AsyncListener接口即可;•此接口有4个方法:public void onStartAsync(AsyncEvent event)throws IOException;•public void onComplete(AsyncEvent event);•public void onTimeout(AsyncEvent event);•public void onError(AsyncEvent event);5、文件上传API简化•原本文件上传时通过common-fileupload或者SmartUpload,上传比较麻烦,在Servlet3.0 中不需要导入任何第三方jar包,并且提供了很方便进行文件上传的功能;••注意点:注意点• 1.html中<input type="file">表示文件上传控件;• 2. form的enctype="multipart/form-data";• 3.在Servlet类前加上@MultipartConfig类• 4.request.getPart()获得;THANKYOU!微信号:weige-java扫一扫,关注威哥微信公众平台。

黑马程序员WEB09-Servlet篇笔记

黑马程序员WEB09-Servlet篇笔记

第9章WEB09-Servlet篇1.1案例一:使用Servlet完成一个用户登录的案例.1.1.1需求:在网站的首页上,登录的链接,点击登录的链接,可以跳转到登录的页面.在登录的页面中输入用户名和密码点击登录的案例.完成登录的功能.1.1.2分析:1.1.2.1技术分析:【HTTP的协议的概述】协议:* 什么是协议:规定双方需要遵守的规则.HTTP协议:* 什么是HTTP协议:用来规定浏览器与服务器之前需要遵守的规则.HTTP协议的作用:规范浏览器和服务器之间的数据传递.HTTP协议的特点:* 基于请求和响应的模型.* 必须先有请求后有响应.* 请求和响应必须成对出现.* 默认的端口号是80.HTTP协议的版本:* 1.0 :每次响应后即刻关闭了连接.* 1.1 :现在使用.不是每次响应后挂断,等待长时间以后没有请求会挂断.【HTTP协议的演示】抓包分析:GET方式:* 请求部分:GET /day09/demo1-http/demo2.html?name=aaa&age=23 HTTP/1.1Accept: text/html, application/xhtml+xml, */*X-HttpWatch-RID: 59176-10011Referer: http://localhost:8080/day09/demo1-http/demo1.htmlAccept-Language: zh-CNUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko Accept-Encoding: gzip, deflateHost: localhost:8080DNT: 1Connection: Keep-Alive抓包分析:POST方式:POST /day09/demo1-http/demo2.html HTTP/1.1Accept: text/html, application/xhtml+xml, */*X-HttpWatch-RID: 59176-10031Referer: http://localhost:8080/day09/demo1-http/demo1.htmlAccept-Language: zh-CNUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko Content-Type: application/x-www-form-urlencodedAccept-Encoding: gzip, deflateHost: localhost:8080Content-Length: 15DNT: 1Connection: Keep-AliveCache-Control: no-cachename=bbb&age=38* 响应部分:HTTP/1.1 200 OKServer: Apache-Coyote/1.1Accept-Ranges: bytesETag: W/"145-1461807615933"Last-Modified: Thu, 28 Apr 2016 01:40:15 GMTContent-Type: text/htmlContent-Length: 145Date: Thu, 28 Apr 2016 01:43:52 GMT<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><h1>Demo2.html</h1></body></html>【HTTP协议的详解】请求部分* 请求行* 提交方式:* 提交方式有很多,常用的GET和POST:* GET和POST的区别:* GET的提交的参数会显示到地址栏上,而POST不显示.* GET往往是有大小限制的,而POST没有大小的限制.* GET没有请求体,而POST有请求体.* 提交路径:* 协议版本:* 请求头* 都是键值对的形式显示的.一般一个key对应一个value,也有个别的是一个key对应多个value.* User-Agent :代表浏览器的类型. --- 文件下载:下载中文文件:IE使用URLEncodor进行编码,而Firefox使用Base64编码.* Referer :代表的是网页的来源. --- 防盗链.* If-Modified-Since :通常与响应中的头Last-Modified一起使用查找本地缓存.* 请求体* 就是POST提交方式的提交的参数.响应部分* 响应行:* 协议版本* 状态码:* 200 :成功* 302 :重定向* 304 :查找本地缓存* 404 :资源不存在* 500 :服务器内部错误* 状态码描述* 响应头:键值对,一般一个key对应一个value,也有一个key对应多个value.* Last-Modified :与请求中的If-Modified-Since一起使用查找本地缓存.* Content-Dispostion :文件下载的使用使用的一个头信息.* Location :重定向的跳转的路径.* Refresh :定时刷新/定时跳转.* 响应体:显示浏览器的页面的内容.【Servlet的概述】什么是Servlet:* 就是一个运行在WEB服务器上的小的Java程序,用来接收和响应从客户端发送过来的请求,通常使用HTTP 协议.* Servlet就是SUN公司提供的一个动态网页开发技术.Servlet的作用:* 用来处理从客户端浏览器发送的请求,并且可以对请求作出响应使用Servlet:* 编写一个类实现Servlet接口.* 将编写的这个类配置到服务器中.Servlet的入门:* 编写类:public class ServletDemo1 implements Servlet{@Override/*** 为用户处理请求和响应的方法.*/public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {res.getWriter().println("Hello Servlet...");}...}* 配置:<!-- 配置Servlet --><servlet><!-- Servlet的名称 --><servlet-name>test1</servlet-name><!-- SErvlet的全路径 --><servlet-class>com.itheima.a_servlet.ServletDemo1</servlet-class> </servlet><!-- Servlet的映射 --><servlet-mapping><!-- Servlet的名称 --><servlet-name>test1</servlet-name><!-- Servlet的访问路径 --><url-pattern>/ServletDemo1</url-pattern></servlet-mapping>* 访问:http://localhost:8080/day09/ServletDemo1【使用ServletRequest接收参数】* String getParameter(String name); ---用于接收一个名称对应一个值的数据.* String[] getParameterValues(String name);---用于接收一个名称对应多个值的数据.* Map getParameterMap(); ---用于接收表单中的所有的数据,Map的key是表单提交的参数名称,Map的value是提交参数的值.* Enumeration getParameterNames() ---用于获取表单中提交的所有的参数的名称. 【Servlet的访问流程】【Servlet的实现的关系】Servlet :接口|GenericServlet :通用的Servlet|HttpServlet :HttpServlet* 编写一个类继承HttpServlet,重写doGet和doPost方法.* 配置1.1.3代码实现1.1.3.1步骤一:创建数据库和表:create database day09;use day09;create table user(id int primary key auto_increment,username varchar(20),password varchar(20),nickname varchar(20));insert into user values (null,'aaa','111','小凤');insert into user values (null,'bbb','111','小童童');1.1.3.2步骤二:创建包和类:1.1.3.3步骤三:引入jar包* mysql的数据库的驱动包* c3p0连接池的jar包* dbutils的包1.1.3.4引入login的页面1.1.3.5编写Servlet-->Service-->DAO1.1.4总结:1.1.4.1Servlet的生命周期:(*****)生命周期:就是一个对象从创建到销毁的过程.Servlet生命周期:Servlet从创建到销毁的过程.* 何时创建:用户第一次访问Servlet创建Servlet的实例* 何时销毁:当项目从服务器中移除的时候,或者关闭服务器的时候.用户第一次访问Servlet的时候,服务器会创建一个Servlet的实例,那么Servlet中init方法就会执行.任何一次请求服务器都会创建一个新的线程访问Servlet中的service的方法.在service方法内部根据请求的方式的不同调用doXXX的方法.(get请求调用doGet,post请求调用doPost).当Servlet中服务器中移除掉,或者关闭服务器,Servlet的实例就会被销毁,那么destroy方法就会执行.1.1.4.2Servlet的相关的配置:【启动时创建Servlet】Servlet默认是在第一次访问的时候创建的.现在让Servlet在服务器启动的时候创建好.进行对Servlet 的配置:在web.xml中在<servlet></servlet>标签中配置:* <load-on-startup>2</load-on-startup> --- 传入正整数,整数越小,被创建的优先级就越高. 【url-pattern的配置】url-pattern配置方式共有三种:1.完全路径匹配:以 / 开始例如: /ServletDemo4 , /aaa/ServletDemo5 , /aaa/bbb/ServletDemo62.目录匹配:以 / 开始需要以 * 结束. 例如: /* ,/aaa/* ,/aaa/bbb/*3.扩展名匹配:不能以 / 开始以 * 开始的. 例如: *.do , *.action***** 错误的写法: /*.do有如下的配置:<servlet><servlet-name>ServletDemo4</servlet-name><servlet-class>com.itheima.a_servlet.ServletDemo4</servlet-class></servlet><servlet-mapping><servlet-name>ServletDemo4</servlet-name><url-pattern>/ServletDemo4</url-pattern></servlet-mapping><servlet><servlet-name>ServletDemo5</servlet-name><servlet-class>com.itheima.a_servlet.ServletDemo5</servlet-class> </servlet><servlet-mapping><servlet-name>ServletDemo5</servlet-name><url-pattern>/*</url-pattern></servlet-mapping><servlet><servlet-name>ServletDemo6</servlet-name><servlet-class>com.itheima.a_servlet.ServletDemo6</servlet-class> </servlet><servlet-mapping><servlet-name>ServletDemo6</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>如果访问地址:http://localhost:8080/day09/ServletDemo4:第一个http://localhost:8080/day09/aaa.do:第二个*****完全路径匹配 > 目录匹配 > 扩展名匹配1.1.4.3开发中的路径的编写:相对路径:都是需要找位置相对关系.不能以 / 开始的.* ./ 当前路径 ../上一级目录* 使用相对路径访问:* http://localhost:8080/day09/demo4-url/demo1.html* http://localhost:8080/day09/ServletDemo6绝对路径:不需要找位置相对关系. 以 / 开始的.* 绝对路径中分为客户端路径和服务器端路径:* 客户端路径一定要加工程名. /day09/ServletDemo6* 服务器端路径不需要加工程名. /ServletDemo61.2案例二:登录成功以后5秒钟跳转到另一个页面.1.2.1需求:在登录成功后,页面5秒钟跳转到其他的一个页面.1.2.2分析:1.2.2.1技术分析:【使用Http协议中的Refresh头信息】Refresh之前已经介绍可以定时页面跳转.需要使用程序设置头信息才可以.【response中设置响应头】* addHeader(String name,String value); --- 针对一个key对应多个value的响应头.* addDateHeader(String name,long date);* addIntHeader(String name,int value);* setHeader(String name,String value); --- 针对一个key对应一个value的响应头.* setDateHeader(String name,long date);* setIntHeader(String name,int value);例如:头信息: xxx:aaa* addHeader(“xxx”,”bbb”); -->xxx:aaa,bbb* setHeader(“xxx”,”bbb”); -->xxx:bbb1.2.3代码实现:在登录成功后的代码上,定时的跳转.public class UserRefreshServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {try {// 解决向页面输出中文的乱码问题!!!response.setContentType("text/html;charset=UTF-8");// 1.接收表单提交的参数.String username = request.getParameter("username");String password = request.getParameter("password");// 2.封装到实体对象中.User user = new User();user.setUsername(username);user.setPassword(password);// 3.调用业务层处理数据.UserService userService = new UserService();User existUser = userService.login(user);// 4.根据处理结果显示信息(页面跳转).if(existUser == null){// 登录失败response.getWriter().println("<h1>登录失败:用户名或密码错误!~</h1>");}else{// 登录成功// response.getWriter().println("Login Success...");response.getWriter().println("<h1>登录成功!您好:"+existUser.getNickname()+"</h1>");response.getWriter().println("<h3>页面将在5秒后跳转!</h3>");response.setHeader("Refresh","5;url=/day09/demo5-refresh/index.html");}} catch (Exception e) {e.printStackTrace();}}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}1.2.4总结:1.2.4.1使用JS控制读秒的效果.<script type="text/javascript">var time = 5;window.onload = function(){setInterval('changeTime()',1000);}function changeTime(){time--;document.getElementById("s1").innerHTML = time;}</script>1.3案例三:记录网站的登录成功的人数.1.3.1需求:登录成功后,5秒后跳转到某个页面,在页面中显示您是第x位登录成功的用户.1.3.2分析:1.3.2.1技术分析:【ServletContext对象】***** ServletContext对象存取数据,存的数据都是有一定的作用的范围的.这种对象称为是域对象.* 用来存取数据:setAttribute(String name,Object object)* 用来向ServletContext中存入数据.* 用来从ServletContext中获取数据.getAttribute(String name)* 用来从ServletContext中移除数据.removeAttribute(String name)1.3.3代码实现:/*** 登录代码的Servlet*/public class UserCountServlet extends HttpServlet {private static final long serialVersionUID = 1L;@Overridepublic void init() throws ServletException {// 初始化一个变量count的值为0.int count = 0;// 将这个值存入到ServletContext中.this.getServletContext().setAttribute("count", count);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {try {response.setContentType("text/html;charset=UTF-8");// 1.接收表单提交的参数.String username = request.getParameter("username");String password = request.getParameter("password");// 2.封装到实体对象中.User user = new User();user.setUsername(username);user.setPassword(password);// 3.调用业务层处理数据.UserService userService = new UserService();User existUser = userService.login(user);// 4.根据处理结果显示信息(页面跳转).if(existUser == null){// 登录失败response.getWriter().println("<h1>登录失败:用户名或密码错误!</h1>");}else{// 登录成功// 记录次数:int count = (int) this.getServletContext().getAttribute("count");count++;this.getServletContext().setAttribute("count", count);response.getWriter().println("<h1>登录成功:您好:"+existUser.getNickname()+"</h1>");response.getWriter().println("<h3>页面将在5秒后跳转!</h3>");response.setHeader("Refresh", "5;url=/day09/CountServlet");}} catch (Exception e) {e.printStackTrace();}}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}public class CountServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 获得Count的值。

servlet常用方法

servlet常用方法

servlet常用方法Servlet是在服务器端运行的Java程序,可以接收客户端请求并做出响应。

Servlet 常用的方法包括:1、init(ServletConfig config): 初始化方法,在Servlet第一次创建时调用,且只调用一次。

2、service(ServletRequest request, ServletResponse response): 服务方法,处理客户端的请求,返回响应给客户端。

这个方法在接收到一个请求时被调用一次。

3、destroy(): 销毁方法,当服务器停止或者卸载Servlet时调用,仅执行一次。

4、getServletConfig(): 返回当前Servlet的配置对象。

5、getServletInfo(): 返回关于Servlet的描述信息。

6、getAttribute(String name): 获取名称为name的属性值。

7、setAttribute(String name, Object object): 在请求中保存名称为name的属性。

8、getInitParameter(String name): 返回初始化参数name的值。

9、getServletContext(): 返回当前Servlet的上下文。

10、getMajorVersion(), getMinorVersion(): 返回主、次版本号。

11、getEffectiveMajorVersion(), getEffectiveMinorVersion(): 返回实际主、次版本号。

这些是Servlet常用的一些方法,帮助我们更好地进行请求处理、信息获取以及状态管理等操作。

javaweb机试题及答案

javaweb机试题及答案

javaweb机试题及答案一、单项选择题(每题2分,共20分)1. 在JavaWeb中,用于将客户端请求映射到Servlet的配置方式是:A. 注解B. XMLC. 注解和XMLD. 以上都不是答案:C2. 下列哪个不是Servlet的生命周期方法?A. init()B. service()C. start()D. destroy()答案:C3. 在JSP中,以下哪个标签用于声明变量?A. <%! %>B. <% %>C. <%= %>D. <%@ %>答案:A4. 下列哪个是JavaWeb中用于处理表单数据的接口?A. HttpServletRequestB. HttpServletResponseC. HttpSessionD. ServletContext答案:A5. 在JavaWeb中,以下哪个不是JSP内置对象?A. requestB. responseC. sessionD. database答案:D6. 以下哪个是用于在JSP页面中包含其他JSP页面的指令?A. <jsp:forward page="other.jsp" />B. <jsp:include page="other.jsp" />C. <%@ include file="other.jsp" %>D. <%@ page import="other.jsp" %>答案:C7. 在JavaWeb中,以下哪个不是JSP动作元素?A. <jsp:useBean>B. <jsp:include>C. <jsp:forward>D. <jsp:include>答案:D8. 下列哪个不是JavaWeb中常用的数据库连接池?A. C3P0B. DBCPC. Apache Commons DBCPD. Tomcat JDBC Connection Pool答案:D9. 在JavaWeb中,以下哪个不是JSTL标签库?A. coreB. fmtC. sqlD. xml答案:C10. 在JavaWeb中,以下哪个不是JSP页面的属性?A. pageEncodingB. contentTypeC. sessionTimeoutD. isErrorPage答案:C二、多项选择题(每题3分,共15分)1. Servlet的生命周期包括以下哪些阶段?A. 初始化B. 请求处理C. 销毁D. 编译答案:ABC2. 在JSP中,以下哪些是脚本元素?A. 表达式B. 脚本片段C. 声明D. 指令答案:ABC3. 在JavaWeb中,以下哪些是用于会话管理的技术?A. CookieB. URL重写C. HttpSessionD. ServletContext答案:ABC4. 在JSP中,以下哪些是JSTL标签库?A. coreB. fmtC. sqlD. taglibs答案:ABC5. 在JavaWeb中,以下哪些是用于异常处理的方法?A. try-catchB. finallyC. do-whileD. throw答案:ABD三、简答题(每题5分,共20分)1. 请简述Servlet的工作原理。

【每日一步】Tomcat7的七大特性新特性与增强功能

【每日一步】Tomcat7的七大特性新特性与增强功能

Tom cat 7的七大特性:新特性与增强功能作者:Avneet Mangat1. 使用随机数令牌(nonce)来阻止跨站请求伪造(CSRF)攻击Webopedia(在线计算机字典)这样定义跨站请求伪造(CSRF):“一种恶意攻击基于web的应用程序。

一次典型的恶意攻击将迫使用户在登录可信任站点的时候执行一些不必要的操作。

”对CSRF更形象的定义是session riding(子乌注:好吧,这个“更形象”的定义我实在看不懂……可参看session riding)。

阻止CSRF的典型做法就是使用随机数令牌,在wikipedia中对它的定义是“一个用于认证协议的随机或伪随机数,以确保老的通信不会在重播攻击中被复用。

”Tom cat 7 有一个servlet过滤器,用于在每次提交请求之后在用户的会话中保存一个随机数令牌。

这个随机数令牌必须添加到后续的每一个请求中做为一个请求参数。

这个servlet过滤器会检测这个请求参数是否与存储于用户会话中的随机数令牌一致。

如果一致,请求就只能是来自指定站点。

如果不同,这个请求会被认为是来自不同的站点并被拒绝。

servlet过滤器非常简单。

这里有一个相关源码(来自Apache Software Foundation CsrfPreventionFilter 文档)的片断:Language: Javapublic class CsrfPreventionFilter extends FilterBase {.........public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {.........String previousNonce = req.getParam eter(Constants.CSRF_NONCE_REQUEST_PARAM);String expectedNonce =(String) req.getSession(true).getAttribute(Constants.CSRF_NONCE_SESSION_ATTR_NAME );if (expectedNonce != null && !expec tedNonce.equals(previousNonce)) {res.sendError(HttpServletResponse.SC_FORBIDDEN);return;}String newNonce = generateNonce();req.getSession(true).setAttribute(Constants.CSRF_NONCE_SESSION_ATTR_NAME, newNonce);.........所以每个URL都必须包含一个从用户会话中获取的随机数令牌。

ORACLE官方培训servlet-3新特性中文版

ORACLE官方培训servlet-3新特性中文版
<在此处插入图片>
JavaEE 6 Servlet 3.0 中的新特性
议题
• 易于开发和部署 • 模块化 web.xml • 动态配置
<在此处插入图片>
• 异步 Servlet
2
Web Profile
• 用于 Web 应用程序的功能全面的中型 profile • web profile 中的各种技术 – Servlet 3.0、JSP 2.1、对其他语言的调试支持、EL 1.2、JSTL 1.2、JSF 2.0 – EJB Lite 3.1、JTA 1.1、JPA 2.0、通用批注 – Bean validation 1.0
Java EE 6
foo.war
foo_ejb.jar
com.sun.FooBean com.sun.FooHelper
5
Servlet — 下一代
• Servlet 3.0 — 易于开发 – 主要关注点
• 增强了 API 以便使用 SE 5 中新的语言特性 – 例如:批注、泛型(Generics) – 在上次 JavaEE 5 中漏掉的 Servlet
13
Multipart 支持
• Servlet 目前原生支持 multipart 数据 – 以前必须借助于第三方库
• 获得 MIME 内容的新方法 – HttpServletRequest.getParts() – Iterable<Part> – HttpServletRequest.getPart(String name) – String
• @WebListener、@WebFilter 的工作方式相同
9
Servlet 3.0 — 示例 3
@WebServlet( urlPatterns=“/hello”, loadOnStartup=1 , initParams={ @InitParam(name=”db”, value=”jdbc:derby...”) , @InitParam(name=”dbuser”, value=”fred”) , @InitParam(name=”dbpasswd”, value=”fred”) } )

servlet工作原理

servlet工作原理

servlet工作原理Servlet是一种Java技术,用于构建基于服务器的Web应用程序。

它的主要工作原理包括以下几个方面:1. Servlet的生命周期:Servlet有三个主要阶段的生命周期,分别是初始化、服务和销毁。

在初始化阶段,Servlet会被加载并初始化一些资源。

在服务阶段,Servlet会根据请求生成相应的输出,并将其发送给客户端。

在销毁阶段,Servlet被卸载并释放相关资源。

2. 客户端请求:当客户端发送一个HTTP请求到服务器时,请求会被服务器接收并解析。

服务器会通过解析请求中的URL找到对应的Servlet 类,并创建一个Servlet实例。

3. 实例化Servlet:服务器根据Servlet类的定义,使用Java反射机制创建Servlet的一个实例。

每个实例都是单线程,因此可以在同一时间处理多个请求。

4. 初始化:在实例化后,服务器会调用Servlet的init(方法来初始化Servlet。

在这个方法中,Servlet可以执行一些初始化操作,如加载配置文件、连接数据库等。

5. 请求处理:当Servlet初始化完成后,服务器会调用Servlet的service(方法来处理客户端请求。

在这个方法中,Servlet可以通过HttpServletRequest对象获取客户端的请求信息,并通过HttpServletResponse对象生成对应的响应。

6. 响应返回:在service(方法中,Servlet将生成的响应信息写入到HttpServletResponse对象中。

服务器将根据响应信息生成一个HTTP 响应并将其发送给客户端。

7. 销毁:当服务器关闭或Web应用程序重新部署时,Servlet将被销毁。

在销毁之前,服务器会调用Servlet的destroy(方法来释放资源和执行一些清理操作。

8. 多线程处理:由于Servlet是单实例多线程的,服务器会为每个请求创建一个新的线程。

兄弟连_马剑威_JavaWeb_076_Web技术概述

兄弟连_马剑威_JavaWeb_076_Web技术概述

第讲技术概述第76讲:WEB技术概述课程大纲•1、什么叫Web•2、Web工作原理•3、URL•4、HTTP协议1、什么叫Web•Internet是一个连接世界上计算机的物理网络。

•Web是建立在Internet上的一种服务(Service)。

•Web 是Internet上多种不同的服务之一,其他还包括E-mail、流媒体、FTP等。

2、Web工作原理•作为一种服务,Web定义两方面:Web客户端(Web浏览器)和Web服务器如何通过Internet通讯。

当你访问一个Web站点时,你就建立了这两者之间的关系。

•首先,Web浏览器向Web服务器发送消息请求一个它期望的指定页面,Web服务器用适当的消息响应它。

适当的消息响应它•这种关系叫“请求/响应模型”(request/response model)。

•客户端,这里是浏览器,请求一个特殊资源,比如一个Web页面,服务器如果有,就响应该请求。

响应该请求3、URL•URL(Uniform Resource Locators):统一资源定位符。

Web 上的每个资源都有唯一的地址,采用的就是URL 格式。

协议:告诉服务器使用什么通信协议(这里是HTTP )端口号:一个服务器应用由一个端口标识,如果URL 中没有指定端口,默认是80.资源:所请求内容的名字,可以是一个HTML 页面、一个Servlet 、一个图像、音乐、视频:80/jianweima/image/5544.jpg服务器:请求物理服务器路径:所请求的资源在服务器唯一的名字,这个名字映射到一个唯一的IP 地址上的路径。

用的是Unix 语法业描述web 服务器的目录层结构4、HTTP协议•概述:•Hypertext Transfer Protocol:超文本传输协议。

它是以TCP/IP为基础的高层协议。

用于定义浏览器与web服务器之间交换数据的过程以及数据格式。

•Web基于请求/响应模型,它通过HTTP超文本协议来实现。

servlet3注解

servlet3注解

servlet3注解一、Servlet3.0介绍Servlet3.0是Java EE6规范的一部分,Servlet3.0提供了注解(annotation),使得不再需要在web.xml文件中进行Servlet的部署描述,简化开发流程。

二、开发Servlet3.0程序的所需要的环境开发Servlet3.0的程序需要一定的环境支持。

MyEclipse10和Tomcat7都提供了对Java EE6规范的支持。

Tomcat需要Tomcat7才支持Java EE6,Tomcat7需要使用JDK1.6以上的版本。

所以开发Servlet3.0的程序需要以下的开发环境支持∙IDE:MyEclipse 10+∙JDK:JDK 1.6+∙tomcat:tomcat 7+如果使用的MyEclipse的版本较低,例如MyEclipse8.5,没有提供Java EE6的支持,可以到Oracle官方网站下载JavaEE6的SDK进行安装,或者从Tomcat7的解压目录下的lib文件夹中的【annotations-api.jar、el-api.jar、jasper.jar、jasper-el.jar、jsp-api.jar、servlet-api.jar】这几个jar文件引用到我们的项目路径下。

(例如:先建一个Java EE5的web 项目,然后把Tomcat7的解压目录下的lib文件夹中的【annotations-api.jar、el-api.jar、jasper.jar、jasper-el.jar、jsp-api.jar、servlet-api.jar】这几个jar文件引入到项目中,再删除Java EE5的库引用,最后从Tomcat7的解压目录下的conf文件夹下把web.xml模板拷贝到项目,替换掉原来的web.xml)。

三、使用MyEclipse8.5+Tomcat7+JDK1.7开发Servlet3.0程序3.1、创建WebProject1、使用MyEclipse8.5新建一个Web Project,选择最高版本的Java EE5.0,如下图所示:创建好的项目如下所示:项目的web.xml文件内容如下:1<?xml version="1.0" encoding="UTF-8"?>2<web-app version="2.5"3xmlns="/xml/ns/javaee"4xmlns:xsi="/2001/XMLSchema-instance"5xsi:schemaLocation="/xml/ns/javaee6/xml/ns/javaee/web-app_2_5.xsd">7<welcome-file-list>8<welcome-file>index.jsp</welcome-file>9</welcome-file-list>10</web-app>注意web.xml文件中的version信息,version="2.5"和/xml/ns/javaee/web-app_2_5.xsd。

java servlet 的请求和响应处理机制

java servlet 的请求和响应处理机制

java servlet 的请求和响应处理机制
Java Servlet 是JavaEE 规范中用于处理Web请求和响应的组件。

它是运行在Web服务器上的Java程序,用于接收来自客户端
的请求并生成响应。

Java Servlet的请求和响应处理机制如下:
1. 客户端发送HTTP请求到Web服务器。

2. Web服务器接收到请求后,根据请求的URL路径找到相应
的Servlet。

3. Web服务器创建一个代表该请求的ServletRequest对象,以
及一个代表该响应的ServletResponse对象,并将这两个对象
传递给Servlet的service()方法。

4. Servlet的service()方法根据请求的类型(GET, POST等)调
用相应的doGet()或doPost()等方法来处理请求。

5. Servlet通过调用ServletRequest对象的方法来获取请求参数、头信息等。

6. Servlet生成要返回给客户端的响应内容,并将其设置到ServletResponse对象中。

7. Servlet调用ServletResponse对象的方法将响应写回给Web
服务器。

8. Web服务器将ServletResponse的内容封装成HTTP响应消息,并将其发送回客户端。

9. 客户端接收到响应后,根据HTTP响应消息的内容进行相应的处理。

Servlet的请求和响应处理机制是基于HTTP协议的,通过
ServletRequest和ServletResponse对象来获取和设置请求和响应的相关信息。

这使得开发人员可以轻松处理Web请求和生成Web响应。

20.Servlet3.0新特性-注解-JSP

20.Servlet3.0新特性-注解-JSP

20.Servlet3.0新特性-注解-JSPservlet3.0新特性之注解在JavaEE6规范中添加了了Servlet3.0 规范,该规范中允许在定义 Servlet、Filter 与 Listener 三⼤组件时使⽤注解,⽽不⽤在web.xml 进⾏注册了。

Servlet3.0 规范允许 Web 项⽬没有 web.xml 配置⽂件。

使⽤servlet3.0时需要jdk6+,tomcat7+servlet注解在3.0规范中使⽤@WebServlet()注解注册⼀个servlet,该注解中有多个属性,常⽤属性如下:属性名类型说明urlPatterns String[]相当于url-pattern的值value String[]与 urlPatterns 意义相同,不能与 urlPatterns 属性同时使⽤name String相当于servlet-name的值loadOnStartup int相当于loadOnStartup,默认值为-1initParams WebInitParam[]相当于init-param标签。

其类型为另⼀个注解 WebInitParam 数组例:之前都是讲解2.5版本的现在我们版本选择3.0,Eclipse 也可以打上勾勾让其允许创建web.xml :简单版:package Servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet("/servlet3") //允许这样相当于只设置了urlPatternspublic class servlet3 extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}}允许这样相当于只设置了urlPatterns,如果这样的话,那么如果有 getServletName 默认返回类名【全路径】 -可以⾃⼰试试例2:package Servlet;import java.io.IOException;import java.util.Enumeration;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.annotation.WebInitParam;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;//value 和 urlPatterns 意义相同,但不能⼀起使⽤⼆选⼀咯!我们学过了 url是可以多个的。

Servlet工作原理

Servlet工作原理

Servlet工作原理Servlet是Java编写的服务器端程序,用于处理客户端的请求并生成响应。

它是Java Servlet API的一部份,通过在Java虚拟机中运行,可以实现动态网页的生成和处理。

本文将详细介绍Servlet的工作原理。

一、Servlet容器Servlet容器是一个运行Servlet的环境,负责接收客户端请求、调用相应的Servlet进行处理,并将生成的响应返回给客户端。

常见的Servlet容器有Tomcat、Jetty等。

二、Servlet生命周期Servlet的生命周期包括初始化、服务和销毁三个阶段。

1. 初始化阶段在Servlet容器启动时,会根据web.xml配置文件或者注解来加载和初始化Servlet。

容器会创建一个Servlet实例,并调用其init()方法进行初始化操作。

在init()方法中,可以进行一些必要的资源加载和初始化设置。

2. 服务阶段一旦Servlet初始化完成,它就可以接收客户端的请求并生成响应。

每一个请求都会创建一个新的线程,Servlet容器会调用Servlet的service()方法来处理请求。

在service()方法中,可以通过HttpServletRequest对象获取请求参数、请求头等信息,并通过HttpServletResponse对象生成响应内容。

3. 销毁阶段当Servlet容器关闭时,或者在web应用程序重新加载或者卸载时,会调用Servlet的destroy()方法进行资源释放和清理操作。

在destroy()方法中,可以释放打开的数据库连接、关闭文件流等。

三、Servlet请求处理过程当客户端发送一个HTTP请求到Servlet容器时,Servlet容器会按照以下步骤进行请求处理:1. 客户端发送HTTP请求到Servlet容器。

2. Servlet容器接收到请求后,根据请求的URL路径找到对应的Servlet。

3. Servlet容器创建一个HttpServletRequest对象,封装请求的相关信息,如请求方法、请求头、请求参数等。

web servlet工作原理

web servlet工作原理

web servlet工作原理Web Servlet是一种用于开发Web应用程序的Java技术。

它是基于服务器端的Java组件,用于处理客户端的HTTP请求并生成响应。

本文将介绍Web Servlet的工作原理,从请求处理到响应生成的整个过程。

Web Servlet工作的基本原理是通过Servlet容器来实现的。

Servlet容器是Web服务器或应用服务器中的一部分,负责管理和执行Servlet的生命周期。

当客户端发送一个HTTP请求到服务器时,Servlet容器会根据请求的URL找到对应的Servlet,并将请求转发给它。

Servlet容器首先会创建一个ServletRequest对象和一个ServletResponse对象。

ServletRequest对象封装了客户端的请求信息,包括请求的方法、URL、参数、头部等。

ServletResponse 对象用于生成响应,包括设置响应的状态码、头部、内容等。

接下来,Servlet容器将ServletRequest和ServletResponse对象作为参数,调用Servlet的service()方法。

在service()方法中,开发人员可以编写自己的业务逻辑来处理请求和生成响应。

Servlet可以读取ServletRequest对象中的请求参数,执行相应的操作,然后将结果写入ServletResponse对象中。

在service()方法执行完成后,Servlet容器将ServletResponse对象中的内容发送回客户端,完成整个请求-响应过程。

客户端收到响应后,根据响应的内容进行相应的处理。

除了service()方法,Servlet还可以重写其他方法来处理特定的HTTP请求。

例如,doGet()方法用于处理GET请求,doPost()方法用于处理POST请求。

通过重写这些方法,开发人员可以更加灵活地处理不同类型的请求。

在Servlet的生命周期中,还有一些其他的方法可以被重写。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第97讲:Servlet3.0新特性
课程大纲
•1、Annotation进行配置
•2、模块化编程
•3、Servlet异步处理
•4、异步Listener
•5、文件上传API简化
1、Annotation进行配置
•tomcat 7.0.X 支持Servlet 3.0
•Servlet、Filter、Listener无需在web.xml中进行配置,可以通过Annotation进行配置
• 1.Servlet
•只需要在java源文件的Servlet类前面加上:
•@WebServlet(name="",urlPatterns={""},initParams={@WebInitParam(name="",value =""),loadOnStartup=1})
•public class MyServlet extends HttpServlet{}
1、Annotation进行配置
•Servlet 3.0 web.xml
•<?xml version="1.0" encoding="UTF-8"?>
•<web-app version="3.0" xmlns="/xml/ns/javaee"•xmlns:xsi="/2001/XMLSchema-instance"
•xsi:schemaLocation="/xml/ns/javaee
/xml/ns/javaee/web-app_3_0.xsd">
•</web-app>
1、Annotation进行配置•Servlet、Filter、Listener无需在web.xml中进行配置,可以通过Annotation进行配置
• 2.Filter
•只需要在java源文件的Filter类前面加上
•@WebFilter(filterName="",urlPattern={"/"});
1、Annotation进行配置•Servlet、Filter、Listener无需在web.xml中进行配置,可以通过Annotation进行配置
• 3.Listener
•现在只需要在java源文件的Listener类前面加上
•@WebListener即可;
2、模块化编程
•原本一个web应用的任何配置都需要在web.xml中进行,因此会使得web.xml变得很混乱,而且灵活性差,因此Servlet 3.0可以将每个Servlet、Filter、Listener打成jar包,然后放在WEB-INF\lib中;注意各自的模块都有各自的配置文件,这个配置文件的名称为web-fragment.xml ;
web-fragment xml;

•制作一个Servlet模块的步骤:
• 1.编写Servlet,并编译;
1并编译;
• 2.将此编译class文件及所在包通过jar包命令打成jar包;
• 3.将此jar包解压打开,将META-INF中的
•manifest删除并添加web-fragment.xml;
web fragment xml
• 4.将此jar包放入WEB-INF\lib中即可;

2、模块化编程
•web-fragment.xml注意点:
• 1.根元素为<web-fragment>;
• 2.<name></name>表示模块名称;
• 3.<ordering></ordering>是此模块的加载顺序;
• 4.<before><others/></before>表示第一个加载;
• 5.<after><name>A</name></after>表示比A后面加载;
• 6.可以在里面部署listener、filter、servlet
2、模块化编程
•web-fragment.xml 头声明:
•<?xml version="1.0" encoding="UTF-8"?>
•<web-fragment xmlns="/xml/ns/javaee"•xmlns:xsi="/2001/XMLSchema-instance"•xsi:schemaLocation="/xml/ns/javaee •/xml/ns/javaee/web-fragment_3_0.xsd"•version="3.0">
•</web-fragment>
3、Servlet异步处理
•Servlet在MVC中作为控制器,控制器负责分发任务给MODEL完成,然后把结果交给JSP显示;
•而如果有许多MODEL,其中有一个MODEL处理时间很长,则会导致整个页面的显示很慢;
很慢
•异步处理关键点:将复杂业务处理另外开一个线程,而Servlet将执行好的业务先送往jsp输出,等到耗时业务做完后再送往JSP页面;
句话:先显示部分,再显示部分;
•一句话:先显示一部分再显示一部分;
•异步处理Servlet的注意点是:
• 1.需要在Annotation中注明asyncSupported=true;
4、异步Listener
•异步监听器用来监听异步处理事件;即“三”中讲到的知识点;•此监听器类似于ServletContextListener的机制;
•只需要实现AsyncListener接口即可;
•此接口有4个方法:
public void onStartAsync(AsyncEvent event)throws IOException;•public void onComplete(AsyncEvent event);
•public void onTimeout(AsyncEvent event);
•public void onError(AsyncEvent event);
5、文件上传API简化
•原本文件上传时通过common-fileupload或者SmartUpload,上传比较麻烦,在Servlet
3.0 中不需要导入任何第三方jar包,并且提供了很方便进行文件上传的功能;

•注意点:
注意点
• 1.html中<input type="file">表示文件上传控件;
• 2. form的enctype="multipart/form-data";
• 3.在Servlet类前加上@MultipartConfig

• 4.request.getPart()获得;
THANK
YOU!
微信号:weige-java
扫一扫,关注威哥微信公众平台。

相关文档
最新文档