08 Servlet

Servlet技术
          * Servlet开发动态的Web资源的技术。    
         
          * Servlet技术
               * 在javax.servlet包下,接口。
               * 一个小的java程序,运行在服务器端,接收和响应从客户端(浏览器)发送过来的请求。
              
          * Servlet开速入门
               * 简单类,实现Servlet接口。(5个方法)
                    * 继承某个类(GenericServlet),重写一个方法。
                         * 重写public void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException方法
                    * 配置Servlet(*****)
                   
          * 带包编译
               * javac -d . HelloServlet.java
              
          *  javax.servlet 不存在    
               * 解决问题:
                    设置临时环境变量:set classpath=%classpath%;servlet-api.jar   
                   
          * 配置Servlet
               * 在文件中配置:
                    <servlet>
                         <servlet-name>HelloServlet</servlet-name>
                         <servlet-class>cn.itcast.servlet.HelloServlet</servlet-class>
                    </servlet>
                    <servlet-mapping>
                         <servlet-name>HelloServlet</servlet-name>
                         <url-pattern>/hello</url-pattern>
                    </servlet-mapping>
                   
          * 启动服务器
          * 访问:http://localhost:80/website/hello


在MyEclipse中开发Servlet

* 实现Servlet接口,重写5个方法。
               * 配置Serlvet,项目web.xml中配置
              
Servlet的生命周期
               * 生命周期:实例创建,服务,销毁。
                   
               * Servlet实例被创建后,立即调用init方法,进行初始化。
                    init(ServletConfig config);
                   
               * 从客户端发来的请求,都被service方法处理
                    void service(ServletRequest req, ServletResponse res);
                   
               * 销毁调用destroy方法。
                    void destroy()
                   
总结:

  1. 第一次访问的时候,服务器创建了Servlet的实例,立即调用init方法进行初始化,init只调用一次。
  2. 从客户端发送过来的请求,调用service方法去处理,请求有多少次,service就执行多少次。
  3. 服务器关闭就销毁Servlet实例,调用destroy方法,调用一次。


关系    
               Servlet
                    |
               GenericServlet
                    |
               HttpServlet         
              
               * 编写一个普通的类,继承GenericServlet,初始化操作,重写init()的方法。
               * 编写一个普通的类,继承HttpServlet,重写doGet和doPost方法。
              
          * 如果再编写一个Servlet程序。
               * 编写一个普通的类,继承HttpServlet。
               * 重写doGet()和doPost()方法
               * 配置Servlet。(web.xml)
              
          * doGet和doPost逻辑相同,互相调用,简化编程。           
       
               doGet()
                    * 通过名称,查询数据,返回到页面。
               doPost()
                    doGet()



MyEclipse更方便的创建Servlet的方式。
               * 右键 -- 选择servlet -- 起名字 -- 选择doGet和doPost
                    -- 配置web.xml -- 起Servlet名称 -- 设置访问路径
                   
               * 修改模板
                    * 找到MyEclipse安装路径,找到com.genuitec.eclipse.wizards.xxx.jar

* 找到com.genuitec.eclipse.wizards_9.0.0.me201211011550.jar
                    * (千万别解压)-- 右键 -- 打开方式 -- 选择压缩工具 -- templates -- 找到Servlet.java
                    * MyEclipse先关闭。



配置Servlet自动加载:

如果在<servlet>元素中配置了一个<load-on-startup>元素,那么WEB应用程序在启动时,就会装载并创建Servlet的实例对象、以及调用Servlet实例对象的init()方法
               * 在<servlet>
                    <load-on-startup>2</load-on-startup>
               </servlet>
              
               * 值是正整数,值越小,优先级越高。

例如:为web应用写一个InitServlet,这个servlet配置为启动时装载,为整个web应用创建必要的数据库表和数据。



 映射配置
               * <url-pattern>/demo</url-pattern>
              
               * 完全路径匹配          以/开头的          /demo    
                    * 只能/demo去访问
               * 目录匹配               以/开头的          /*          /demo/*
                    * /xxx都可以访问
               * 扩展名匹配          不能以/开头          *.do     *.action     *.xx
                    * xxx.do
                   
               * 优先级:完全路径匹配 > 目录 > 扩展名匹配



WEB开发中路径的问题
               * 相对路径
                    * 一个文件相对与另外一个文件的位置。
                    * 写法:不能以/开头     ../demo          ./demo          demo
                   
                    * 访问Demo8的Servlet:  http://localhost/day08/demo8
                    * 访问demo1.html的文件:http://localhost/day08/demo1.html
                   
                    * 相对路径:     ./demo8          demo8
                   
                    * http://localhost/day08/html/demo2.html
                    * http://localhost/day08/demo8
                    * 相对路径: ../demo8
                   
                    * 平时开发中少写相对路径,写绝对路径。
                   
               * 绝对路径
                    * http://localhost/day08/demo8"
                    * 简便写法:/day08/demo8
                    * 绝对路径以/开头。
                   
               * 服务器和客户端的绝对路径
                    * 客户端的绝对路径(经常使用)
                         * /day08/demo8
                   
                    * 服务器的绝对路径(很少使用)
                         * /demo8



ServletConfig接口

A servlet configuration object used by a servlet container to pass information to a servlet during initialization.

init(ServletConfig config);         
     * String getServletName()                           获取Servlet的名称       
     * ServletContext getServletContext()

* String getInitParameter(String name)       获取初始化参数
     * Enumeration getInitParameterNames()           获取初始化参数所有的名称

在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数。



ServletContext域对象

会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。

获取WEB应用的全局初始化参数: 一般用于指定编码
                    * String getInitParameter(String name) 
                    * Enumeration getInitParameterNames()

//只需要在web-app下加入即可

<context-param>

<param-name>encoding</param-name>

<param-value>utf8</param-value>

</context-param>

实现数据共享
                    * void setAttribute(String name, Object object) 
                    * Object getAttribute(String name)
                    * void removeAttribute(String name)
                   
读取资源文件
     * InputStream getResourceAsStream(String path)       通过路径获取文件的输入流

//相对于tomcat对应webapp下用/aa/bb/kk.properties即可.
     * String getRealPath(String path)                           通过路径获取文件的绝对磁盘路径

//path的获取方法也是和上面的一样,只是获得物理路径后可以直接new FileInputStream(path)进行更多的操作,不只是读,还能写.



缺省的servlet(了解)         
               * tomcat/web.xml中
                 <servlet>
                    <servlet-name>default</servlet-name>
                    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
                    <init-param>
                         <param-name>debug</param-name>
                         <param-value>0</param-value>
                    </init-param>
                    <init-param>
                         <param-name>listings</param-name>
                         <param-value>true</param-value> //本是false,但改成了true;只改这个
                    </init-param>
                    <load-on-startup>1</load-on-startup>
               </servlet>

时间: 2024-07-30 10:18:08

08 Servlet的相关文章

DWR搭建以及使用教程

DWR搭建以及使用教程 DWR(Direct Web Remoting)是一个Ajax的开源框架,用于改善web页面与Java类交互的远程服务器端的交互体验,可以帮助开发人员开发包含AJAX技术的网站.它可以允许在浏览器里的代码使用运行在WEB服务器上的JAVA函数,就像它就在浏览器里一样. 从DWR官网下载最新版本的jar包,地址:http://directwebremoting.org/dwr/downloads/index.html 将jar包放入WEB-INF的lib文件夹下.同时,dw

关于Cookie的有关内容

1.首先谈谈http协议与状态保持. Http协议本身是无状态的,这与http协议本来的目的是相符的,客户端只需要简单的向服务器发出请求操作,然后服务器对请求作出响应.无论客户端还是服务器都没有必要记录彼此的过去的行为,每一次请求之间都是独立的. 不过生活中确实有另外一种需求,比如:某家咖啡店有喝5杯咖啡送一杯的优惠 ,然而一次性消费5杯咖啡的机会微乎其微,这时就需要用一种方式来记录某位顾客消费咖啡的数量.想象一下,其实也就是下面几种情况: 1.该店的店员很厉害,能记住每位顾客的消费数量,只要顾

百度哈斯发卡号是减肥哈卡斯加分了卡斯

http://www.ebay.com/cln/ta_ya20/-/167521224015/2015.02.08 http://www.ebay.com/cln/p-m6466/-/167398283011/2015.02.08 http://www.ebay.com/cln/ta_ya20/-/167521242015/2015.02.08 http://www.ebay.com/cln/p-m6466/-/167398294011/2015.02.08 http://www.ebay.co

克同极用后管期果要议向中如极示听适VybVfesyhpR

社保划到税务征收,将大大提升社保费的征管效率.税务的征管能力是目前而言最强的,以后税务征收社保不是代收,属于本职了. 之前税局要把社保信息和交个税的工资比对起来有困难!现在好了,个税是自己的,社保也是自己的,比对困难?不存在的! 这一变革,会给那些不给员工上社保.不全额上社保的企业致命一击! 最新案例 前段时间的发改委关于限制特定严重失信人乘坐民航的一则意见--发改财金[2018]385号,其中还有税务总局的联合署名. http://weibo.com/20180408PP/2309279811

08.17《jsp》——html+css+js+jsp+servlet+oracle简单项目练习

16,17号,两天时间,结束了JSP的学习,开始了项目的实践学习 第一步是最简单的添加 在这之中,对于数据库的链接,间接的展开了jdbc的复习,在其中由于数据库和老师所给的教材不相符,所以停顿在链接数据的时间很长,在一遍遍的修改ORA-12505错误没有结果的时候,使用最笨的办法重新安装了一个ORACLE数据库,将其命名与老师的同名,这样解决了数据库的链接失败问题. 第二步是查找操作 有了第一次的流程,所以这次速度快了一些,在一边完成查找操作的同时一边熟悉着流程,熟悉着数据流向的过程,由页面 -

Spring Boot 学习系列(08)—自定义servlet、filter及listener

此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 传统的filter及listener配置 在传统的Java web项目中,servlet.filter和listener的配置很简单,直接在web.xml中按顺序配置好即可,程序启动时,就会按照你配置的顺序依次加载(当然,web.xml中各配置信息总的加载顺序是context-param -> listener -> filter -> servlet),项目搭建完成后,估计一般新来的开发同学没啥

Servlet&amp;jsp基础:第一部分

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4288968.html 使用Servlet激活器... 5 缺省Servlet 6 Tomcat中的类装载器... 6 Servlet 8 Servlet路径映射... 8 ServletConfig接口... 9 获取ServletCont

Servlet&amp;jsp基础:第二部分

声明:原创作品,转载时请注明文章来自SAP师太技术博客:www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接: HttpServletResponse. 20 产生响应状态行... 20 HTTP状态常量... 20 setStatus(int sc)20 sendError21 构建响应消息头... 21 addHeader与setHeader21 addIntHeader与setIntHeader21 addDateHead

Servlet中会话之cookie(7)

1.(1).用户输出URL地址,有效访问某个网站,在该网站上的一系列有效操作,随后关闭浏览器的整个过程,叫一次会话 (2).会话主要解决服务端如何保存每个客户端对应的私有信息. (3).会话主要有二种: a>Cookie技术[客户端技术] b>Session技术 两者的不同就是:session会随着浏览器关闭而失效,但cookie会一直存放在客户端机器上,除非超出Cookie的生命周期. 2.Cookie技术    (1)Cookie是客户端技术,服务器把每个用户的数据以cookie的形式写给