• Servlet入门


    http://www.ibm.com/developerworks/cn/java/j-lo-servlet/
    Servlet
    是一门用于开发动态Web资源的技术
    ServletAPI 基于Request-Response模型,Http也是基于Request-Response模型的,所以Serlvet可以用用来开发基于HTTP web应用程序。
    在JavaEE的API中有个Servlet接口,开发一个动态web资源即开发一个java程序向浏览器输出数据,需要完成两个步骤
    1,编写一个java类,实现servlet接口
    2,将开发好的java类部署到web服务器中
    在eclipse中的演示
    1,创建web project
    2,编写class继承HttpServlet//HttpServlet类是Servlet接口的一个子类的子类,是抽象类,是专用于Http协议的Servlet技术
    3,在web.xml中配置Servlet程序的虚拟访问路径,让用户在浏览器上可以通过该路径访问管理动态资源的Serlvet程序
    ,在web.xml中添加<servlet>标签,为其命名<servlet-name>,将程序的全类名写入<servlet-class>标签中,最后再添加<servlet-mapping>为其设置虚拟路径

    <servlet>//注册servlet程序
      <servlet-name>HelloServlet</servlet-name>
      <servlet-class>HelloServlet</servlet-class>
      <load-on-startup>1</load-on-startup>//这个标签来确定servlet服务时是否是在服务器启动时加载,数字为服务器加载优先级。常应用于服务器启动时加载一些框架。
    </servlet>
    <servlet-mapping>//注册程序路径
      <servlet-name>HelloServlet</servlet-name>//与上面注册的servlet名称要对应
      <url-pattern>/hello</url-pattern>//访问路径/开头
    </servlet-mapping>


    4,在class中覆盖doGet和doPost方法

    public class HelloServlet extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // TODO Auto-generated method stub
    System.out.println("get请求。。。");
    resp.setContentType("text/html;charset=utf-8");//设置文件类型以及编码表
    
    PrintWriter out = resp.getWriter();// 获得像浏览器输出的流
    out.println("<!DOCTYPE html>");
    out.println("<html>");
    out.println("<head>");
    out.println("<meta charset="UTF-8">");
    out.println("<title>Insert title here</title>");
    out.println("</head>");
    out.println("<body>");
    out.println("<h1>Hello 看看请求是什么</h1>");
    out.println("</body>");
    out.println("</html>");
    
    }

    Servlet动态的去生成一个网页html文件过程
    用户在客户端发起url请求访问servlet虚拟路径,执行servlet程序,如果是get方式提交会执行doGet方法,如果是post方式请求会执行doPost方法,将html文件通过流动态的打印到浏览器上,浏览器对文件进行解析显示。

    Servlet接口生命周期
    主要表现在下面的三个方法上。
    init(ServletConfig config)初始化
    service(ServletRequest req, ServletResponse res)提供服务方法
    destroy()销毁
    在web服务器中提供了servlet服务的容器,类似对外暴露的接口用来接收servlet服务,当客户端访问服务器时,服务器在servlet容器中构造了一个servlet实例服务,并调用了init初始化方法和service服务方法,之后只要没有调用destory()方法,容器中一直存在serlvet服务的实例,接下来的访问都是只调用service方法,当WEB应用被终止,或Servlet容器终止运行,或Servlet容器重新装载Servlet新实例时,Servlet容器会先调用Servlet的destroy()方法,在destroy()方法中可以释放掉Servlet所占用的资源。

    从以上可以看出,Servlet是一个供其他java程序(Servlet引擎)调用的java类,他不能独立运行,他的运行完全Servlet引擎控制,针对客户端的多次Servlet请求通常情况下,服务器只会创建一个Servlet实例对象,也会是说Servlet一旦创建,他就会驻留在内存中,为后续的其他请求服务,直至web容器退出Servlet实例对象才会销毁,在Servlet的整个生命周期内,Servlet的init方法只被调用一次,而对一个Servlet的每次请求都导致Servlet引擎调用一次Servlet的service方法,对于每次访问请求,Servlet引擎都会创建一个新的Http创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象(这些是在服务器中完成的,也就是说由服务器提供其实现方法)然后将这两个对象作为参数传递给他调用的servoce方法,service方法再根据请求方式分别调用其他方法,此行为是从HttpServlet中继承过来的所以一般也不需要复写。另外对于init方法如果需要复写的话只需要复写无参的init方法即可,重载的有参init方法内部都会调用init()方法,且doget与dopost方法也可以互相调用简化开发,但是注意死循环。

    Servlet路径映射
    客户端是通过路径访问Servlet类的,Servlet的路径映射是通过web.xml中的<url pattern>标签元素完成的,一个Servlet是可以配置多个访问路径
    URL配置格式三种
    1,完全路径匹配以/开始,/代表根目录
    2,目录匹配以/*结尾,目录下的所有路径都会访问
    3,扩展名匹配(不能以/开始,以*.开头)*.do表示以do为扩展名的路径都会访问
    当客户端存在多个访问路径同时访问时同一个Servlet时,优先级1》2》3。

    相对路径与绝对路径的区别,相对路径是相对于当前页面的路径,相当于在当前路径下+相对路径,而绝对路径就是从根目录开始的全路径。当页面form表单提交时,action属性设置访问路径时,可以设置为相对路径也可以设置为绝对路径,但是要注意相对路径下是否是服务器端所要访问资源的路径。

  • 相关阅读:
    通过strace 监控 fdatasync
    RAID 2.0
    AHCI vs NVMe
    NVMe 图解
    详解linux运维工程师入门级必备技能
    条带深度 队列深度 NCQ IOPS
    NVMe 与 AHCI
    IO负载高的来源定位 IO系列
    磁盘性能指标--IOPS 理论
    java程序员从笨鸟到菜鸟系列
  • 原文地址:https://www.cnblogs.com/ss561/p/4616759.html
Copyright © 2020-2023  润新知