• 4.Servlet(动态web资源)


    Servlet (动态web资源)

    开发一个动态web资源(即开发一个Java程序向浏览器输出数据) 需完成以下两个步骤

      1.编写一个Java类,实现servelet接口

      2.把开发好的Java类部署到web服务器中

    servlet入门(用servlet 在一个网页中显示 helloworld)(动态)(不使用IDE的情况下)

      1.在tomcat中新建一个web应用,然后在web应用中新建一个 web-inf/classes目录
      2.在classes目录中新建一个FirstServlet

     

    1 public class FirstServlet extends GenericServlet {
    2     public void service(ServletRequest req,ServletResponse res) throws     ServletException,java.io.IOException {
    3         OutputStream out = res.getOutputStream(); //字节流
    4         out.write("hello world!!".getBytes());    //"hello world!!" 是字符 需变成字节
    5     }
    6 }

      3.set classpath=%classpath% .............servlet.jar 编译servlet

      (因为servlet属于j2ee,不是j2se,所以,需要配置一下classpath)(在dos命令行中)

      4.在web-inf目录中新建一个web.xml文件,配置servlet对外访问路径


      5.启动tomcat 访问

    Servlet调用过程:
      1.连上web服务器

      2.发送http请求

      3.解析出想访问的主机名

      4.解析出想访问的web应用

      5.解析出想访问的web资源

      6.第一次创建servlet实例对象

      7.调用servlet对象的init方法完成初始化

      8.创建代表请求的request和代表响应的response调用servlet的service方法响应客户端请求

      9.service方法执行,向代表客户端响应的response对象写入了向客户机输出的数据

      10.service方法返回

      11.从response中取出数据,构建出HTTP响应,回写给客户机

      12.回写HTTP响应

      13.浏览器解析HTTP响应 显示数据

    注:HttpServlet在实现了Servlet接口时,覆写了service方法,当继承了HttpServlet后  就不需要再写service方法,只需要写doGet  或者 doPost方法里面处理

    Servlet的小细节:

      1.同一个Servlet可以被映射到多个URL上,即可以写多个<servlet-mapping>,也可以使用*通配符,但是只能有两种固定格式:

      一种格式是: " *.扩展名 ",  另外一种格式是(/*) 

      2.web.xml文件的更改,不需要重新发布工程,会自动更新

      3.使用 * 通配符可能出现地址冲突的问题,都匹配某个请求的情况:遵循: 1.选长得最像的响应 2.通配符在前优先级最低

      4.Servlet不能独立运行,它的运行完全由Servlet引擎(web服务器用来调Servlet的java程序)来控制和调度

      5./*针对客户端的多次Servlet请求,通常情况下,服务器只会创建一个Servlet实例对象,

      也就是说Servlet实例对象一旦创建,它就会驻留在内存中,为后续的其他请求服务,直至web容器退出(Tomcat关闭),servlet实例对象才会销毁*/

      6.在servlet的整个生命周期内,这个servlet的init方法只被调用一次,而对一个servlet的每次访问请求都导致servlet引擎调用一次service方法,

      对于每次访问请求,servlet请求都会创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象,

      然后将这两个对象作为参数传递给它调用的servlet的service()方法,service方法再根据请求方式分别调用doXXX()方法

      7.如果在<servlet>元素中配置了一个<load-on-startup>(里面可以写正整数,数字越小,优先级越高)元素,

      那么WEB应用程序在启动时,就会装载并创建servlet的实例对象,以及调用servlet实例对象的init()方法 用途:在特定时刻,为web应用创建必要的数据库表和数据

      8.如果某个servlet的映射路径仅仅为一个 (/),那么这个servlet就成为当前web应用程序的缺省servlet 凡是在web.xml文件中找不到匹配的<servlet-mapping>元素的URL,

      它们的访问请求都交给缺省servlet处理,也就是说,缺省servlet用于处理所有其他servlet都不处理的访问请求

      在<tomcat的安装目录>confweb.xml文件中,注册了一个名称为org.apache.catalina.servlets.DefaultServlet的Servlet,并将这个servlet设置为可缺省servlet

      由上: /*当访问tomcat服务器中的某个静态HTML文件和图片时,实际上是在访问这个缺省Servlet*/

      9.servlet的线程安全问题:service方法如果操作共享资源,则有可能出现线程安全问题

      如果某个servlet实现了SingleThreadModel接口(标记接口,无方法),那么servlet引擎将以单线程模式来调用其service方法

      (如果多个线程同时访问某个资源,则产生对应的多个servlet实例对象,并发的每个线程分别调用一个独立的servlet实例对象)

      实现SingleThreadModel接口并不能真正解决servlet的线程安全问题,因为servlet引擎会创建多个servlet实例对象,

      而 /*真正意义上解决多线程安全问题是指一个servlet实例对象被多个线程同时调用的问题*/ 故 SingleThreadModel接口(过时的)

    web服务器在调用servlet的时候,会传递给servlet很多对象:前面讲到了ServletRequest , ServletSponse 还有一些其他的对象:如ServletConfig ServletContext session cookie 等

    1./*ServletConfig对象(用于封装servlet的配置信息)*/

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

    在servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,

    将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以得到当前servlet的初始化参数信息

    该对象的作用: 1.获得字符集编码 2.获得数据库连接信息 3.获得配置文件,查看struts案例的web.xml文件

    2./*ServletContext对象 (代表当前web应用)*/

      WEB容器在启动时,它会为每个web应用程序都创建出一个对应的ServletContext对象

      ServletConfig对象中维护了ServletContext对象的引用(即可以通过ServletConfig.getServletContext方法获得 (因为继承了HttpServlet也可以直接this.getServletContext ))

      ServletContext方法的应用

        1.多个Servlet通过ServletContext对象实现数据共享 ServletContext对象通常被称之为context/*域*/对象 (ServletContext域这个容器的作用范围:应用程序范围) 

        2.获取web应用的初始化参数 <context-param>标签定义的参数为web应用的初始化参数 (会自动封装到ServletContext中)

        (ServletContext出生:web服务器启动(为每个web应用配一个ServletContext),死亡:web服务器关闭,或者web应用被删除) 

        3.实现Servlet的转发(与重定向有所区别:Servlet的转发:别人找我借钱,我帮他向别人借 重定向:别人找我借钱,我让他找别人借)

        Servlet不适合用作数据的输出(网页要弄美观很麻烦),所以需要转给JSP(JSP可以看作一种特殊的Html,里面可以写java代码的Html)(用来专门显示数据) 

        4.ServletContext读取web应用中的资源文件

        5.web应用中的普通Java程序如何读取资源文件 (servlet文件通过ServletContext,非servlet文件通过类装载器)

  • 相关阅读:
    autocomplete自动完成搜索提示仿google提示效果
    实现子元素相对于父元素左右居中
    javascript 事件知识集锦
    让 IE9 以下的浏览器支持 Media Queries
    「2013124」Cadence ic5141 installation on CentOS 5.5 x86_64 (limited to personal use)
    「2013420」SciPy, Numerical Python, matplotlib, Enthought Canopy Express
    「2013324」ClipSync, Youdao Note, GNote
    「2013124」XDMCP Configuration for Remote Access to Linux Desktop
    「2013115」Pomodoro, Convert Multiple CD ISO to One DVD ISO HowTo.
    「2013123」CentOS 5.5 x86_64 Installation and Configuration (for Univ. Labs)
  • 原文地址:https://www.cnblogs.com/xuzekun/p/7356717.html
Copyright © 2020-2023  润新知