JavaWeb学习总结-04 Servlet 学习和使用
一 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="提交">
<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="提交">
<input type="reset" value="重置" >
</form>
</body>
</html>
访问url地址 http://127.0.0.1:8080/javaWeb1/index2.jsp
参考资料:
JavaWeb学习总结-04 Servlet 学习和使用的更多相关文章
- JavaWeb学习总结-05 Servlet 学习和使用(01)
一 Servlet的原理 1 Servlet 的创建 当Servlet容器启动web应用时,需要立即加载Servlet时: Servlet容器启动web应用时,将按照指定的顺序初始化Servlet,需 ...
- JavaWeb 后端 <二> 之 Servlet 学习笔记
一.Servlet概述 1.什么是Servlet Servlet是一个运行在服务器端的Java小程序,通过HTTP协议用于接收来自客户端请求,并发出响应. 2.Servlet中的方法 public v ...
- Javaweb学习(三):Servlet程序
好了,既然开发环境已经配置好了.那么我们首先要搞定得便是servlet了,至于为什么不先去研究jsp,这是因为jsp与servlet本就是一体两面,jsp其本身经过编译.载入.转化等步骤最终会成为se ...
- Servlet 学习笔记
Servlet 运行在服务器上的 java 类: Servlet 容器为 javaWeb 应用提供运行时环境,负责管理 servlet 和 jsp 生命周期,以及管理他们的共享数据. 现在我们知道了 ...
- Servlet学习笔记(三)
目录 Servlet学习笔记(三) 一.HTTP协议 1.请求:客户端发送欸服务器端的数据 2.响应:服务器端发送给客户端的数据 3.响应状态码 二.Response对象 1.Response设置响应 ...
- JSP&Servlet学习手册
JSP&Servlet学习手册 沙琪玛 书 目录 JSP 指令... 3 书写方式... 3 指令列表... 3 JSP 内置对象... 3 内置对象特点... 3 常用内置对象... 3 o ...
- Angularjs学习---ubuntu12.04中karma安装配置
Angularjs学习---ubuntu12.04中karma安装配置中常见的问题总结 karma启动时出现了很多问题: 1.安装karma前提条件 安装karma首先要安装nodejs,npm然 ...
- 初学Java Web(4)——Servlet学习总结
经过一段时间的学习,对于Servlet有了新的不一样的见解,在这里做一下总结,将近来学习到的知识总结一下. Servlet 的请求流程 浏览器发出请求:http://localhost:80/xxx1 ...
- java之servlet学习基础(一)
这一阵子在学java三大框架.却在学习过程中发现前面的知识已经忘记了.所以决定写一篇博客来总结回顾之前的学习. 1.Servlet是什么? servlet是一个运行在服务器端的小应用程序.通过HTTP ...
随机推荐
- 通向高可扩展性之路(推特篇) ---- 一个推特用来支撑1亿5千万活跃用户、30万QPS、22MB每秒Firehose、以及5秒内推送信息的架构
原文链接:http://highscalability.com/blog/2013/7/8/the-architecture-twitter-uses-to-deal-with-150m-active ...
- 踩到一个Emit的坑,留个纪念
重现代码: var dmFoo = new DynamicMethod("Foo", typeof(void), Type.EmptyTypes); var ilFoo = dmF ...
- SDRAM和dcfifo的联合
SDRAM和dcfifo的联合 设计原理 在"SDRAM突发读写页"实验中,留下了一个问题,就是从SDRAM读取数据的速度要与SDRAM的驱动时钟同步,这就造成了读出的数据的速率过 ...
- AJAX——核心XMLHttpRequest对象
AJAX大家已经都知道了,是为了实现异步通讯,提高用户体验度,而将很多旧知识(XML,DOM,JavaScript,HTML,Jquery,Css……)重新融合的一个新的知识框架.而,XMLHttpR ...
- [转]史上最全最强SpringMVC详细示例实战教程
原文:http://www.cnblogs.com/sunniest/p/4555801.html?utm_source=tuicool&utm_medium=referral SpringM ...
- android和httpClient
一.说起来都是泪 各大组织不同步,可是我想用别人的库. 二.谷歌和阿帕奇的爱恨情仇 初,谷歌安卓新出,库中自带HttpClient 4.0测试预览版.为与安卓保持API同步,HTTPClient不敢大 ...
- 虚拟机VirtualBox 5.1.0|VBOX
Oracle VM VirtualBox是一款免费.开源的虚拟机软件,现属于Oracle旗下产品.可以安装Windows.Linux.IBM OS/2.Solaris.BSD等操作系统,具有远端桌面协 ...
- 作业成绩 final 20161124-1201 09:00
final阶段,20161124-1201 09:00. 申诉截止时间 20161206 12:00,微信联系杨贵福. 凡描述需求或BUG时,应给出以下4项: 你期待看到的现象如何 你实际看到的现象 ...
- cxf和jaxws的对比
和jaxws相比,服务器发布方式和客户端访问方式不同 以下是cxf的代码: 服务器发布方式: package service; import javax.xml.ws.Endpoint; import ...
- Java对象的访问
对象访问在Java语言中无处不在,即使最简单的访问也涉及Java栈.Java堆.方法区这三个重要的内存区域中. 例:Object obj = new Object(); Object obj ...