Servlet一(web基础学习笔记二十)
一、Servlet简介
Servlet是sun公司提供的一门用于开发动态web资源的技术。
Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:
1、编写一个Java类,实现servlet接口。
2、把开发好的Java类部署到web服务器中。
按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet
二、ServletAPI

三、Servlet的方法

四、Servlet的运行
Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后:
①Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步。
②装载并创建该Servlet的一个实例对象。
③调用Servlet实例对象的init()方法。
④创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应 对象作为参数传递进去。
⑤WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。
五、Servlet生命周期

其中,加载和实例化,初始化,销毁都只进行一行
五、Serlvet部署
5.1、新建类Myservlet3继承HttpServlet
重写doGet,doPost,destroy(),init方法

package com.pb.servletdemo; import java.io.IOException; import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class Myservlet3 extends HttpServlet { @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("doGet方法被调用");
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("doPost方法被调用");
} /*@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.service(arg0, arg1);
}*/ @Override
public void destroy() {
System.out.println("Servlet销毁,destroy方法被调用");
} @Override
public void init(ServletConfig config) throws ServletException {
System.out.println("Servlet初始化,init方法被调用");
String initParam=config.getInitParameter("charSetContent");
System.out.println(initParam); } }
5.2、在web.xml中配置
<?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>servletdemo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- 首先是servlet标签 -->
<servlet>
<!-- 指定servlet的名字 可以与建立的servlet名字不一样,别名-->
<servlet-name>myserlvet</servlet-name>
<!-- servlet的类名 包名.类名的完整路径-->
<servlet-class>com.pb.servletdemo.Myservlet3</servlet-class>
<!-- 初始参数 -->
<init-param>
<!-- 设置字符集 -->
<param-name>charSetContent</param-name>
<!--值 -->
<param-value>utf-8</param-value>
</init-param>
</servlet>
<!-- 截获请求 servlet映射-->
<servlet-mapping>
<!-- 些servlet-name要与上方的servlet-name名字一样不然会报错 -->
<servlet-name>myserlvet</servlet-name>
<!-- 一个servlet可以 有多个url-pattern-->
<!-- 精确匹配 -->
<url-pattern>/myservlet3</url-pattern>
<!-- 加上虚拟目录 -->
<url-pattern>/demo/myservlet3</url-pattern>
<!-- 通配符来配置* -->
<url-pattern>/*</url-pattern>
<!-- 后缀名来配置 -->
<url-pattern>*.do</url-pattern>
</servlet-mapping> </web-app>
5.3、精确匹配

5.4、虚拟目录匹配--可以有多个虚拟目录

5.5、*通配符

5.6、后缀名来访问

六、url-pattern
6.1、url-pattern 概述
<url-pattern>元素,用于把一个Servlet 别名映射为一个URL 访问规则。在Servlet 的配置过程中,我们首先使用servlet 元素中的servlet-name、servlet-class 等子元素把一个Servlet 实现类映射为一个别名,然后再使用servlet-mapping 元素把这个别名映射为一个可以在浏览器中访问的url,我们对Servlet 的访问正是通过这个URL 进行的。而不是通过别名。因此,配置这个URL 是Servlet 配置过程中非常重要的一个环节。那么我们应该如何对这个URL进行配置呢?也就是说url-pattern 有几种配置规则呢?在配置url-pattern 元素的时候,有这样三种规则,分别是精确匹配、目录匹配和后缀匹配。
6.2、精确匹配
所谓的精确匹配,就是我们在使用浏览器访问一个 Servlet 的时候,输入的URL 中除了工程名之前的部分之外要和我们在配置Servlet 时,配置的url-pattern 元素要完全一致。比如说,在下面实例中,配置了一个名称为 HelloServlet 的Servlet,它的url-pattern 我们配置为/helloServ , 那么这个配置就是完全匹配的方式。假如说我们这个工程的名字是
TestServlet,我们的Web 服务器的端口号为8080,那么在浏览器中访问本地的这个Servlet的时候就需要使用这样的URL:http://127.0.0.1:080/TestServlet/helloServ。其中,127.0.0.1 是保留的IP 地址,指代本机,8080 是我们设置的Web 服务器的端口号,TestServlet是我们这个Servlet 所在的Web 项目的名称。而最后面的这个helloServ 就是我们配置的需要完全匹配的Servlet 的URL pattern。
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>javaee.sg.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/helloServ</url-pattern>
</servlet-mapping>
6.3、目录匹配
相对于精确匹配,目录匹配是一种相对灵活的配置方式,它以斜杠开始,以星号结尾,并且规定了一个虚拟的目录。为了更加形象的说明这种配置方式,我们仍然以刚才的例子进行说明,比如说刚才的那个Servlet,它的url-pattern 我们就可以使用这种形式进行配置:
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/helloServ/*</url-pattern>
在这个url-pattern 中,我们使用了一个虚拟的目录, helloServ,那么我们在访问这个Servlet 的时候输入的URL 就会有多种选择,我们只要保证这个URL 中,除了工程
名之外的部分以这个虚拟目录helloServ 开始就可以了。比方说,我们可以使用这样的URL 访问这个Servlet:http://127.0.0.1:8080/ TestServlet/helloServ/theServlet。在这个URL中, TestServlet 是这个Web 项目的工程名。 helloServ 是虚拟目录的名称,最后面的theServlet 是我们在访问的时候随机输入的一个名称。这个名称可以替换为其他的名称,比方说替换为thisServlet 或者thatServlet 等等。总之,在工程名TestServlet 之后紧跟虚拟目录的名称就可以了。
6.4、后缀匹配
用后缀进行匹配的方
式。在这种方式中,url-pattern 配置元素只限定了访问Servlet 的后缀名,而对于虚拟目录、名称都没有要求。比方说,我们再把刚才配置的Servlet 做一个修改,在url-pattern 中采用后缀匹配的规则进行配置。大家看这段代码:
<servlet-name>HelloServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
在这个配置当中,我们限定了访问这个Servlet 的后缀名是”.do”。也就是说,当我们的URL 中的服务器地址,端口号,工程名这些项没有错误的情况下,只要url 以”.do”结尾,就
能够访问到我们的这个Servlet。比方说,在访问我们这个别名为 HelloServlet 的Servlet的时候,URL 可以写为这样的形式:http://127.0.0.1:8080/ TestServlet/helloServ.do。大家可以看到,在这个URL 的前半部分是IP 地址、端口号和项目名称。并且这个URL 以.do 结尾,因此就可以访问到HelloServlet。或者,我们也可以把这个URL 写为这样的形式,都是可以的:http://127.0.0.1:8080/ TestServlet/theServlet.do。
6.5、注意事项
在配置 Servlet 的过程中,大家需要注意的另外一点就是一个Servlet 配置元素可以同时对应多个Servlet-mapping 元素, 比方说,我们仍然以刚才所介绍的HelloServlet 为例,大家看这段代码:
<servlet-mapping>
<servlet-name> HelloServlet </servlet-name>
<url-pattern>/helloServ</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name> HelloServlet </servlet-name>
<url-pattern>/helloServ/* </url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name> HelloServlet </servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
在这段代码中,我们为别名为HelloServlet 的Servlet 配置了3 个servlet-mapping 元素。既然我们可以为同一个Servlet 同时配置多个servlet-mapping,那么当客户端在访问这个servlet 的时候,servlet 容器是按照一个什么样的顺序来查找servlet 的呢?当为同一个Servlet 配置了多个servlet-mapping 的时候,servlet 容器首先将按照精确
匹配的方式进行匹配查找,如果匹配完成,则结束匹配,而如果匹配不成功就按照目录匹配、后缀匹配的顺序继续进行匹配查找,如果有多个目录匹配方式的配置项,则按照最长的一个来匹配。同时,在进行匹配的时候同样要看请求的URL,如果这个URL 以斜线结尾,那么这个请求将会按照目录匹配的方式来进行处理
七、在eclipse中创建Servlet


选择需要的方法

Servlet一(web基础学习笔记二十)的更多相关文章
- 监听器(web基础学习笔记二十二)
一.监听器 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其实就是一个实现特定接口的普通java程序,这个程序专门 ...
- Java基础学习笔记二十八 管家婆综合项目
本项目为JAVA基础综合项目,主要包括: 熟练View层.Service层.Dao层之间的方法相互调用操作.熟练dbutils操作数据库表完成增删改查. 项目功能分析 查询账务 多条件组合查询账务 添 ...
- Java基础学习笔记二十五 MySQL
MySQL 在dos中操作mysql 连接mysql命令: mysql -uroot -p密码 ,连接OK,会出现mysql> 对数据库的操作 创建一个库 create database 库名 ...
- Java基础学习笔记二十六 JDBC
什么是JDBC JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库.原来我们操作数据库是在控制台使用SQL语句来操作数据库,J ...
- 过滤器(web基础学习笔记二十一)
一.过滤器简介 二.在Eclipse中创建过滤器 三.使用过滤器设置全部web字符编码 public void doFilter(ServletRequest request, ServletResp ...
- 使用JSP实现输出(web基础学习笔记二)
Jsp:Java Server Page 服务器端的Java页面,动态网页技术 jsp注释 显式注释:这种注释客户端是允许看见的;<!--html注释--> 隐式注释:这种注释客户端是看不 ...
- Java基础学习笔记二十二 网络编程
络通信协议 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样.在计算机网络中,这些连接和通信的规则 ...
- Java基础学习笔记二十四 MySQL安装图解
.MYSQL的安装 1.打开下载的mysql安装文件mysql-5.5.27-win32.zip,双击解压缩,运行“setup.exe”. 2.选择安装类型,有“Typical(默认)”.“Compl ...
- Java基础学习笔记二十 IO流
转换流 在学习字符流(FileReader.FileWriter)的时候,其中说如果需要指定编码和缓冲区大小时,可以在字节流的基础上,构造一个InputStreamReader或者OutputStre ...
随机推荐
- QN-H618 遥控器复制再生仪(拷贝机)
针对现在市场上日益更新的遥控器种类,本公司经过长时间的研究,推出新一代拷贝机,本产品有以下特点: 1. 众多车库门遥控分析信息被集成在一台机器内,只要一种遥控器,就可以复制众多品牌的车库遥控.免去积压 ...
- eclipse and systemtap
http://wiki.eclipse.org/Linux_Tools_Project/Systemtap/User_Guide
- 《TCP/IP具体解释卷2:实现》笔记--IP:网际协议
本章介绍IP分组的结构和主要的IP处理过程,包含输入,转发和输出. 下图显示了IP层常见的组织形式. 在之前的文章中.我们看到了网络接口怎样把到达的IP分组放到IP输入队列ipintrq中去,并怎样调 ...
- mysql查询null异常:attempted to return null from a method with a primitive return type
select sum(deposit_amount)from tb_commission_ib_day mysql查询时报异常: attempted to return null from a met ...
- python性能优化建议
参考: https://segmentfault.com/a/1190000000666603 http://blog.csdn.net/zhoudaxia/article/details/23853 ...
- MVC批量更新,可验证并解决集合元素不连续控制器接收不完全的问题
在"MVC批量添加,增加一条记录的同时添加N条集合属性所对应的个体"中,有2个问题待解决: 1.由jquery动态生成了表单元素,但不能实施验证. 2.一旦集合元素不连续,控制器就 ...
- java hashcode()和equal()方法比较
通常equals,toString,hashCode,在应用中都会被复写,建立具体对象的特有的内容. 之所以有hashCode方法,是因为在批量的对象比较中,hashCode要比equals来得快,很 ...
- spring mvc实现restful
restful它的核心是将所有的 Api 都理解为一个网络资源.把api映射成资源 restful它的核心是将所有的 Api 都理解为一个网络资源.把api映射成资源 把api映射成资源,把api映射 ...
- 安装openldap
在Mac OS X下安装 Mac OS X 下默认安装了openldap,我们只需要配置就可以. 1. 在/etc/openldap 下创建slapd.conf 文件(只需copy slapd.con ...
- @JVM垃圾收集器种类
为什么要分代 之所以采用分代垃圾收集机制是因为不同的对象生命周期是不一样的.因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率. 在Java程序运行的过程中,会产生大量的对象,其中有些对 ...