




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2015年01月31日 星期五 09时00分10秒 day011.什么是servlet sun公司制定的一种用来扩展web服务器功能的组件规范 (1)扩展web服务器功能 早期的web服务器(apache,iis等)只能处理静态资源的请求(即需要事先将html文件写好),不能 处理动态资源的请求(即需要计算生成动态页面) cgi程序可以扩展web服务器的功能。 注: cgi(common geteway interface 通用网关接口),可以使用c,perl等语言来开发符合cgi标准 的程序,web服务器收到请求之后,如果需要计算,可以调用cgi程序来处理 cgi程序编写复杂,不可移植,性能
2、也不是很好。 servlet可以扩展web服务器功能,即web服务器可以调用servlet来进行计算。 (2)组件规范 1)什么是组件 符合一定规范,实现部分功能,并且需要部署到容器当中才能运行的软件模块。 servlet是一个组件,需要部署到servlet容器中才能运行。 2)什么是servlet容器 容器是符合一定规范提供组件运行环境的程序。2.如何开发一个servlet? step1:写一个java类,实现Servlet接口(或者继承HttpServlet抽象类) step2:编译 step3:打包 建立一个具有如下结构的文件夹: appname-工程名 WEB-INF classes(
3、放.class文件) lib(可选,放.jar文件) web.xml(部署描述文件) step4:部署 将step3创建好的文件夹拷贝到servlet容器里就可以了 注: 也可以使用jar命令将step3创建好的文件夹压缩成.war为后缀的文件。 step5:运行 启动容器,访问servlet http:/ip:port/appname/url-pattern3.安装tomcat(下载) tomcat是一个开源的servlet容器,同时,也是一个简单的web容器 step1:解压tomcat /opt/apache-tomcat7.tar.gz-解压到/home/s
4、oft01 step2:配置环境变量 JAVA_HOME:jdk安装路径,比如/opt/jdk CATALINA_HOME:tomcat安装路径,比如/home/soft01/tomcat7 PATH:/home/soft01/tomcat7/bin step3:启动tomcat 打开终端:cd /home/soft01/./bin sh startup.sh(如果是windows startup.bat) 打开浏览器,输入http:/localhost:8080 step4:关闭tomcat cd /home/soft01/tomcat7/bin sh shutdown.sh 4.使用ecl
5、ipse开发一个servlet5.servlet是如何运行的? 比如,在浏览器地址栏输入 http:/ip:port/web01/hello step1:浏览器依据ip,port建立连接。 step2:浏览器将相关数据(比如,请求参数)打包并发送给servlet容器。 step3:容器解析请求数据包(拆包),将解析到的结果保存到request对象上,同时,还会创建一个request对象。 step4:容器创建servlet对象,然后调用该对象的service方法(会将request,response作为参数传递过来)。 注: 在service方法里面可以通过request对象获得请求参数值,也
6、可以将处理结果写到request对象上。 step5:容器获得response对象上存放的处理结果,然后打包发送给浏览器。 step6:浏览器解析响应数据包,然后生成相应的页面。6.常见错误及解决方式 (1)404 注:404是一个状态码(是一个三位数字,表示服务器处理请求的一种状态) 1)含义:服务器依据请求地址找不到对应的资源 2)错误原因: a:应用没有部署 b:请求地址写错 http:/ip:port/appname/url-pattern c:不一致 (2)500 1)含义:系统错误 2)错误原因: a:程序运行出错 b:没有严格按照规范来写servlet类,比如,没有继承HttpS
7、ervlet,类名写错 (3)405 1)含义:找不到方法 2)错误原因: service方法没有严格按照规定来写练习:写一个DataServlet,输出当前的系统时间 http:/ip:port/web01_home/date-2015年02月02日 星期一 09时00分10秒 day021.http协议 (1)什么是http协议 由w3c制定的一种网络应用层协议,规定了浏览器与web服务器之间如何通信以及相应的数据包的结构 1)如何通信 a. 建立连接 b.打包发送请求 c.打包发送响应 d.关闭连接 如果浏览器要再发送请求,需要重新建立新的连接即“一次请求,一次连接” 2)优点 web服
8、务器可以利用有限的连接数为尽可能多的请求服务 3)缺点 (2)两种请求数据包的结构 1)请求数据包: a,请求行: 请求方式 请求资源路径 协议类型和版本 b,消息头 是一些键值对(使用“:”隔开),表示特定的含义 c,实体内容 只有当请求方式为post时,才会有数据(请求参数) 如果请求方式为get,请求参数会添加到请求资源路径的后面 2)响应数据包 a,状态行:协议类型和版本 状态码 状态描述 状态码是一个三位数字,表示服务器处理请求的一种状态 比如:200:正确 500:系统错误 404:找不到资源 b,消息头 服务器也可以发送一些消息头给浏览器,比如“content-type”,告诉浏
9、览器,服务器返回的数据类型。 c,实体内容 程序处理的结果,浏览器会解析其中的数据,生成相应的页面 (3)两种请求方式 1)get请求 a,哪些情况,浏览器会发送get请求 直接输入某个地址 点击连接 表单默认提交 b,get请求的特点 将请求参数添加到请求资源路径的后面,只能提交少量的数据(请求行只能存放大约2k左右的数据) 将请求参数显示在地址栏,不安全(比如路由器会记录请求地址)。 2)post请求 a,哪一写情况,浏览器会发送post请求 将表单的method属性设置为“post” b,post请求特点 会将请求参数添加到实体内容里面,可以提交大量的数据 不会将请求添加到浏览器的地址栏
10、,相对安全 注: 不管是那种请求方式,都不会对请求参数加密,如果有敏感数据,一定要加密处理。 2.servlet如何使用中文 (1)为什么会有乱码 out.println语句,默认使用iso-8859-1编码 (2)解决方式 response.setContentType(text/html;charset=utf-8);3.如何处理表单中的中文参数值? (1)为什么会有乱码 表单提交时,浏览器会对中文参数使用打开该表单所在的页面时的字符集来编码 服务器端默认会使用iso8859-1来解码 (2)如何解决 step1:保证表单所在的页面按照指定的字符集打开 step2:服务器端按照指定的字符集
11、来解码 方式一:request.setCharacterEncoding(utf-8)-只针对post请求有效 方式二:uname=new String(uname.getBytes(iso-8859-1),utf-8);-针对get和post请求都有效4.如何获得请求参数值 (1)String request.getParamater(String paraname); 注: a,该方法有可能返回null 请求参数名与实际发送过来的参数名不一致 b,有可能返回空字符串。 (2)String request.getParameterValues(String paramName); 注: a,
12、当有多个参数名相同时,用该方法 b,对于多选框,如果一个选项都不选择,会获得null5.servlet使用jdbc访问数据库 step1:将jdbc驱动(.jar文件)拷贝到WEB-INFlib下 step2:使用jdbc提供的API来访问数据库mysql:开源,免费,性能强大 (1)登录mysql 打开终端,输入 mysql-uroot (2)查看当前有哪些数据库 show databases (3)创建一个新的数据库(同时设置缺省的字符集) create database jsd1411 default character set utf8; 注: a,如果刚开始编码集设置错误可以用alt
13、er database jsd1411 character set utf8;修改 b,如果终端有乱码,可以用set names utf8设置 c,显示数据库的编码集show create database jsd1411; d,删除数据库用drop database jsd1411; (4)使用指定的数据库 use jsd1411 (5)查看当前数据库有哪些表 show tables (6)建表 create table li_emp( id int primary key auto_increment, uname varchar(50), salary double, age int )
14、; insert into li_emp(name,salary,age)values(King,20000,25); 注: auto_increment,自增长列,在插入记录时,数据库会自动为该列赋一个自增长的值-2015年02月03日 星期二 09时00分10秒 day031.将中文插入到数据库需要注意的问题 (1)数据库要设置好字符集 create database jsd1411 default character set utf8; (2)jdbc驱动要能够进行正确的编码和解码 注: 有一些jdbc驱动默认会使用“iso-8859-1”来编码和解码,特别是mysql的驱动 对于jdb
15、c驱动,可以添加如下两个参数 jdbc:mysql:/localhost:3306/jsd1411? useUnicode=true&characterEncoding=utf8;2.重定向 (1)什么是重定向 服务器通知浏览器向一个新的地址发请求,通常,服务器可以发送一个 302状态码和一个Location消息头(包含了一个地址,称之为重定向地址), 浏览器收到之后,会立即向重定向地址发请求 (2)如何重定向 response.sendRedirect(String url); 注:a,url就是重定向地址 b,重定向之前,容器会先清空response上缓存的内容 (3)特点 a,重定向地址
16、是任意的 b,重定向后,浏览器地址栏的地址会有变化-2015年02月04日 星期三 08时56分22秒 day041.servlet的生命周期 (1)什么是生命周期? 容器创建servlet对象,然后为该对象分配资源,调用该对象的方法处理请求,以及销毁该对象的整个过程。 (2)生命周期分为哪几个阶段? 1)实例化(创建servlet对象) a,什么时候实例化? 情形1:收到请求之后才会创建 情形2:启动容器之后就创建 b,容器在默认情况下,对于某个类型的servlet只会创建一个实例。 需要配置 1 注: 参数值是一个大于等于0的整数,越小,优先级越高(容器会先创建)。 2)初始化(分配资源)
17、 a,什么是初始化? 容器调用servlet对象的init方法 b,GenericServlet的init方法做了些什么? 将容器传递过来的ServletConfig对象保存下来,并且提供了一个getServletConfig方法来获得该对象 c,如何实现自己的初始化处理逻辑? override GenericServlet的init()方法 d,初始化参数 company 阿里巴巴 ServletConfig提供了getInitParameter方法来访问初始化参数 e,init方法只会执行一次 3)就绪(处理请求) a,什么是就绪? 容器收到请求之后,会调用servlet的service方
18、法来处理请求 b,HttpServlet的service方法是如何实现的? 依据请求方式(get/post)调用对应的doGet或者doPost方法。 如果要实现自己的处理逻辑,有两个选择: 选择1: override doGet/doPost方法 选择2: override HttpServlet的service方法 4)销毁 a,什么是销毁? 容器在删除servlet对象之前,会调用该对象的destory方法。 b,destory方法只会执行一次。 (3)相关的类与接口 1)Servlet接口 a,init(ServletConfig config) b,service(ServletRe
19、quest req,ServletResponse res) c,destroy() 2)GenericServlet抽象类 实现了Servlet接口中的部分方法(init,destroy) 3)HttpServlet抽象类 继承了GenericServlet,实现了service方法2.jsp (1)什么是jsp? sun公司制定的一种服务器端动态页面生成的技术规范。 注: a,虽然servlet也可以生成动态页面,但是过于繁琐(需要使用out.println()语句输出),并且 难以维护(修改页面,就需要修改 java代码),所以sun公司才制定了jsp规范 b,jsp是一个以“.jsp”
20、为后缀的文件,该文件会被容器自动转换成一个servlet然后执行。 (2)如何写一个jsp文件? step1:写一个以“.jsp”为后缀的文件 step2:添加 1)html(css,javascript)-直接写就可以 2)java代码: a,java代码片段 b,jsp表达式 3)隐含对象 a,什么是隐含对象 可以直接使用的对象,比如:out b,为什么可以直接使用这些隐含对象? 容器会生成获得这些对象的代码。 4)指令 a,什么是指令? 通知容器,在将jsp文件转换成一个servlet类时做一些额外的处理,比如导包 b,指令的格式 c,page指令 import属性:导包,比如: con
21、tentType属性:设置response.setContentType的内容 pageEncoding属性:告诉容器,jsp文件的字符集设置,容器在读取jsp文件时,会按照该设置来解码 (3)jsp是如何执行的 step1:容器会将jsp文件转换成一个servlet类 a,等标记-service方法当中,使用out.write输出 b,jsp脚本-java语句在service方法当中,照搬 c,jsp表达式-service方法当中,使用out.print输出 step2:容器调用该servlet。 -2015年02月05日 星期四 09时20分25秒 day051.转发 (1)什么是转发?
22、一个web组件(servlet/jsp)将未完成的处理转交给另外一个web组件继续完成 比如: servlet将处理结果转发给jsp来展现 (2)如何转发? step1:绑定数据到请求request request.setAttribute(String name,Object obj); 注: request.getAttribute(String name); step2:获得转发器 RequestDispatcher rd=request.getRequesDispatcher(String url); 注: 转发器可以理解为通知容器调用某个web组件的媒介 step3:转发 rd.fo
23、rward(request,response); (3)转发的特点 a,转发之后,浏览器的地址栏的地址不变 b,转发的目的地必须是同一个应用2.转发与重定向的区别 (1)转发可以共享request,而重定向不可以 注: 容器收到请求之后会立刻创建request和response 当响应发送完毕,容器会立即删除request和response 也就是说:request和response的生存时间是一次请求和响应期间。 (2)转发之后,浏览器地址栏的地址不变,而重定向会发生改变。 (3)转发的目的地必须是用同一个应用,而重定向没有限制。3.include指令告诉容器,在将jsp转换成servlet
24、类时,将file属性指定的文件的内容插入到该指令所在的位置。比如: 4.处理异常 (1)转发的方式来处理 step1:捕获异常 step2:如果有需要,将异常信息绑定到request对象上,然后转发到异常处理页面 step3:编写异常处理页面 (2)将异常交给容器来处理 step1:捕获异常 step2:将异常抛出给容器 step3:配置异常处理页面 javax.servlet.ServletException /error2.jsp 注: 系统异常(发生异常之后,不能恢复,比如数据库服务停止)经常使用容器来处理,而 应用异常(异常是可以恢复的,比如,用户名或密码错误)采用转发的方式来处理。5
25、.容器如何处理请求资源路径? 比如,在浏览器地址栏输入 http:/ip:port/web05_2/abc.html step1:容器会依据应用名“/web05”找到应用所在的文件夹 step2:容器会假定访问的是一个servlet然后去web.xml中进行匹配(即比较是否匹配/abc.html) 精确匹配: 比如:/web05 通配符匹配:使用*来匹配任意的零个或多个字符 比如:/* 后缀匹配:使用“*.”开头,后接任意多个字符 比如:*.do 以上配置匹配所有以“.do”结尾的请求 step3:如果以上均不匹配,会查找对应的文件。6.让一个servlet处理多种请求 step1:使用后缀匹
26、配 step2:分析请求资源路径,依据分析的结果,进行不同的处理 /获得请求资源路径 String request.getRequestURI();-2015年02月06日 星期五 08时54分55秒 day061.路径问题 (1)什么是路径问题? 链接,表单提交,重定向和转发,如何填写路径(地址)。 (2)相对路径 不以“/”开头的路径 (3)绝对路径 以“/”开头的路径。 链接,表单提交,重定向从应用名开始写,转发从应用名之后开始写 注: 不要将应用名写死,而应该使用:request.getContextPath();2.状态管理 (1)什么是状态管理 将浏览器与web服务器之间多次交互当
27、作一个整体来处理, 并且将多次交互所涉及的数据(也就是状态)保存下来。 (2)cookie 1)什么是cookie? 服务器临时存放在浏览器端的少量的数据。 2)cookie原理 当浏览器访问服务器时,服务器会将少量数据以 set-cookie消息头的 方式发送给浏览器,浏览器会将这些数据临时保存下来; 当浏览器再次访问服务器时,会将之前保存 的数据以 cookie消息头的方式发送给服务器。 3)添加cookie Cookie c=new Cookie(String name,String value); response.addCookie(c); 4)查询cookie Cookierequ
28、est.getCookie(); 注:有可能返回null。 String cookie.getName(); String cookie.getValue(); 5)中文问题 cookie只能保存合法的ASCII字符,需要将中文转换成相应的ASCII字符的形式 String URLEncoder.encode(String str,String charset); String URLDecoder.decode(String str,String charset); 注:建议保存cookie时,不管是否是中文,最好都进行编码处理 6)生存时间 默认情况下,浏览器会将cookie保存在内存,只
29、要浏览器不关闭,cookie会一直存在,当浏览器关闭,cookie会被删除。 cookie.setMaxAge(int seconds); 注: 单位是秒。 seconds0:浏览器会将cookie保存在硬盘上,当超过指定的时间浏览器会删除该cookie。 seconds0:默认情况 seconds=0:删除cookie。 比如,要删除一个名称为city的cookie Cookie c=new Cookie(city,); c.setMaxAge(0); response.addCookie(c); 7)路径问题 a,什么是cookie的路径问题 浏览器访问服务器上的某个地址时,会比较访问的地
30、址是否与cookie的路径匹配,只有匹配的cookie才会被发送出去 b,cookie默认的路径 cookie的默认路径等于添加该cookie的web组件的路径。 c,匹配规则 要访问的路径必须是cookie的路径或者是其子路经 d,cookie.setPath(String path) 比如: cookie.setPath(/web6_02) 8)cookie的限制 a,cookie可以被禁止 b,cookie不安全,尽量不要将敏感的数据以cookie的方式保存在浏览器端。 c,cookie只能保存少量的数据(大约4k左右)。 d,浏览器只能保存大约300个左右的cookie。 e,cook
31、ie只能保存字符串 (3)session request.setCharacterEncoding(utf-8); response.setContentType(text/html;charset=utf-8);-2015年02月09日 星期一 09时08分11秒 day071.session (1)session是什么? 服务器为维护状态创建的一个对象。 具体来讲,当浏览器访问服务器时,服务器会创建一个session对象(该对象有一个唯一的id,一般称之为sessionId), 服务器会将sessionId以cookie的方式发送给浏览器; 当浏览器再次访问服务器时,会将sessionId
32、发送过来,服务器可以通过sessionId找到之前创建的session对象。 (2)如何获得一个session对象? 1)HttpSession s=request.getSession(boolean flag); 当flag=true时 先查看请求对象中是否有sessionId,如果没有,则创建一个session对象;如果有,则依据该sessionId去查找 对应的session对象是否存在,如果找不到,则创建一个新的session对象,如果找到了,则返回。 当flag=false时 先查看请求对象中是否有sessionId,如果没有,则返回null;如果有,则依据该sessionId去查
33、找 对应的session对象是否存在,如果找不到,则返回null,如果找到了,则返回。 2)HttpSession s=request.getSession(); 等价于request.getSession(true); 3)HttpSession接口中声明的几个常用的方法 String getId(); setAttribute(String name,Object obj); Object getArribute(String name); removeArribute(String name);解除绑定 4)session超时 a,什么是session超时 服务器会将空闲时间过长的ses
34、sion对象删除掉。 b,缺省的超时时间一般是30分钟。 可以修改服务器缺省的超时限制 比如,可以修改tomcat conf/web.xml 30 c,setMaxInactiveInterval(int seconds); 5)立即删除session invalidate();2,session相关案例 (1)session验证 1)登录 step1:建表 create table li_user( id int primary key auto_increment, username varchar(50) unique, pwd varchar(30), name varchar(255
35、), gender char(1) ); insert into li_user(username,pwd,name,gender)values(King,1234,Giving King,m); step2:User实体类 step3:UserDAO public boolean find(String username,String pwd); 或者 public User find(String username) step4:login.jso,success.jsp step5:ActionServlet 2)session验证 step1:登录成功以后,在session对象上绑定一
36、些数据 比如:session.setAttribute(user,user); step2:对于需要保护的资源(只有登录成功以后才能访问的组件,比如success.jsp),添加session验证代码, 比如:Object obj=session.getAttribute(user) if(obj=null)response.sendRedirect(user,user); (2)验证码 生成长度为5,并且随即从“A-Z,0-9”选取的验证码-2015年02月10日 星期二 08时55分36秒 day081.url重写 (1)什么是url重写 浏览器在访问服务器时,需要使用经过改写的地址(即在
37、原来的地址后添加上sessionId) (2)如何进行Url重写 1)String response.encodeURL(String url) 该方法用于链接地址,表单提交 form action= 2)String response.encodeRedirectURL(String url); 该方法适用于重定向 response.sendRedirect(response.encodeRedirectURL(list.do);2.状态管理小结 session与cookie相比,优点是安全,能够保存更丰富的数据类型,缺点是session会将状态保存在 服务器端,如果访问量大,会造成大量的内
38、存空间的占用。3.过滤器 (1)什么是过滤器 servlet规范当中定义的一种特殊的组件,用来拦截servlet容器的调用过程,并进行相应的处理 (2)如何写一个过滤器 step1:写一个java类,实现Filter接口 step2:在doFilter方法里面,编写拦截处理逻辑 step3:配置过滤器(web.xml) (3)过滤器的优先级 当有多个过滤器都满足过滤的条件,容器会依据的先后顺序来调用 (4)初始化参数 step1:配置 size 10 step2:使用 String FilterConfig.getInitParameter(String param); (5)优点 1)不用修
39、改源代码,为系统增加新的功能 2)将多个组件相同的处理逻辑写在一个过滤器里面,方便代码的维护练习: 注册 要求: 1)先检查验证码是否正确,如果不正确,提示用户,否则进行下一步 2)检查用户名是否被占用,如果占用了,提示用户,否则进行下一步 3)将用户提交的信息(用户名,真实姓名,密码,性别)插入到数据库,然后跳转的登录页面-2015年02月11日 星期三 10时06分50秒 day091.监听器 (1)什么是监听器 servlet规范当中定义的一种特殊的组件,用来监听servlet容器产生的事件并进行处理 主要有两大类事件: 1)生命周期相关的事件:容器在创建或者销毁request,sess
40、ion,servlet上下文时产生的事件 2)绑定数据相关的事件:执行了request,session,servlet上下文的setAttribute,removeAttribute产生的事件 (2)如何写一个监听器 1)写一个java类,实现监听器接口 HttpSessionListener ServletRequestListener 2)在监听器接口方法中,实现具体的监听处理逻辑 3)注册(web.xml) (3)servlet上下文 a,什么是servlet上下文 容器在启动之后,会为每一个web应用创建一个符合ServletContext接口要求的对象,该对象一般称 之为servlet上下文。 有两个特点: 唯一性:一个web应用对应一个se
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 灯具采购合同模板模板
- 《小熊住山洞》课件
- 新人教版-数学四年级上册-用四舍法试商
- 领导力培训课程-培养优 秀领导者
- 顾客至上新零售体验的未来发展趋势
- 音乐产业中文化创意产业的发展现状及挑战
- 风能发电项目的产业链分析与发展机遇探讨
- 顾客关系管理艺术社区电商的突破与增长
- 非遗传承与商业模式的创新探索
- 青少年在社交媒体中的自我表达与引导
- 2025至2030中国4K和8K超高清电视行业发展趋势分析与未来投资战略咨询研究报告
- 消防在建工地课件
- 南海课件下载
- 彩钢板围挡施工与拆除一体化服务协议
- 中班安全标识课件
- 殡仪馆物业服务管理制度
- 电大:理论联系实际阐述文化在社会发展中具有什么样的作用?参考答案03
- 2025贵州医科大学辅导员考试试题及答案
- 2025广东食品药品职业学院教师招聘考试试题及答案
- 【博观研究院】2025年跨境进口保健品市场分析报告
- DB4401-T 43-2020 反恐怖防范管理+防冲撞设施-(高清现行)
评论
0/150
提交评论