一 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. asp.net、 mvc session影响并发

    现象:在一个网站中,当访问一个处理比较耗时的页面(A页面),页面请求还没有返回时,此时再点击访问该网站的其他页面(B页面)会出现B页面很久都没有响应和返回,直到A页面输出返回数据时才开始处理B页面的请 ...

  2. 前端Mvvm QC 上传了测试版

    QC是一个前端MVVM框架,适合用来构建复杂的业务逻辑 项目地址:https://github.com/time-go/qc 技术支持QQ群:330603020 QC特点: 1.良好的浏览器兼容性(兼 ...

  3. HDInsight - 1,简介

    最近工作需要,要看HDInsight部分,这里要做笔记.自然是官网资料最权威,所以内容都从这里搬过来:https://azure.microsoft.com/en-us/documentation/a ...

  4. [BZOJ2429][HAOI2006]聪明的猴子(MST)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2429 分析:要让最大的最小,所以就是最小生成树上的啦,于是问题就变成了有多少个猴子&g ...

  5. 51-du 显示关于目录层次结构或文件磁盘使用情况的信息

    显示关于目录层次结构或文件磁盘使用情况的信息 du [options] [path-list] 参数 不带任何参数的du将显示工作目录及其子目录磁盘使用情况的信息,path-list指定要获取磁盘占用 ...

  6. LINUX 配置SVN

    1. 安装SVN  yum -y install subversion 2. 创建版本库目录  mkdir /root/svn/ svnserve -d -r /root/svn/ 3. 创建版本库 ...

  7. Mybatis——oracle 的模糊查询 和 日期处理

    第一种 1 <if test="AGTNAM !=null and AGTNAM !=''"> <![CDATA[and AGTNAM like concat(c ...

  8. 【CodeVS 1163】访问艺术馆

    http://codevs.cn/submission/2367697/ loli蜜汁(面向高一)树形dp是这道题的改编. 改编后的题目中每个展览厅的有多个不同的画,偷画的时间和画的价值也不同,求最大 ...

  9. 【BZOJ 4104】【Thu Summer Camp 2015】解密运算

    http://www.lydsy.com/JudgeOnline/problem.php?id=4104 网上题解满天飞,我也懒得写了 #include<cstdio> #include& ...

  10. 区间DP poj 2955

    求最多有几个括号可以匹配 #include<stdio.h> #include<string.h> #include<algorithm> using namesp ...