JAVA遇见HTML——Servlet(1)

来源:互联网 发布:可以用淘宝贷的口子 编辑:程序博客网 时间:2024/06/05 04:00

servlet基础

  1. 什么是Servlet
  2. Tomcat容器等级
  3. 手工编写第一个Servlet
  4. 使用MyEclipse编写Servlet
  5. Servlet生命周期
  6. Servlet获取九大内置对象
  7. Servlet与表单
  8. Servlet路径跳转
  9. 阶段项目

什么是Servlet

Servlet是在服务器上运行的小程序。一个Servle就是一个Java类,并且可以通过“请求—响应”编程模型来访问的这个驻留在服务器内存里的Servlet程序。

Tomcat容器等级

Tomcat的容器分为四个等级,Servlet的容器管理Context容器,一个Context对应一个Web工程。
这里写图片描述


手工编写第一个Servlet

  1. 继承HttpServlet
  2. 重写doGet()或者doPost()方法
  3. 在web.xml中注册Servlet
//继承于HttpServletpublic class HelloServlet extends HttpServlet {    /**     * 自动序列化     */    private static final long serialVersionUID = 1L;    @Override    protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        System.out.println("处理Get()请求.....");        PrintWriter out =response.getWriter();        //指定输出的文件类型        response.setContentType("text/html;charset=utf-8");        out.println("<strong>Hello Servlet!</strong><br>");    }    @Override    protected void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        System.out.println("处理doPost()请求.....");        PrintWriter out =response.getWriter();        //指定输出的文件类型        response.setContentType("text/html;charset=utf-8");        out.println("<strong>Hello Servlet!</strong><br>");    }}
<servlet>    <servlet-name>HelloServlet</servlet-name>    <servlet-class>servlet.HelloServlet</servlet-class>  </servlet>  <servlet-mapping>    <servlet-name>HelloServlet</servlet-name>    <url-pattern>/servlet/HelloServlet</url-pattern>  </servlet-mapping>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>My JSP 'index.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--    <link rel="stylesheet" type="text/css" href="styles.css">    --></head><body>    <h1>第一个servlet小程序</h1>    <hr>    <a href="servlet/HelloServlet">get方式请求HelloServlet</a>    <form action="servlet/HelloServlet" method="post">        <input type="submit" value="doPost方式请求HelloServlet">    </form></body></html>

这里写图片描述

这里写图片描述


Servlet生命周期

servlet生命周期阶段包括初始化、加载、实例化、服务和销毁。

  1. 初始化阶段,调用init(ServletConfig)方法。
  2. 响应客户请求阶段,调用service()方法。由service()方法根据提交方式选择执行doGet()或者doPost()方法。
  3. 终止阶段,调用destroy()方法。

这里写图片描述

- 在下列时刻Servlet容器装载Servlet

  1. Servlet容器启动时自动装载某些Servlet,实现它只需要在Web.xml文件中的<servlet></servlet>之间添加如下代码:<load-on-startup>1</load-on-startup> 数字越小表示优先级越高。
  2. 在Servlet容器启动后,客户首次向Servlet发送请求。
  3. Servlet类文件被更新后,重新装载Servlet。

    Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期内,init()方法只被调用一次。

public class ServletTestOne extends HttpServlet {    /**     * 自动序列化     */    private static final long serialVersionUID = 1L;    /**     * Constructor of the object.     */    public ServletTestOne() {        System.out.println("执行了TestOne的构造方法....");    }    /**     * Destruction of the servlet. <br>     */    public void destroy() {        System.out.println("执行了TestOne的destroy方法....");    }    /**     * The doGet method of the servlet. <br>     */    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {         System.out.println("TestOne的执行了doGet().....");        response.setContentType("text/html;charset=utf-8");        PrintWriter out = response.getWriter();        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");        out.println("<HTML>");        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");        out.println("  <BODY>");        out.println("<h1>你好,我是ServletTestOne</h1>");        out.println("  </BODY>");        out.println("</HTML>");        out.flush();        out.close();    }    /**     * The doPost method of the servlet. <br>     */    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        System.out.println("TestOne的执行了doPost().....");        this.doPost(request, response);    }    /**     * Initialization of the servlet. <br>     *     * @throws ServletException if an error occurs     */    public void init() throws ServletException {        System.out.println("执行了TestOne的初始化方法.....");    }}

2.在Servlet容器启动后,客户首次向Servlet发送请求。

信息: Server startup in 549 ms执行了TestOne的构造方法....执行了TestOne的初始化方法.....TestOne的执行了doGet().....2017-6-5 18:09:59 org.apache.coyote.http11.Http11Protocol pause信息: Pausing Coyote HTTP/1.1 on http-80802017-6-5 18:10:00 org.apache.catalina.core.StandardService stop信息: Stopping service Catalina执行了TestOne的destroy方法....2017-6-5 18:10:01 org.apache.coyote.http11.Http11Protocol destroy信息: Stopping Coyote HTTP/1.1 on http-8080

1.Servlet容器启动时自动装载某些Servlet

<servlet>    <servlet-name>ServletTestOne</servlet-name>    <servlet-class>servlet.ServletTestOne</servlet-class>    <load-on-startup>2</load-on-startup>  </servlet>  <servlet>    <servlet-name>ServletTestTwo</servlet-name>    <servlet-class>servlet.ServletTestTwo</servlet-class>    <load-on-startup>1</load-on-startup>  </servlet>
信息: Starting Servlet Engine: Apache Tomcat/6.0.13执行了TestTwo的构造方法....执行了TestTwo的初始化方法.....执行了TestOne的构造方法....执行了TestOne的初始化方法.....

3.Servlet类文件被更新后,重新装载Servlet


Servlet获取九大内置对象

这里写图片描述