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

选择需要的方法

时间: 2024-10-22 00:27:48

Servlet一(web基础学习笔记二十)的相关文章

监听器(web基础学习笔记二十二)

一.监听器 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法立即被执行. 二.监听器统计在线人数--HttpSessionListener实现 package com.pb.news.listenter; public class OnlineCounter { pub

Java基础学习笔记二十 IO流

转换流 在学习字符流(FileReader.FileWriter)的时候,其中说如果需要指定编码和缓冲区大小时,可以在字节流的基础上,构造一个InputStreamReader或者OutputStreamWriter,这又是什么意思呢? OutputStreamWriter类 查阅OutputStreamWriter的API介绍,OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节.它的作用的就是,将字符串按照指定的编码表转成字节,

Java基础学习笔记二十八 管家婆综合项目

本项目为JAVA基础综合项目,主要包括: 熟练View层.Service层.Dao层之间的方法相互调用操作.熟练dbutils操作数据库表完成增删改查. 项目功能分析 查询账务 多条件组合查询账务 添加账务 编辑账务 删除账务 项目环境搭建 技术选型和jar包介绍 每个项目都要使用一些已经成熟的技术,它们通常是由一些专业组织或团队所提供的开源免费技术.在今后的学习过程中,我们会逐渐对这些专业组织有所了解.本项目中使用的技术如下: apache的commons组件: commons-dbutils

使用JSP实现输出(web基础学习笔记二)

Jsp:Java Server Page 服务器端的Java页面,动态网页技术 jsp注释 显式注释:这种注释客户端是允许看见的;<!--html注释--> 隐式注释:这种注释客户端是看不到的 注释:格式一://注释,单行注释 格式二:/*多行注释*/ 格式三:<%--注释--%>jsp注释 <!-- 这个注释客户端可以可见 --> <%--这个注释客户端看不到 --%> <% out.println("学习jsp输出"); //输

Java基础学习笔记二十五 MySQL

MySQL 在dos中操作mysql 连接mysql命令: mysql -uroot -p密码 ,连接OK,会出现mysql> 对数据库的操作 创建一个库 create database 库名 create database 库名 character set 编码 mysql> create database mybase; Query OK, 1 row affected (0.00 sec) mysql> show databases; +--------------------+

Java基础学习笔记二十六 JDBC

什么是JDBC JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库.原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句. JDBC原理 早期SUN公司的天才们想编写一套可以连接天下所有数据库的API,但是当他们刚刚开始时就发现这是不可完成的任务,因为各个厂商的数据库服务器差异太大了.后来SUN开始与数据库厂商们讨论,最终得出的结论是,由SUN提供一套访问数据库的规范(就是

过滤器(web基础学习笔记二十一)

一.过滤器简介 二.在Eclipse中创建过滤器 三.使用过滤器设置全部web字符编码 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub // place your code here // pass the reques

Java基础学习笔记二十二 网络编程

络通信协议 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样.在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式.传输速率.传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换. 网络通信协议有很多种,目前应用最广泛的是TCP/IP协议(Transmission Control Protocal/Internet Protoal传输控制协议/英特网互联协议),它是

Java基础学习笔记二十四 MySQL安装图解

.MYSQL的安装 1.打开下载的mysql安装文件mysql-5.5.27-win32.zip,双击解压缩,运行“setup.exe”. 2.选择安装类型,有“Typical(默认)”.“Complete(完全)”.“Custom(用户自定义)”三个选项,选择“Custom”,按“next”键继续. 3.点选“Browse”,手动指定安装目录. 4.填上安装目录,我的是“F:\Server\MySQL\MySQL Server 5.0”,也建议不要放在与操作系统同一分区,这样可以防止系统备份还