`

day_03 servlet生命周期+servlet编程接口

阅读更多

星期四, 十二月 17, 2015  20:53:26

 

一、servlet生命周期

 

    1.生命全过程

         加载 ClassLoader

         实例化 new

         初始化 init(ServletConfig)

         处理请求 service doGet doPost

         退出服务 destroy()

  2.只有一个对象

   3.API中的过程

      init()//只执行一次,第一次初始化的时候

     service()

     destroy()//webapp退出的时候

 

二、代码案例

 

servlet类

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class ServletLifeCycle extends HttpServlet {

	/**
	 * Constructor of the object.
	 */
	public ServletLifeCycle() {
		System.out.println("construct");
	}
	
	/**
	 * Initialization of the servlet. <br>
	 *
	 * @throws ServletException if an error occurs
	 */
	public void init() throws ServletException {
		System.out.println("init");
	}

	/**
	 * Destruction of the servlet. <br>
	 */
	public void destroy() {
		System.out.print("destroy");
	}

	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
			System.out.println("doGet");
	}
}

 

 

web.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>HelloServlet</servlet-class>
  </servlet>
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>ServletLifeCycle</servlet-name>
    <servlet-class>ServletLifeCycle</servlet-class>
  </servlet>


  <servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/httpServlet</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ServletLifeCycle</servlet-name>
    <url-pattern>/ServletLifeCycle</url-pattern>
  </servlet-mapping>
</web-app>

 访问url

   http://localhost:8080/TestServlet01/ServletLifeCycle

 

运行结果:

信息: Server startup in 866 ms

construct

init

doGet

doGet

2015-12-17 21:26:10 org.apache.coyote.http11.Http11Protocol pause

信息: Pausing Coyote HTTP/1.1 on http-8080

2015-12-17 21:26:11 org.apache.catalina.core.StandardService stop

信息: Stopping service Catalina

destroy2015-12-17 21:26:11 org.apache.catalina.core.ApplicationContext log

信息: SessionListener: contextDestroyed()

2015-12-17 21:26:11 org.apache.catalina.core.ApplicationContext log

信息: ContextListener: contextDestroyed()

 

从结果可以看出,先调用construct,然后init且只初始化一次

doGet..doGet可多次调用,最后在tomcat退出的时候,才执行destroy

 

 

二_servlet编程接口

 

1.GenericServlet是所有Servlet的鼻祖

2.用户HTTP的Servlet编程都通过继承。

   javax.servlet.http.HttpServlet 实现

3.请求处理方法:

   分别对应http协议的7种请求

    3.1 doGet 响应Get请求,常用

    3.2 doPost 响应Post请求,常用

    3.3 doPut 用户http1.1协议

    3.4 doDelete 用户http1.1协议

    3.5 doHead 仅响应Get请求头部

    3.6 doOptions 用户http1.1协议

    3.7 doTrace 用于http1.1协议

4.实例个数

   在非分布式的情况下,通常一个Servlet在服务器中一个实例

 

 

 

实现3个参数通过doGet()和doPost()传递

代码案例:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>MyHtml.html</title>
  </head>
  
  <body>
    <form method="post" action = "servlet/ThreeParams">
    <table>
    	<tr>
    		<tb width="93">param1</tb>
    		<tb width="94">
    			<input name="param1" type="text" id="param1"/>
    		</tb>
    	</tr>
    	<tr>
    		<tb width="93">param2</tb>
    		<tb width="94">
    			<input name="param2" type="text" id="param2"/>
    		</tb>
    	</tr>
    	<tr>
    		<tb width="93">param3</tb>
    		<tb width="94">
    			<input name="param3" type="text" id="param3"/>
    		</tb>
    	</tr>
    	<br/>
    	<tr>
    		<tb width="94">
    			<input  type="submit"/>
    		</tb>
    	</tr>
    </table>
   </form>
  </body>
</html>	

/TestServlet01/src/ThreeParams.java
servlet类
ThreeParams.java

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class ThreeParams extends HttpServlet {

	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		out.println(request.getParameter("param1"));
		out.println("<br/>");
		out.println(request.getParameter("param2"));
		out.println("<br/>");
		out.println(request.getParameter("param3"));
	}

	/**
	 * The doPost method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to post.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.print("doPost");
		doGet(request,response);
	}

}

 运行结果:

http://localhost:8080/TestServlet01/MyHtml.html

提交后post

http://localhost:8080/TestServlet01/servlet/ThreeParams

 

console展示

doPost

 

星期四, 十二月 17, 2015  22:36:55

 

今天了解了servlet的生命周期

和 使用页面进行传参给servlet

 

星期日, 十二月 20, 2015 19:57:11

 

 

07_通过request读取所有参数

 

7.1代码案例:

http://localhost:8080/TestServlet01/MyHtml.html

 

MyHtml.html

<html>
    <head>
        <title>A sample show parameters</title>
    </head>
    <body>A sample show parameters
    
        <form method="post" action="servlet/ShowParameters">
            Item Number:<input type="text" name="itemNum"><br>
            Quantity:<input type="text" name="quantity"><br>
            Price each:<input type="text" name="price" value="$"><br>
            First Name:<input type="text" name="firstName"><br>
            Last Name:<input type="text" name="lastName"><br>
            Middle Initial:<input type="text" name="initial"><br>
            
            Shipping Address:<textarea name="address" row="3" cols="40"></textarea><br>
            Credit Card:<br>
            <!--单框示例-->
            &nbsp;&nbsp;<input type="radio" name="cardType" value="Visa">Visa<br>
            &nbsp;&nbsp;<input type="radio" name="cardType" value="Master Card">Master Card<br>
            &nbsp;&nbsp;<input type="radio" name="cardType" value="Amex">Amex<br>
            &nbsp;&nbsp;<input type="radio" name="cardType" value="Discover">Discover<br>
            &nbsp;&nbsp;<input type="radio" name="cardType" value="Java SmartCard">Java SmartCard<br>
            <!--密码输入框-->
            Credit Card password:<input type="password" name="cardNum"><br>
            Repeat Credit Card password:<input type="password" name="cardNum"><br><br>
            <center><input type="submit" value="Submit Order"></center>
        </form>
    </body>
</html> 

 

ShowParameters.java

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ShowParameters extends HttpServlet { 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=gb2312");
        PrintWriter out = response.getWriter();
        
        String title = "Reading All Request Parameters";
        out.println("init");
        out.println("<html><head><title>读取所有参数</title></head>"
                + title
                + "\n" + "<table border=1 align=center>\n"
                + "<TH>Parameter Name<TH>Parameter Value(s)");
        
        // Returns an Enumeration of String objects containing the names of the parameters contained in this request. 
        Enumeration paramNames = request.getParameterNames();
        // Tests if this enumeration contains more elements. 
        while(paramNames.hasMoreElements()) {
            // Returns the next element of this enumeration if this enumeration object has at least one more element to provide. 
            String paraName = (String)paramNames.nextElement();
            out.println("<tr><td>" + paraName + "\n<td>");
            // Returns an array of String objects containing all of the values the given request parameter has, or null if the parameter does not exist. 
            // 注意参数paraName(变量)不能加双引号,否则就是找参数名叫paraName的对应值了。
            String[] paramValues = request.getParameterValues(paraName);
            // 这个参数只有一个值
            if(paramValues.length == 1) {
                String paramValue = paramValues[0];
                if(paramValue.length() == 0) {
                    out.println("<I>no value</I>");
                } else {
                    out.println(paramValue);
                }
            }else {
                // 这个参数有好几条值
                out.println("<UL>");
                for(int i = 0; i < paramValues.length; i++) {
                    out.println("<LI>" + paramValues[i]);
                }
                out.println("</UL>");
            }
        }
        out.println("</table>\n<body></html>");
    } 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("doPost");
        doGet(request,response);
    } 
} 

 web.xml

 

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>HelloServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>ServletLifeCycle</servlet-name>
    <servlet-class>ServletLifeCycle</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>ThreeParams</servlet-name>
    <servlet-class>ThreeParams</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>ShowParameters</servlet-name>
    <servlet-class>ShowParameters</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/httpServlet</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ServletLifeCycle</servlet-name>
    <url-pattern>/ServletLifeCycle</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ThreeParams</servlet-name>
    <url-pattern>/ThreeParams</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ShowParameters</servlet-name>
    <url-pattern>/servlet/ShowParameters</url-pattern>
  </servlet-mapping>
</web-app>

 十二月 20, 2015 19:59:17

1
2
分享到:
评论

相关推荐

    BOOK(Servlet+EL+JSTL技术)

    Servlet生命周期包括加载、初始化、服务、销毁四个阶段。在Servlet中,`doGet`和`doPost`方法用于处理HTTP GET和POST请求。Servlet可以通过`HttpServletRequest`获取请求参数,通过`HttpServletResponse`设置响应...

    day33_servlet_jsp.zip

    二、Servlet生命周期 Servlet的生命周期包括加载、初始化、服务、销毁四个阶段: 1. 加载:当Web应用被部署时,容器(如Tomcat)会加载Servlet类。 2. 初始化:Servlet实例化后,调用`init()`方法进行初始化,通常...

    day14_servlet&http&request_java_httprequestservlet_milejfl_

    Servlet生命周期包括初始化、服务、销毁三个阶段。 - **GenericServlet类**:它是Servlet接口的一个抽象类,提供了基本的Servlet功能实现,如多线程处理请求和生命周期管理。 - **HttpServlet类**:进一步扩展了...

    Day09_http协议 & servlet

    Servlet容器负责管理Servlet实例的生命周期,并提供多线程支持,允许同时处理多个请求。 Servlet提供了一种标准的方法来扩展Web服务器的功能。它们通常用于管理用户会话、访问数据库、动态内容生成等。Servlet可以...

    servlet 心的练习

    二、Servlet生命周期 Servlet的生命周期包括加载、初始化、服务、销毁四个阶段: 1. 加载:当服务器启动或第一次接收到对Servlet的请求时,会加载Servlet类并创建一个Servlet实例。 2. 初始化:加载后,Servlet实例...

    day04-Tomcat&Servlet入门-讲义.zip

    5. **Servlet生命周期**:包括加载、初始化、服务、销毁四个阶段,以及如何通过`init()`、`service()`、`destroy()`方法进行操作。 6. **Servlet API**:`HttpServletRequest`和`HttpServletResponse`接口,它们...

    day04-Tomcat&Servlet入门-资料.zip

    这个标签表明内容将涵盖这两者的基础知识,如安装配置Tomcat、理解Servlet生命周期、编写Servlet代码等。 【压缩包子文件的文件名称列表】 由于列表只有一个条目“资料”,没有具体的子文件名,我们无法确定具体...

    达内教学课件SERVLET

    1. Servlet生命周期:Servlet的生命周期包括加载、初始化、服务、销毁四个阶段。每个阶段都有相应的回调方法,如`init()`、`service()`、`destroy()`。 2. Servlet配置:在`web.xml`中通过`&lt;servlet&gt;`和`&lt;servlet-...

    springmvc_day01_start.zip

    总结起来,这个入门实例将引导你完成SpringMVC应用的生命周期,从环境准备到配置,再到编写控制器和视图,最后实现简单的交互。这个过程中,你将了解到SpringMVC如何通过注解驱动,简化了Web开发的复杂性,使得...

    day04-Tomcat&Servlet入门-代码.zip

    1. **生命周期**:Servlet经历初始化、服务、销毁三个阶段,通常由服务器管理。 2. **Servlet API**:包括`javax.servlet`和`javax.servlet.http`包中的类和接口,如`Servlet`, `GenericServlet`, `HttpServlet`, `...

    day08-HTTP&Tomcat&Servlet.zip

    在Tomcat这样的Servlet容器中,Servlet生命周期包括加载、初始化、服务、销毁四个阶段。通过Servlet,开发者可以实现动态网页、接收表单数据、实现会话跟踪等功能。 当我们谈论"day08-HTTP&Tomcat&Servlet"时,可能...

    JDBC+Servlet+Mysql 学生表的增删改查

    Servlet生命周期包括加载、初始化、服务、销毁四个阶段。在处理学生表的CRUD操作时,Servlet接收客户端(如网页)的请求,通过JDBC与数据库交互,然后将结果封装成HTTP响应返回给客户端。Servlet的优势在于其可扩展...

    Java web中servlet学习笔记 核心

    4. **Servlet生命周期** - 实例化:首次请求Servlet时创建实例(默认情况下)。 - 初始化:创建实例后调用`init()`方法。 - 服务:在应用程序运行期间,Servlet持续处理请求。 - 销毁:当应用程序卸载或服务器...

    servlet基础

    二、Servlet生命周期 Servlet的生命周期包括三个主要阶段:加载与实例化、初始化和服务、销毁。 1. 加载与实例化:当Web容器(如Tomcat)首次接收到对Servlet的请求时,它会加载Servlet类并创建一个Servlet实例。 ...

    servlet定时器

    在Web应用中,为了确保定时任务能够在服务器启动时初始化,并且在服务器关闭时能够正确地取消这些任务,我们通常将定时任务的管理与Servlet容器的生命周期事件绑定起来。 ### 实现Servlet定时器 要实现一个Servlet...

    day11_am_all.zip_Jsp/Servlet_Java_

    【标题】"day11_am_all.zip"是一个包含与Jsp/Servlet和Java相关的...它可能涵盖的内容包括但不限于:JSP语法、Servlet生命周期、AJAX的基本用法、异步数据交互的实现、以及如何在微软环境下部署和运行Java Web应用。

    传智播客崔希凡JavaWeb-day01-基础加强-全部资料

    这部分是实践操作的重要组成部分,通过亲手编写和运行代码,学习者可以深入理解Servlet的生命周期、JSP内置对象的运用,以及如何使用MVC框架进行开发。 总的来说,这套资料为JavaWeb初学者提供了一个全面的学习起点...

    servlet资料

    Servlet生命周期包括加载、初始化、服务、销毁四个阶段,它们在服务器启动、客户端请求以及服务器关闭时相应触发。 在“servlet_day07_all”这个压缩包中,可能包含了关于Servlet学习的各种资源,例如代码示例、...

    JavaWeb视频教程-day09

    Servlet生命周期包括加载、初始化、服务、销毁四个阶段。在初始化阶段,Servlet容器会调用Servlet的init()方法;服务阶段,每次请求都会调用service()方法,该方法会根据HTTP方法分发到doGet或doPost;最后,当...

Global site tag (gtag.js) - Google Analytics