11_Servlet基础知识
【概念】
Servlet通常被称为服务端小程序,是运行在服务端的程序,用于处理及相应客户端的请求。
Servlet是用java语言开发网页动态资源的技术。
【特点】
1.Servlet是个特殊的Java类,这个Java类必须继承HttpServlet类。
2.一个普通的java类实现了Servlet接口,也叫作Servlet程序。通常继承HttpServlet是为了创建一个基于Http协议的Servlet。
3.Servlet程序要部署到服务器(如Tomcat)运行。
【Servlet提供的响应客户端请求的方法】
1. doGet() 用于响应客户端的GET请求。
2. doPost() 用于响应客户端的POST请求。
3. doPut() 用于响应客户端的PUT请求。
4. doDelete() 用于响应客户端的DELETE请求
注:客户端的请求通常只有GET和POST两种,Servlet为了响应这两种请求,必须重写doGet()和doPost()方法。
【Servlet开发1(Servlet3.0之前)】
[ 第1步 ]
编写java类,继承HttpServlet 。重写doGet()和doPost()方法。
- package com.Higgin.servlet;
- import java.io.IOException;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class FirstServlet extends HttpServlet {
- private static final long serialVersionUID = 1L;
- public FirstServlet() {
- super();
- }
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- System.out.println("doGet方法执行---");
- }
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- System.out.println("doPost方法执行---");
- }
- }
[ 第2步 ](没有使用IDE的情况下)
把Servlet的class字节码拷贝到WEB-INF/classes目录下
[ 第3步 ]
在web.xml中配置对应的servlet
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">- <display-name>HelloServlet</display-name>
- <servlet>
- <servlet-name>FirstServlet</servlet-name>
- <servlet-class>com.Higgin.servlet.FirstServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>FirstServlet</servlet-name>
- <url-pattern>/test</url-pattern>
- </servlet-mapping>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
【运行结果】
【对于web.xml中Servlet配置的注释】
1.由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把Servlet程序映射到一个URL地址上,这个工作是在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成,在servlet3.0之后,可以使用@WebServlet("....")代替。
2.<servlet>元素用于注册Servlet,它包含两个主要的子元素:<servlet-name>和<servlet-class>,分别用于设置Servlet的注册名称和Servlet的完整类名。
3.一个<servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问的路径,它包含有两个子元素:<servlet-name>和<url-pattern>,分别用于指定Servlet的注册名称和Servlet的对外访问名称。
- <!-- 配置一个Servlet -->
- <servlet>
- <!-- Servlet内部名称,自定义 -->
- <servlet-name>FirstServlet</servlet-name>
- <!-- Servlet的 类全名 -->
- <servlet-class>com.Higgin.servlet.FirstServlet</servlet-class>
- </servlet>
- <!-- Servlet的 映射配置 -->
- <servlet-mapping>
- <!-- Servlet的内部名称,一定要和上面的保持一致 -->
- <servlet-name>FirstServlet</servlet-name>
- <!-- Servlet的映射路径(访问Servlet的名称) -->
- <url-pattern>/test</url-pattern>
- </servlet-mapping>
【Servlet开发2:利用Servlet3.0新特性@WebServlet注释】
最大不同:直接在对应的Servlet类名(如上面的FirstServlet类)上加上注释@WebServlet("/test"),无需在web.xml中进行配置就可以实现相同的效果。
- package com.Higgin.servlet;
- import java.io.IOException;
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- /**
- * Servlet implementation class FirstServlet
- */
- @WebServlet("/test") //servlet3.0新特性
- public class FirstServlet extends HttpServlet {
- private static final long serialVersionUID = 1L;
- public FirstServlet() {
- super();
- }
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- System.out.println("doGet方法执行---");
- }
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- System.out.println("doPost方法执行---");
- }
- }
【Servlet的执行过程】
前提:TomCat服务器启动,首先加载webapps中的每个web应用的web.xml配置文件。
1.在浏览器输入对应的url, http://localhost:8080/HelloServlet/test
2.截取到URL的字符串,得到需要访问的资源名称: /test
3.在HelloServlet网站下的web.xml信息中搜索是否存在 /test匹配的 url-pattern。
4.匹配到对应的url-pattern之后,取出当前映射信息中的servlet-name的名称,然后在web.xml信息中搜索是否存在一个相同servlet-name名称的servlet配置信息。
5.找到对应的servlet配置信息之后,取出当前配置信息的servlet-class的内容,即字符串 com.Higgin.servlet.FirstServlet
6.创建FirstServlet对象,然后调用FirstServlet类中的方法。
7.Servlet就把内容返回给浏览器用户。
【关于http://localhost:8080/HelloServlet/test】
浏览器中输入:http://localhost:8080/HelloServlet/test
http :// http协议(1.本地hosts文件查找域名和ip映射 2.找不到,联网到DNS服务器找有名和ip映射器 )
8080 端口 (TomCat:8080)
/HelloServlet 站点下的web应用名称
/test 资源名称,截取到/test 字符串
1.在HelloServlet应用下的web.xml文件中查找是否存在匹配的url-pattern
2.使用Servlet的内部名称在web.xml文件中查找是否存在相同名称的Servlet配置
3.得到对应的servlet-class内容,字符串 com.Higgin.servlet.FirstServlet
通过反射构造HelloServlet对象,调用方法(doGet///),将内容返回输出到浏览器,看到效果。
【关于Servlet接口的实现类HttpServlet】
Servlet接口定义了两个默认实现类:HttpServlet和GenericServlet。
* HttpServlet指能够处理HTTP请求的Servlet,它在原有的Servlet接口上添加了一些与HTTP协议处理相关的方法,它比Servlet接口的功能更为强大。因此在编写Servlet时,通常应该继承这个HttpServlet类,避免直接去实现Servlet接口。
* HttpServlet在实现Servlet接口时,覆写了service方法,该方法体内的代码会自动判断用户的请求方式,如果为GET请求,则调用HttpServlet的doGet方法;如果为POST请求,则调用doPost()方法。因此,我们在编写Servlet时,通常只需要编写doGet()或doPost()方法,而不需要去复写service方法。
11_Servlet基础知识的更多相关文章
- .NET面试题系列[1] - .NET框架基础知识(1)
很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...
- RabbitMQ基础知识
RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- selenium自动化基础知识
什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...
- [SQL] SQL 基础知识梳理(一)- 数据库与 SQL
SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...
- [SQL] SQL 基础知识梳理(二) - 查询基础
SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...
- [SQL] SQL 基础知识梳理(三) - 聚合和排序
SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...
- [SQL] SQL 基础知识梳理(四) - 数据更新
SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...
- [SQL] SQL 基础知识梳理(五) - 复杂查询
SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...
随机推荐
- SQL连接查询的方式
网上copy,以后来完整 连接条件可在FROM或WHERE子句中指定,建议在FROM子句中指定连接条件.WHERE和HAVING子句也可以包含搜索条件,以进一步筛选连接条件所选的行. ...
- 一个通用数据库访问类(C#,SqlClient)
本文转自:http://www.7139.com/jsxy/cxsj/c/200607/114291.html使用ADO.NET时,每次数据库操作都要设置connection属性.建立connecti ...
- SqlLite ---.net连接数据库
初识SqlLite ---.net连接数据库 SqlLite以小巧和嵌入式闻名,以前只是听说,现在终于忍不住要尝试下. 先下载ADO.NET2.0 Provider for SQLite,下载完后 ...
- java异步任务处理
1.场景 最近做项目的时候遇到了一个小问题:从前台提交到服务端A,A调用服务端B处理超时,原因是前端一次请求往db插1万数据,插完之后会去清理缓存.发送消息. 服务端的有三个操作 a.插DB b.清理 ...
- JS幻灯片,循环播放,滚动导航,jQuery平滑旋转幻灯片
最近在帮别人改一些东西,在网上找了好久,但是没有相同的,自己改了下,拿出来分享下: 先展示下效果把: index.html 页面展示代码 <!DOCTYPE html PUBLIC " ...
- Mac Pro更换SSD后,在Win7下启用ACHI的方法AHCI
在Mac Pro下更换SSD后,如果安装Win7,要将SSD改为AHCI模式是非常麻烦的.本文介绍如何将Mac的Win7下的SSD改为AHCI方式驱动,及几种常见问题的处理. 一.当Lion与Win7 ...
- [Javascript] Webpack Loaders, Source Maps, and ES6
Using ES6 To use ES6, we need loader. Modify webpack.config.js file: module.exports = { entry: './in ...
- 文件和目录之access函数
本篇博文内容摘自<UNIX环境高级编程>(第二版),仅作个人学习记录所用.关于本书可参考:http://www.apuebook.com/. 当用open函数打开一个文件时,内核以进程的有 ...
- oracle11g密码大小写敏感问题
密码大小写敏感是Oracle 11g数据库默认的一个新特性,数据库配置助手(DBCA)在创建数据库期间允许你将这个设置返回到11g以前的功能. SEC_CASE_SENSITIVE_LOGON初始化参 ...
- 计算机程序和C++语言简介
C++程序设计 第一章 计算机程序和C++语言简介 1.计算机是一台能够存储并处理数据的电子设备,包含硬件和软件两部分. 2.计算机硬件由: 1)中央处理单元(Central Processing U ...