servlet技术介绍以及运行原理.docx_第1页
servlet技术介绍以及运行原理.docx_第2页
servlet技术介绍以及运行原理.docx_第3页
servlet技术介绍以及运行原理.docx_第4页
servlet技术介绍以及运行原理.docx_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、 ServletServlet是sun公司提供的一种用于开发动态web资源的技术为了方便web服务器对动态web资源的管理,sun公司在其api中定义了一个Servlet接口服务器针对接口进行调用,我们编写的应用程序针对接口进行实现习惯性地,我们把实现了Servlet接口的java类统称为Servlet1. javaweb 学什么用 java 语言开发动态的web资源,接下来就是介绍如何开发动态的web资源对于java程序员而言,所谓动态web资源就是可以运行在服务器上的java程序2. 实现服务器管理java程序开发人员写好一个java类,到底有哪些方法tomcat服务器是不可能知道的tomcat服务器需要执行我们编写的java类就需要知道我们的java类有哪些方法,然后在适当的时间调用这些方法, 所以我们在写的java程序要想运行在服务器上就必须要实现一个特殊的接口 Servlet.javainterface Servlet . Servlet 接口中就定义了可以被tomcat服务器调用的java方法通常来讲,我们将实现了Servlet接口的java类称之为 Servlet编写好的Servlet需要web.xml文件中做配置才能供外界访问3. 实现第一个Servlet程序3.1 写一个java类实现Servlet接口package cn.itcast.servlet;import java.io.*;import javax.servlet.*;public class HelloWorldServlet extends GenericServlet/ 实现 service 方法public void service(ServletRequest request,ServletResponse response)throws ServletException,java.io.IOException / 向浏览器输出一句话PrintWriter out = response.getWriter();out.write(hello world!);public void init()throws ServletException / 初始化 servlet 时被调用System.out.println(init();public void destroy() / 摧毁 servlet 时被调用System.out.println(destroy();3.2. 导入 servlet jar包set classpath=%classpath%;D:apache-tomcat-6.0.20libservlet-api.jar3.3. 编译带包的类javac -d . HelloWorldServlet.java3.4. 将包拷贝至 day05/WEB-INF/classes 目录下 - 发布 web 工程3.5. 在 web.xml 文件中做映射HelloWorldServletcn.itcast.servlet.HelloWorldServletHelloWorldServlet/HelloWorldServlet注意: servlet 对象一旦创建就会驻留在内存中,为所有的请求服务,什么时候销毁直到服务器关闭时或web应用被移除才销毁3.6. Servlet 执行流程图4. 用 eclipse 工具开发 Servlet 4.1. 建一个 web project 4.2. 在src下建包,创建一个java类实现Servlet接口 4.3 在 WebrootWEB-INFweb.xml 做 servlet 映射4.4 配置 tomcat 服务器window- preferences - tomcat6.x4.5 将web工程发布至tomcat 服务器发布的web应用名称可以配置: web工程右键 选properties-myeclipse-web默认情况使用工程名作为发布后的web应用名4.6 启动tomcat服务器运行程序5. HttpServlet对象一般来讲我们开发一个Servlet会去继承 HttpServlet在 eclipse 下开发Servlet 可以直接新建一个Servlet, 覆写 HttpServlet 的 doGet和doPost方法继承 HttpServlet 的原因是: HttpServlet实现了service方法,将ServletRequst和ServletResponse强转为子类 HttpServletRequest和HttpServletResponse,让我们用起来更加方便,同时,在service方法中,它判断了请求方式,根据请求方式来调用 doGet 和 doPost6. servlet 生命周期Servlet 在首次被访问时,会初始化,调用 init 方法, 驻留在内存, 当服务器停止或当前web应用被移除时,servlet会被摧毁, 调用 destroy 方法浏览器发送请求 , service方法会被调用二、 Servlet 细节1. * 号统配符在映射 Servlet 路径时可以使用/* 或 *.扩展名 的形式注意: 两者不能同时使用/* 具有较高的优先级2. load-on-startup 元素元素下可以配置子元素,配置方式如下:1如果一个Servlet配置了该项,web容器会在web应用被加载时就初始化该Servlet,数字越小则越先初始化3. tomcatconfweb.xml服务器下所有web 应用中的web.xml 都会自动继承该文件中所有的配置http:/localhost:8080/day05/a.html a.html是资源名上面的url访问的url在web.xml文件中并没有配置此时会去访问缺省的Servlet,在tomcatconfweb.xml文件中就配置了一个缺省的DefaultServlet DefaultServlet帮我们去web应用下读取 a.html 文件,并打给浏览器,如果没有发送 404 页面也就说,我们通过ie访问服务器访问的都是 Servlet4. Servlet线程安全问题解决Servlet线程安全问题: 加上同步的锁(lock) 实现SingleThreadModel接口的Servlet服务器会做判断,当有请求过来,如果Servlet对象忙着呢,服务器会再创建一个Servlet对象为用户提供服务,如果Servlet闲置,就直接提供服务这样的方式实际上是回避了线程安全问题, 单线程访问Servlet, 这样的方式不可取三、 ServletConfig 对象作用 : 封装 Servlet 初始化参数1. 可以在 web.xml 文件中 Servlet 元素下 为Servlet配置初始化参数 name aaaa2. web 容器在初始化Servlet时,会将初始化参数封装到一个 ServletConfig 对象中,传给init方法3. 我们在Servlet 中覆写 init方法,就可以获得ServletConfig4. 父类 GenericServlet 中定义了一个成员变量用于记住此对象,并提供了 getServletConfig 方法我们可以直接调用此方法 获得 config 对象5. 再调用 getInitParameter(name) 方法获得想要配置项/ 指定编码/ 获得ServletConfig 对象ServletConfig config = getServletConfig();String encoding = config.getInitParameter(encoding);System.out.println(encoding= + encoding);四、 ServletContext 对象ServletContext1. ServletContext对象代表整个web应用ServletContext也被称作Servlet的上下文,也就是Servlet的运行环境2. ServletContext对象是一个域对象(可以存储数据的对象)ServletContext对象的内部维护了一个map集合, key是String类型 value是Object类型class ServletContext private Map map ; 通常来讲,我们会将全局的数据存入 ServletContext 域对象3. ServletContext 作为域对象, 多个Servlet 可以共享数据Servlet6/ 1. 获得ServletContext 对象ServletContext context = getServletContext();/ 2. 存入域context.setAttribute(“name”, “zhangsan”);Servlet7/ 获得 context 域, getAttributeString name = (String) getServletContext().getAttribute(name);4.获取web应用的初始化参数getContext().getInitParameter(“name”);5. 统计一个web应用的访问量 在 context 域中维护一个count变量 访问Servlet时,取出变量 加16. 实现请求转发实现请求转发需要用到 转发对象 RequestDispatcher 有一个 forward 方法能转发请求7. 如何读取工程中的文件7.1. 读取web工程下的资源文件/ 获得绝对路径 String realPath = ServletContext.getRealPath(相对web应用的路径);注意URL url = ServletContext.getResource(); web的url/ 获得与文件关联的流InputStream in= ServletContext.getResourceAsStream(“WEB-INF/classes/perties”;7.2 读取java工程下的文件/ 不能相对虚拟机目录 不能用绝对路径 / 只能类加载的方式读/ 获得 流ClassLoader classLoader = Demo.class.getClassLoader();InputStream in = classLoader.getResourceAsStream(a.txt);/ 获得绝对路径URL url = Demo.class.getClassLoader().getResource(a.txt);String path = url.getPath();类加载方式缺点1) 不能读取类路径以外文件2) 由于需要加载到内存,不能读大文件web工程中如果用类加载的方式读类加载实际上读取的是内存中加载的文件,此时将读不到硬盘上资源文件的修改解决办法Demo.class.getClassLoader().getResource(a.txt).getPath()通过绝对路径去读硬盘上的文件 避开内存的文件总结:1. 在 Servlet 中,我们使用 ServletContext 来读取文件2. 在别的java类中通过类加载的方式读文件,此时文件必须位于 src 下五、 Servlet缓存HttpServlet 的 Service方法中的代码/ 调用方法long lastModified = getLastModified(req);/ 如果为 -1 ,就直接放行,给最新的 if (lastModified = -1) doGet(req, resp);/ 方法返回不是-1 else / 读取IE发送的头If-Modified-Since long ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);/ 拿着客户端的时间头和方法的返回值比较 if (ifModifiedSince (lastModified / 1000 * 1000) / If the servlet mod time is later, call doGet() / Round down to the nearest second for a proper compare / A ifModified

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论