servlet总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.servlet小结
(1)servlet基础
1)什么是servlet?
servlet技术是使用java语言开发的一套组件规范,
单独分配了一个线程来处理客户端发送的请求并返回结果
2)如何写一个servlet?
1,安装Tomcat:下载文件并安装,配置文件,启动Tomcat,关闭Tomcat
2,开发Servlet步骤:一编写一个实线Servlet接口或继承HttpServlet的java类
二使用javac命令变异源文件为字节码文件
三将编译完的组件打包
四部署
五启动Tomcat,并访问Servlet
3)servlet是如何运行的?
servlet作为一个补充web服务器功能的组件,不能单独运行,必须依赖Servlet容器才能运行
1.浏览器一句IP建立与容器的连接
2.浏览器将请求数据打包
3.容器解析请求数据包,封装request和response对象
4.容器依据请求资源路径找到Serlvet创建对象
5.容器将request和response对象作为参数传入service方法,并调用
6.容器将响应数据打包发给浏览器
7.浏览器取出结果,生成页面
4)http协议(了解)
1.浏览器根据IP地址和服务器端口号与服务器建立连接
2.想web服务器发送请求数据包(一次请求一次连接)
3.web服务器接收请求数据包后,发送相应的响应数据包
4.浏览器接受响应数据后关闭连接
(2)servlet核心
1)如何获得请求参数值?
String request.getParameter(String paramName);
String[] request.getParameterValues(String parameterName);
2)表单包含有中文参数,如何处理?
request.setCharacterEncoding("utf-8");请求数据
response.setContentType("text/html;charset=utf-8");相应数据
3)servlet输出中文,如何处理?
4)容器如何处理请求资源路径?
资源路径:在地址栏中输入的请求地址中,端口号之后的部分都是请求资源路径
端口号之后是部署到web服务器上的应用名,之后的是具体的应用内的组件路径
处理过程:根据IP和端口号与服务器建立连接服务器会获得请求资源路径信息。
根据端口号后面的应用名找到服务器对应的应用。默认情况下容器会认为应用名后面的是
一个servlet,所以回到web.xml文件中是否有余改制匹配的
之后再按照
匹配原则:精确匹配,通配符匹配,后缀匹配:“*.”
5)如何将多个servlet合并成一个?
1.使用后缀模式完成请求资源路径的匹配
2.分析请求资源路径中的请求目标,完成分发的动作
String uri = request.getRequestURL();
String action = uri.subString(stIndexOf("/"),stIndexOf("."));
6)转发与重定向
转发:在web服务端处理用户请求的时候
,会有多个web组件配合才能完成的情况,
一个web组件(servlet/jsp)将未完成的处理通过容器转交给另外一个组件继续完成
三个步骤1.绑定数据到 request对象request.setAttribute(string name,Object obj);
2.获得转发器 RequestDispatcher rd = request.getRequestDispatcher(String url);
3.实现转发 rd.foward(request,response);
在forward之后的语句会继续执行,只要不报异常
重定向:影响浏览器做出动作的关键点即相应中的状态码及Location这个消息头,
302状态像一道新命令使得浏览器做出一次新的请求,请求的地址在消息头中寻找,
对于客户端来说,中间的变化不会被察觉,因为这个过程是浏览器自动完成的。
7)servlet的生命周期
四个阶段
1.实例化:servlet容器调用Servlet的构造器创建一个具体的Servlet对象的过程。
创建的实际可以在容器收到针对这个组件的请求后创建,也可以容器启动之后立即创建
2.初始化 :Servlet在被加载实例后,必须要初始化它,在初始化阶段,init()方法被调用,
方法以一个ServletConfig类型的对象作为参数,对象由Servlet引擎负责创建,从配置文件
ServletConfig config = getServletConfig();
String debug = config.getInitParameter("debug");
3.就绪:Servlet被初始化之后就处于能够响应请求的就绪状态
4.销毁:Servlet容器在销毁Servlet对象时会调用destroy方法来释放资源
8)servlet的线程安全问题
服务器只有一个servlet实例,当两个线程同时操作时,会有安全隐患
9)servlet上下文(ServletContext)
什么是ServletContext:全局环境变量,代表当前web应用,该应用的任何组件,在任何时候都可以访问到该对象,具有唯一性
如何获得Servlet上下文
1,GenericeServlet(HttpServlet)提供的 getServletContext()
2,ServletConfig提供的 getServletContext()
3,HttpSession提供的 getServletContext()
4,FilterConfig提供的 getServletContext()
ServletContext作用:
1,在web应用范围内存取共享数据,如setAttribute,getAttribute
2,访问web应用的静态资源,如getRealPath(String path)
3,跨多个请求,用户,和Servlet
(3)状态管理
1)什么是状态管理?
HTTP是无状态协议,将客户端与服务器之间的多次交互来当作一个整体看待,
并且将多次交互中涉及的数据保存下来,提供给后续的交互进行数据的管理及状态管理
2)Cookie:数据存储在客户端
一小段文本信息随着请求和响应,在客户端和服务端之间来回传递,
根据设定的时
间来决定该段文本在客户端保存时长的这种工作模式叫做Cookie
创建Cookie Cookie c = new Cookie(String name,String value);
request.addCookie(c);
查询Cookie Cookie[] request.getCookies();
修改Cookie c.setValue(String value)
response.addCookie(c)是非常重要的语句,修改完Cookie的值要发回到客户端,否则修改无用
生成时间 void setMaxAge(int seconds);seconds>0 保存硬盘上的时长,=0,立即删除<0:缺省值,浏览器保存内存中
编码 Cookie c = new Cookie("city",URLEncoder.encode("北京","utf-8"));
解码 URLDecoder.decode(value,"utf-8")
路径 只有访问的地址是Cookie的路径或者是其子路径时,浏览器才会发送Cookie到服务器
设置路径 c.setPath("/test");response.addCookie(c);
3)Session:数据存储在服务端
1,什么是Session:服务器为不同的客户端在内存中创建了用于保存数据的Session对象,并将用于标识该对象的唯一Id发回给与该对象对应的客户端。
当浏览器再次发送请求时,SessionId也会被发送过来,服务器凭借这个唯一Id找到与之对应的Session对象。
在服务器端维护的这些用于保存与不同客户端交互时的数据的对象叫做Session
2,如何获得session
HttpSession s = request.getSession(boolean flag);
flag = true:先从请求中找找看是否有SID,没有会创建新Session对象,有SID会查找与编号对应的对象,找到匹配的对象则返回,找不到SID对应的对象时则会创建新Session对象。所以,填写true就一定会得到一个Session对象。
flag= false:不存在SID以及按照SID找不到Session对象时都会返回null,只有根据SID找到对应的对象时会返回具体的Session对象。所以,填写false只会返回已经存在并且与SID匹配上了的Session对象。
HttpSession s = request.getSession( );默认为true
3,如何使用Session绑定对象 采用键值对的形式来区分每一组数据
绑定数据session.setAttribute(String name,Object obj);
获取数据session.getAttribute(String name);
一处绑定数据session.removeAttribute(String name);
4,Session超时:Session会以对象的形式占用服务器端的内存,过多的以及长期的消耗内存会降低服务器端的运行效率,所以Session对象存在于内存中时会有默认的时间限制,一旦Session对象存在的时间超过了这个缺省的时间限制则认为是Session超时(一般为30分钟),Session会失效,不能再继续访问。
修改Session的缺省时间限制:
编程式 void setMaxInactiveInterval(int seconds)//单位为秒
声明式
5,Session验证
步骤一、为Session对象绑定数据(先获取Session)
步骤二、读取Session对象中的绑定值,读取
成功代表验证成功,读取失败则跳转回登录页面。
6,Session优缺点
优点:Session对象的数据由于保存在服务器端,并不在网络中进行传输,所以安全一些,并且能够保存的数据类型更丰富,同时Session也能够保存更多的数据,Cookie只能保存大约4kb的字符串。
缺点:Session的安全性是以牺牲服务器资源为代价的,如果用户量过大,会严重影响服务器的性能。
(4)数据库访问
1)如何使用jdbc访问数据库
2)使用dao访问数据库
(5)过滤器与监听器
1)什么是过滤器?
锅炉器是Servlet2.3规范之中一种特殊的Web组件,可以作为Servlet的辅助性插件存在。
2)如何写一个过滤器?
1,编写一个实现了Filter接口的类
public class commetFilter implements Filter{}
2,实现Filter接口的三个方法,过滤逻辑在doFilter方法中实现
public void doFilter(ServletRequest arg0,ServletResponse arg1,FilterChain arg2){arg2.doFilter(arg0,arg1);}
3,在web车工序中注册过滤器
<!-- 初始化参数,有FilterConfig对象读取 -->
4,把过滤器和web应用一起打包部署
3)过滤器的优先级
在一个web应用中,可以有多个过滤器,
优先级有位于web.xml文件中的声明顺序决定,具体按照
4)初始化参数
读取初始化参数:String illegalStr = config.getInitParameter
5)什么是监听器?
servlet规范当中定义的一种特殊的组件,用来监听servlet容器产生的事件并进行响应的处理
6)如何写一个监听器?
step1,一个java类,实现相应的监听器接口(共有8个接口),依据监听的事件选择相应的监听器接口
step2,在监听器接口方法中,实现相应的监听处理逻辑
step3,注册(web.xml)文件中配置即可