servlet笔记(必看完整版).doc

上传人:小飞机 文档编号:4197351 上传时间:2023-04-09 格式:DOC 页数:69 大小:2.86MB
返回 下载 相关 举报
servlet笔记(必看完整版).doc_第1页
第1页 / 共69页
servlet笔记(必看完整版).doc_第2页
第2页 / 共69页
servlet笔记(必看完整版).doc_第3页
第3页 / 共69页
servlet笔记(必看完整版).doc_第4页
第4页 / 共69页
servlet笔记(必看完整版).doc_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《servlet笔记(必看完整版).doc》由会员分享,可在线阅读,更多相关《servlet笔记(必看完整版).doc(69页珍藏版)》请在三一办公上搜索。

1、u 背景知识介绍J2EE的13种技术java-servlet-jsp 技术总是有一个演变过程zip粘贴到word设置u 回顾一下我们现有的技术java 基础(面向对象,集合,界面,线程,文件,网络)jdbc (java 的数据库编程)oracle / mysql / sqlserverhtml css javascript (web 开发) -网页设计xml serlvet+jsp -java web开发使用java技术做 web开发u java ee 体系的介绍u servlet项目演示u web 开发介绍 静态页面 (html) 动态页面1. 用户可以输入数据,和页面交互(注册,购物,发帖

2、子,付款.)2. 不同时间打开页面,内容是变化.3. 目前比较流行的左动态页面的技术 ( servlet/jsp , php , , asp, cgi )u 动态网页技术的比较(了解)u bs 和 cs的比较(1)BS:browser server 浏览器服务器(2)cs client server 客户服务u 为什么需要的web服务器/web究竟是干什么的模拟一个web服务器 import .*;import .*;public class MyWebServerpublic static void main(String args) throws ExceptionServerSocket

3、 ss=new ServerSocket(80);Socket s=();.);OutputStream os=();BufferedReader br=new BufferedReader(new FileReader(d:);String buf=;while(buf=()!=null)();到 conf/ 文件中修改的端口号)protocol= redirectPort=8443/(3) 能够正常启动,但是会导航到另外一个页面.去修改工具-管理加载项,把默认的导航给禁用即可.(4) 在访问 tomcat时候,一定保证 tomcat 服务器是启动u tomcat的目录结构文件bin: 启动

4、和关闭tomcat的bat文件conf: 配置文件 - : 该文件用于配置和 server 相关的信息, 比如 tomcat启动端口后,配置Host, 配置Context 即web应用 - : 该文件配置与 web应用(web应用就相当于是一个 web站点)-: 该文件用户配置tomcat 的用户密码 和 权限lib 目录: 该目录放置运行tomcat 运行需要的jar包logs 目录:存放日志, 当我们需要去查看日志的时候,很有用!,当我们启动tomcat错误时候,可以查询信息.webapps 目录: 该目录下,放置我们的web应用(web 站点), 比如:建立 web1 目录 下面放置我们

5、的html 文件 jsp 文件.图片. 则 web1就被当做一个web应用管理起来( 特别说明tomcat 以后支持 tomcat 5 版本 还有别的设置) work: 工作目录: 该目录用于存放jsp被访问后 生成的对应的 server文件 和.class文件u 如何去访问一个 web 应用的某个文件u 首页面设置及目录规范结构现在我们要求:把文件设置成 该 web应用的首页,则需要把web应用的目录格式做的更加规范:在web文件夹下配置WEB-INF文件夹在 文件中添加配置的代码: 通过 classes目录将来是存放 class文件lib 目录将来时存放 jar文件 配置当前这个web应用

6、的信息.u tomcat如何去管理虚拟目录需求: 当我们把 web 应用放到 webapps目录,tomcat会自动管理,如果我们希望tomcat可以管理其它目录下的web应用-虚拟目录配置我在d 盘有一个web应用.u 虚拟目录配置步骤: 找到文件 编辑host节点 添加Context path在中添加:myweb2:是访问时输入的web名,实际取出的是web2中的资源d:web2:绝对路径下web2中存放资源如:实际访问时输入的地址: 需要重启tomcat,才能生效.(因为是采用的dom技术讲信息加载到内存中)u context 的几个属性的说明path:docbase:reloadabl

7、e ;如果设为ture ,表示 tomcat 会自动更新 web应用,这个开销大,建议在开发过程中,可以设为true, 但是一旦真的发布了,则应当设为false;upackWAR: 如果设为 ture ,则自动解压,否则不自动解压.:打war包 cd:d/web2 然后jar cvf *:浏览打好的war包 Deploy发布后会在webapps中自动生存改文件u 配置域名我们看和一个如何配置自己的主机名:我们在实际访问网站的过程中,不可能使用 的方式去访问网站,实际上使用类似 或者 的方式去访问网站,这个又是怎么实现的呢看看ie浏览器访问一个web站点的流程.实现的步骤如下:(1) 在C:WI

8、NDOWSsystem32driversetc 下的host文件 添加 在tomcat 的文件添加主机名 (3) 在d:web3 加入了一个 /WEB-INF/ 把 设为首页面如果连端口都不希望带,则可以吧tomcat的启动端口设为80即可.(4) 重启生效u tomcat体系的再说明 图:如何配置默认主机:在tomcat/conf/ 文件u 为什么需要servlet技术比如需求:我们希望用户可以贴,用户还可以回复 .这样一些和用户可以交互的功能,用普通的java技术就完成不了, sun 就开发了 servlet技术供程序员使用.u servlet的介绍 servlet 其实就是java程序(

9、java类) 该 java 程序(java 类)要遵循servlet开发规范 serlvet是运行在服务端 serlvet 功能强大,几乎可以完成网站的所有功能 是学习jsp基础u tomcat 和 servlet 在网络中的位置u servlet的生命周期是怎样的/servlet究竟是怎样工作的UML 时序图帮助大家理解参看execel 面试题: 请简述servlet的生命周期(工作流程)答:标准版本:WEB服务器首先会检查是否已经装载并创建了该servlet实例对象。如果是直接进行第步,否则执行第步。装载并创建该Servlet的一个实例对象。调用Servlet实例对象的init()方法。创

10、建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用service()方法并将请求和响应作为参数传递进去。WEB应用被停止或重启之前,Servlet引擎将卸载Servlet,在卸载之前调用Servlet的destroy()方法1. 当serlvet 第一次被调用的时候,会触发init函数,该函数会把servlet实例装载到内存.init函数只会被调用一次2. 然后去调用servlet 的 service 函数3. 当第二次后访问该servlet 就直接调用 service 函数.4. 当 web

11、应用 reload 或者 关闭 tomcat 或者 关机 都会去调用destroy函数,该函数就会去销毁serlvet5. Servlet的生命周期当客户端第一次向web服务器发出一个servlet请求时,web服务器将会创建一个该servlet的实例,并且调用servlet的init()方法;如果当服务器已经存在了一个servlet实例,那么,将直接使用此实例;然后再调用service()方法,service()方法将根据客户端的请求方式来决定调用对应的doXXX()方法;当 web应用 reload 或者 关闭 tomcat 或者 关机,web服务器将调用destroy()方法,将该ser

12、vlet从服务器内存中删除。生命全过程:1.加载2.实例化 3.初始化 4.处理请求 5.退出服务u 开发servlet有三种方法 (1) 实现 Servlet接口(2) 通过继承 GenericServlet(3) 通过继承 HttpServletu 实现servlet接口的方式需求如下: 请使用实现 接口的方式,来开发一个Servlet ,要求该Servlet 可以显示Hello,world,同时显示当前时间.步骤1. 在webapps下建立一个web应用 hspWeb12. 在hspWeb1 下建立 WEB-INF- 可以从 ROOT/WEB-INF/拷贝 3. 在WEB-INF 下建立

13、 classes 目录(我们的Servlet 就要在该目录开发.),建立 lib文件夹4. 开发package ;import .*;import 为了能将包引入,需要配置环境变量变量值; E:tomcatapache-tomcat-6.0.20lib 记得带上文件名import .*;class MyFirstServlet implements Servlet See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF lic

14、enses this file to You under the Apache License, Version (the License); you may not use this file except in compliance with the License. You may obtain a copy of the License at Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an AS I

15、S BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.- MyFirstServlet 注意:后面不要带.java MyFirstServlet /ABC (1) 服务器调用流程: 名字不一样 (启动tomcat错误)(2) 写成 ,会报告500(3) 资源名自己写错 错误补充: 如果使用ja

16、vac 去编译一个java文件,则需要带命令参数javac d . java文件补充: 如何不重启tomcat,就指定去 reload 一个web应用,方法:进入到 tomcat 的 manager:点击reload即可.课堂练习自己使用 实现Servlet接口的方法,开发一个Servlet,该servlet 可以输出自己的名字在显示当前日期.u 使用GenericServlet开发servlet了解即可:案例 :package ;import .*;import .*;public class MyGenericServlet extends GenericServletpublic voi

17、d service(ServletRequest req, ServletResponse res) throws ServletException, ().println(hello,world,i am geneirc servlet);将该Servlet部署到文件中: MyGenericServlet MyGenericServlet /MyGenericServletu 使用继承 HttpServlet 的方法来开发Serlvet(1) 在软件公司 90%都是通过该方法开发.(2) 举例说明; 还是显示 hello,world 当前日期代码:package ;import .*;imp

18、ort .*;public class MyHttpServlet extends HttpServletrintln(i am httpServet doGet();protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, ().println(i am httpServet doPost() post name=+(username);还有一个u:u 小结 get 提交 和 post的提交的区别 从安全看 getpost 因为get 会把提交的信息显示到地

19、址栏 从提交内容看 getpost Get可以保留uri中的参数,利于收藏u 使用ide来开发servlet使用ide (eclipsejava se+myeclipse插件 可以支持jsp/servlet/struts/hibernate/spring.)开发servlet需求:使用 ide 开发一个servlet ,该servlet 显示 hello,world, 和当前日期u 开发步骤:(1) 建立web工程(2) 在Src 目录下创建了一个包 开发一个ServletMySerlvet 的代码:public void doGet(HttpServletRequest request, H

20、ttpServletResponse response)throws ServletException, IOException (text/html);PrintWriter out = ();(hello +new );public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException (request, response);(3) 配置tomcat点击add 选择要发布到那个服务器即可:(4) 启动tomcat1. 使用我们的老方法

21、2. 从eclipse 启动 tomcat(5) 在使用eclipse 开发servlet 可能会出现一个很麻烦事情,版本不一致错误. Bad version number in .class file (unable to load class 原因是因为 tomcat 使用jdk 和 servlet 使用的 jdk不一样,解决方法就是统一即可.请大家使用eclipse 并配置继承 HttpServlet 开发一个servlet, 显示hello, 和当前日期.u Servlet的细节问题 一个已经注册的Servlet可以被多次映射即: This is the description of

22、my J2EE component This is the display name of my J2EE component MyServlet1 MyServlet1 /MyServlet1 MyServlet1 /hsp 当映射一个servlet时候,可以多层 比如 /servlet/ ok从这里还可以看出,后缀名是 html 不一定就是 html,可能是假象. 使用通配符在servlet映射到URL中有两种格式:第一种格式 *.扩展名 比如 *.do *.ss第二种格式 以 / 开头 同时以 /* 结尾 比如 /* /news/* 通配符练习题:l Servlet1 映射到 /abc/

23、* l Servlet2 映射到 /* l Servlet3 映射到 /abc l Servlet4 映射到 *.do 问题(面试题):l 当请求URL为“/abc/”,“/abc/*”和“/*”都匹配,哪个servlet响应Servlet引擎将调用Servlet1。l 当请求URL为“/abc”时,“/abc/*”和“/abc”都匹配,哪个servlet响应Servlet引擎将调用Servlet3。l 当请求URL为“/abc/”时,“/abc/*”和“*.do”都匹配,哪个servlet响应Servlet引擎将调用Servlet1。l 当请求URL为“/”时,“/*”和“*.do”都匹配,

24、哪个servlet响应Servlet引擎将调用Servlet2。l 当请求URL为“/xxx/yyy/”时,“/*”和“*.do”都匹配,哪个servlet响应Servlet引擎将调用Servlet2。在匹配的时候,要参考的标准:(1) 看谁的匹配度高,谁就被选择(2) *.do 的优先级最低 Servlet单例问题当Servlet被第一次访问后,就被加载到内存,以后该实例对各个请求服务.即在使用中是单例.因为 Servlet是单例,因此会出现线程安全问题: 比如:售票系统. 如果不加同步机制,则会出现问题:这里我给大家一个原则:(1) 如果一个变量需要多个用户共享,则应当在访问该变量的时候,

25、加同步机制synchronized (对象)样不会存在线程安全问题 servlet 中的 配置需求: 当我们的网站启动的时候,可能会要求初始化一些数据,(比如创建临时表), 在比如:我们的网站有一些要求定时完成的任务 定时写日志,定时备份数据. 定时发送邮件.解决方法: 可以通过 配合 线程知识搞定.先说明: 通过配置 我们可以指定某个Servlet 自动创建.我们来模拟一个定时发送电子邮件的功能:实现思路:sendEmailTableidcontent sendtime1“hello”2011-11-11 20:112“hello2”2012-11-11 10:00看看如何线程去完成任务:这

26、里的代码请参考项目:package class SendEmailThread extends ThreadOverridepublic void run() int i=0;try while(true);案例: ServletConfigTest encoding utf-8 如何使用String encoding=().getInitParameter(encoding);补充说明:这种配置参数的方式,只能被某个Servlet独立使用.如希望让所有的Servlet都去读取某个参数,这样配置: !- -u 如果要把所有的参数都读取,则使用 如下方法 :Enumeration names=(

27、).getInitParameterNames();while()String name=();补充,如何去修改Servlet的配置模板.u 编写项目1. 先完成用户登录2. 添加在主界面,添加一个超链接,可以返回登录界面重写登录u http协议的再介绍 http协议是建立在tcp/ip协议基础上 http协议全称 超文本传输协议 http协议 , 版本 ,目前通用的是版本 称为短连接 称为长连接.所谓长,和短指的是 持续时间的 长连接 30s ,短连接是发送完数据就断掉. u http的请求部分:基本结构:GET /test/ HTTP/ 请求行Accept: */* 消息名 消息名:内容R

28、eferer: Accept-Language: zh-cnUser-Agent: Mozilla/ Accept-Encoding: gzip, deflate Host: Keep-Alive 消息头格式 (消息名: 内容 )特别说明: 并不是每一次请求的消息头都一样.空行发送的内容 格式 : 内容名字=内容体u 请求方式请求行中的GET称之为请求方式,请求方式有:POST,GET,HEAD,OPTIONS,DELETE,TRACE,PUT常用的有:POST,GETu get和post参看ppt,和以前的笔记GET News/ u http请求消息头1) Accept: text/html

29、,image/* 告诉服务器,我可以接受 文本,网页,图片2. Accept-Charset: ISO-8859-1 接受字符编码 iso-8859-13. Accept-Encoding: gzip,compress 可以接受 gzip,compress压缩后数据.4. Accept-Language: en-us,zh-cn 浏览器支持中,英文5. Host: 我要找主机是 Tue, 11 Jul 2000 18:23:51 GMT 告诉服务器,我的缓冲中有这个资源文件,该文件的时间是 。6. Referer: 告诉服务器,我来自哪里,该消息头,常用于防止盗链7. User-Agent:

30、Mozilla/ (compatible; MSIE ; Windows NT 告诉服务器,浏览器内核8. Cookie cookie9. Connection: close/Keep-Alive 保持连接,发完数据后,我不关闭连接10. Date: Tue, 11 Jul 2000 18:23:51 GMT 浏览器发送该http请求的时间关于Referer的实际案例:u http的响应基本结构:状态行:格式:HTTP版本号 状态码 原因叙述举例:HTTP/ 200 OK状态码含义100-199表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程200-299表示成功接收请求并完

31、成整个处理过程,常用200300-399为完成请求,客户需要进行一步细化请求。例如:请求的资源已经移动一个新的地址,常用302,307400-499客户端的请求有错误 404500-599服务器端出现错误,常用500u http响应的状态行举例说明200 就是整个请求和响应过程没有发生错误,这个最常见.302: 表示当你请求一个资源的时候,服务器返回302 表示,让浏览器转向到另外一个资源,比如: (“/web应用/资源名”)案例:(302);(Location, /servletPro/Servlet2);5Lb明一下web 站点下载文件的原理取到要下载文件的全路径String path=(

32、).getRealPath(/images/);图标/(Cache-Control, no-cache);【针对火狐浏览器等】(Pragma, no-cache);【其他浏览器】(1) 有些网站要求网页缓存一定时间,比如缓存一个小时(Expires, ()+3600*1000*24);后面一个参数表示设置的缓存保持时间,-1表示永远缓存练习:加入防止盗链下载.u HttpServletResponse的再说明getWriter()getOutputStream();区别1. getWriter() 用于向客户机回送字符数据2. getOutputStream() 返回的对象,可以回送字符数据,

33、也可以回送字节数据(二进制数据)OutputStream os=();(hello,world.getBytes();如何选择:如果我们是回送字符数据,则使用 PrintWriter对象 ,效率高如果我们是回送字节数据(binary date) ,则只能使用 OutputStream 这两个流不能同时使用.比如:OutputStream os=();(hello,world.getBytes();PrintWriter out=();(abc);就会报错: getOutputStream() has already been called for this response不能同时使用prin

34、tWriter和outputstream的原因Web服务器会自动检查并关闭流从该图,我们也可以看出. 为什么我们没有主动关闭流,程序也没有问题的原因.当然:你主动关闭流,更好.u 参数的传递方式sendRedirect()和session()需求: 当用户登录成功后,把该用户名字显示在登录成功页面;使用sendRedirect()来传递字符参数解决思路:1. 使用java基础 static2. 使用sendRedirect()代码:(/UsersManager/MainFrameuname=+username+&pwd=+password);3. 使用session 传递后面讲这里,我们先预热

35、.说明:基本格式:(“servlet的地址参数名=参数值&参数名=参数值.”); 参照值是String , 参数名应当使用 字母组合在接受数据的Servlet中:String 参数=(“参数名”);使用session()来传递字符参数和对象A.传递字符串放入session loginUser,username); 取出session 在JSP中通过session取出 loginUser);B传递对象User user= new User();(“xiaoli”);(“123”);放入session userObj,userObj); 取出session User user=(User)上机练习:1. 实际运用到项目: 在wel页面中显示登录用户的姓名,就可以使用该方法.让我们动手一起来做做吧!2. 请写一篇关于HTTP协议的笔记,要求: 描述清楚HTTP请求头、响应头的格式 请求头

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号