一 Servlet

1 Servlet概念

Servlet时运行在服务器端的Java程序。

Servlet的框架核心是 javax.servlet.Servlet 接口. 所有自定义的Servlet都必须实现这已接口,Servlet 的常用方法(生命周期的三个阶段):

  • init 方法:负责初始化 Servlet对象。
  • service 方法:负责响应客户的请求。
  • destory 方法:当Servlet对象退出生命周期时,负责释放占用的资源。

它们分别在Servlet的不同阶段被调用。

2 Servlet api

  javax.servlet.http.HttpServlet类的所有doXXX()方法可以开发者去实现它们,具体设计模式参考模板模式

  自定义的Servlet继承(extend)了HttpServlet类,通常不比实现service方法,因为HttpServlet已经实现了service方法,该方法声明如下:

  在HttpServlet的service方法中,首先从ServletRequest获取HTTP的请求信息,然后根据请求方式调用响应的请求方法。例如如果请求方式为GET,那么调用doGet方法,如果请求方式为POST,那么调用doPOST方法,其他请求方式以此类推。

3 Servlet的生命周期

Servlet的初始化阶段

1)在下列时刻Servlet容器加载Servlet

  • Servlet容器启动时自动加载Servlet。
  • 在Servlet容器启动后,客户首次向Servlet发送请求。
  • Servlet的类文件更新后,重新加载Servlet。

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

Servlet的响应客户阶段

  对于到达Servlet容器的客户请求,Servlet容器创建于这个请求的ServletRequest对象和ServletResponse对象,然后调用Servlet的service()方法,service方法从ServletRequest对象获得客户请求信息,处理改请求。并通过ServletResponse对象向客户返回响应结果。

Servlet的终止阶段

  当web应用被终止,或Servlet容器终止运行,或Servlet容器重新加载servlet实例时,Servlet容器会调用Servlet的destory() 方法,在destory()方法中可以释放Servlet所占用的资源。

  如何让Servlet容器动态加载servlet类文件,请参考JavaWeb学习总结-02 Tomcat 学习和使用 的热部署。

二 例子

1 第一个Servlet

新建java web项目 javaWeb1.

Servlet1.java

package com.test;

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 Servlet1 extends HttpServlet {

    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE html>  ");
        out.println("<HTML>");
        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println("  <BODY>");
        out.print("    This is ");
        out.print(this.getClass());
        out.println(", using the <h1>GET method</h1>");
        out.println("  </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE html>");
        out.println("<HTML>");
        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println("  <BODY>");
        out.print("    This is ");
        out.print(this.getClass());
        out.println(", using the POST method");
        out.println("  </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }

}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">
    <display-name>javaWeb1</display-name>

    <servlet>
        <servlet-name>Servlet1</servlet-name>
        <servlet-class>com.test.Servlet1</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>Servlet1</servlet-name>
        <url-pattern>/servlet/Servlet1</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

</web-app>

访问url地址 http://127.0.0.1:8080/javaWeb1/servlet/Servlet1,测试在 get,post下的返回值。

2 通过表单提交数据,servlet响应请求

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE  >
<html>
  <head>
    <base href="<%=basePath%>">

    <title>title1</title>
    <meta charset="utf-8">
  </head>

  <body>
  <form action="/javaWeb1/servlet/Servlet2">
      用户名: <input type=" /> <br>
      密码: <input type="password" name="password" /> <br>
   <input type="submit" value="提交">&nbsp;&nbsp;
   <input type="reset" value="重置" >
  </form>
  </body>
</html>

  表单默认不设置提交方法是按照 get方式提交的, method可以设置get,post方式提交数据。

get和post方式的区别?

1)处理方式不同

2)地址栏呈现的结果不同

  get方式是把传递的参数放在url里。

  post方式是放在请求头里,地址栏里不会带参数。

Servlet2.java

package com.test;

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 Servlet2 extends HttpServlet {

    private static final long serialVersionUID = 1L;

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.process(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.process(request, response);
    }

    public void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("username=" + username);
        System.out.println("password=" + password);

        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>qqqqqq</TITLE></HEAD>");
        out.println("  <BODY>");
        out.print("username=" + username + "<br>");
        out.print("password=" + password);
        out.println("  </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }

}

访问url地址 http://127.0.0.1:8080/javaWeb1/index.jsp

实验

response.setContentType("text/html;charset=utf-8");标签换为 response.setContentType("text/html ");并在输出中输出中文。

3 通过表单提交数据,jsp响应请求

getPara.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
            + path + "/";

    String username = request.getParameter("username");
    String password = request.getParameter("password");
    System.out.println("username=" + username);
    System.out.println("password=" + password);

%>

<!DOCTYPE HTML >
<html>
<head>
<base href="<%=basePath%>">

<title> </title>
</head>

<body>

username=<%= username %> <br>
password=<%= password %>

</body>
</html>

index2.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE  >
<html>
  <head>
    <base href="<%=basePath%>">

    <title>title1</title>
    <meta charset="utf-8">
  </head>

  <body>
  <form action="/javaWeb1/getPara.jsp" method="post"  >
      用户名: <input type=" /> <br>
      密码: <input type="password" name="password" /> <br>
   <input type="submit" value="提交">&nbsp;&nbsp;
   <input type="reset" value="重置" >
  </form>
  </body>
</html>

访问url地址 http://127.0.0.1:8080/javaWeb1/index2.jsp

参考资料:

j2ee在线文档工具

JavaWeb学习总结-04 Servlet 学习和使用的更多相关文章

  1. JavaWeb学习总结-05 Servlet 学习和使用(01)

    一 Servlet的原理 1 Servlet 的创建 当Servlet容器启动web应用时,需要立即加载Servlet时: Servlet容器启动web应用时,将按照指定的顺序初始化Servlet,需 ...

  2. JavaWeb 后端 <二> 之 Servlet 学习笔记

    一.Servlet概述 1.什么是Servlet Servlet是一个运行在服务器端的Java小程序,通过HTTP协议用于接收来自客户端请求,并发出响应. 2.Servlet中的方法 public v ...

  3. Javaweb学习(三):Servlet程序

    好了,既然开发环境已经配置好了.那么我们首先要搞定得便是servlet了,至于为什么不先去研究jsp,这是因为jsp与servlet本就是一体两面,jsp其本身经过编译.载入.转化等步骤最终会成为se ...

  4. Servlet 学习笔记

    Servlet 运行在服务器上的 java 类: Servlet 容器为 javaWeb 应用提供运行时环境,负责管理 servlet 和 jsp 生命周期,以及管理他们的共享数据. 现在我们知道了 ...

  5. Servlet学习笔记(三)

    目录 Servlet学习笔记(三) 一.HTTP协议 1.请求:客户端发送欸服务器端的数据 2.响应:服务器端发送给客户端的数据 3.响应状态码 二.Response对象 1.Response设置响应 ...

  6. JSP&Servlet学习手册

    JSP&Servlet学习手册 沙琪玛 书 目录 JSP 指令... 3 书写方式... 3 指令列表... 3 JSP 内置对象... 3 内置对象特点... 3 常用内置对象... 3 o ...

  7. Angularjs学习---ubuntu12.04中karma安装配置

    Angularjs学习---ubuntu12.04中karma安装配置中常见的问题总结   karma启动时出现了很多问题: 1.安装karma前提条件 安装karma首先要安装nodejs,npm然 ...

  8. 初学Java Web(4)——Servlet学习总结

    经过一段时间的学习,对于Servlet有了新的不一样的见解,在这里做一下总结,将近来学习到的知识总结一下. Servlet 的请求流程 浏览器发出请求:http://localhost:80/xxx1 ...

  9. java之servlet学习基础(一)

    这一阵子在学java三大框架.却在学习过程中发现前面的知识已经忘记了.所以决定写一篇博客来总结回顾之前的学习. 1.Servlet是什么? servlet是一个运行在服务器端的小应用程序.通过HTTP ...

随机推荐

  1. echarts .NET类库开源

    前言: 2012年从长沙跑到深圳,2016年又从深圳回到长沙,兜兜转转一圈,又回到了原点.4年在深圳就呆了一家公司,回长沙也是因为深圳公司无力为继,长沙股东老板挽留,想想自己年纪也不小了.就回来了,在 ...

  2. python2.7到python3代码转换脚本2to3的一些介绍

       你的位置: Home ‣ Dive Into Python 3 ‣ 难度等级: ♦♦♦♦♦   使用2to3将代码移植到Python 3 ❝ Life is pleasant. Death is ...

  3. Tomcat5通过cardadm.xml启动项目

    配置tomcat5\conf\Catalina\localhost下的   cardadm.xml  ,然后在MyEclipse中,直接启动Tomcat5,不需要部署项目

  4. __getattr__与__getattribute__

    class Foo: def __init__(self,x): self.x=x def __getattr__(self, item): print("执行的是我----->&qu ...

  5. androd Sdk manager配置

    Android Android SDK 配置步骤 启动 Android SDK Manager ,打开主界面,依次选择「Tools」.「Options...」,弹出『Android SDK Manag ...

  6. A+B

    Problem Description Calculate A + B. Input Each line will contain two integers A and B. Process to e ...

  7. [Google Guava]学习--新集合类型Multimap

    每个有经验的Java程序员都在某处实现过Map<K, List<V>>或Map<K, Set<V>>,并且要忍受这个结构的笨拙. 假如目前有个需求是给两 ...

  8. ubuntu完全卸载nginx

    删除nginx连带配置文件 sudo apt-get purge nginx # Removes everything. 卸载不再需要的nginx依赖程序 sudo apt-get autoremov ...

  9. IOS并发编程GCD

    iOS有三种多线程编程的技术 (一)NSThread  (二)Cocoa NSOperation (三)GCD(全称:Grand Central Dispatch) 这三种编程方式从上到下,抽象度层次 ...

  10. 【HDU 5833】Zhu and 772002(异或方程组高斯消元)

    300个最大质因数小于2000的数,选若干个它们的乘积为完全平方数有多少种方案. 合法方案的每个数的质因数的个数的奇偶值异或起来为0. 比如12=2^2*3,对应的奇偶值为01(2的个数是偶数为0,3 ...