1、什么是Servlet?
* 服务器端Java程序,servlet需要交给服务器来运行。
* 与javax.servlet.Servlet接口有关的java程序 2、如何使用servlet?【必须】
* 创建web项目
* 创建一个类,并实现Servlet接口
* 交给服务器运行 /WEB-INF/web.xml
<!-- 注册servlet
<servlet>标签:进行servlet注册
<servlet-class>标签:确定servlet类所在位置
* 内容:需要注册的servlet类的完整路径名
<servlet-name>标签:为servlet起一个别名,提供给其他程序使用
* 内容:自定义
* 要求,必须唯一
-->
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>com.yxl.HelloWorld</servlet-class>
</servlet>
<!--
servlet的映射
<servlet-mapping>标签:映射已有的servlet
<servlet-name>标签:确定使用的已有的servlet的名称
* 内容:来自之前配置的<servlet><servlet-name>的内容
<url-pattern>标签:确定浏览器访问的路径
* 内容:自定义
* 要求 : 必须“/”开头,名称唯一
-->
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
* 测试:http://localhost:8080/day05/hello 3、为什么这样使用?
* javax.servlet.Servlet的生命周期:
* init(ServletConfig servletConfig)
* servlet的初始化方法,执行次数:1次
* javax.servlet.ServletConfig对当前servlet的配置信息的描述
* servletConfig.getServletName():返回当前servlet的名称:<servlet><servlet-name>配置的内容
* servletConfig.getInitParameter("paramName"):返回指定初始化参数名称的值,读取配置文件web.xml
* <servlet>
<servlet-name>helloWorld222</servlet-name>
<servlet-class>cn.itcast.HelloWorld2</servlet-class>
<!-- 配置初始化参数列表 -->
<init-param>
<!-- 初始化参数的名称 -->
<param-name>gf</param-name>
<!-- 初始化参数的值 -->
<param-value>凤姐</param-value>
</init-param>
</servlet>
* servletConfig.getInitParameterNames():返回当前servlet的所有的初始化参数的名称
* 返回值:java.util.Enumeration --> hasMoreElements(),nextElement()
*ServletContext servletContext = servletConfig.getServletContext():ServletConfig保存了当前web项目的 ServletContext的引用[暂记]
*service(ServletRequest,ServletResponse)【**】
* 当前servlet请求与响应时调用的方法
* ServletRequest:存放所有用户的请求信息
* ServletResponse:存放服务器响应给用户的所有的信息
* 总结
* request
* 接口:javax.servlet.ServletRequest
* 实现类:org.apache.catalina.connector.RequestFacade
* 关系:
* public class RequestFacade implements HttpServletRequest {
* public interface HttpServletRequest extends ServletRequest {
* 总结: RequestFacade --> HttpServletRequest --> ServletRequest
* 结果:javax.servlet.http.HttpServletRequest request = (HttpServletRequest) req;
* response
* 接口:javax.servlet.ServletResponse
* 实现类:org.apache.catalina.connector.ResponseFacade
* 关系:
* public class ResponseFacade implements HttpServletResponse {
* public interface HttpServletResponse extends ServletResponse {
* 总结: ResponseFacade --> HttpServletResponse --> ServletResponse
* 结果:javax.servlet.http.HttpServletResponse response = (HttpServletResponse) resp;
* destroy()
* 当前servlet的销毁方法,回收资源
* javax.servlet.GenericServlet类【看】 this,super
* 通用servlet实现类,与协议无关
* 此类是抽象类,具有抽象方法service(ServletRequest,ServletResponse)
* public abstract void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;
* 此类实现Servlet接口,此类也实现了ServletConfig接口
* public abstract class GenericServlet implements Servlet, ServletConfig
* 此类缓存了init方法的实际参数的值。(ServletConfig的实例对象给缓存了)
* public void init(ServletConfig config) throws ServletException {
this.config = config;
this.init();
}
* 此类中在一个没有参数init方法,所有的servlet初始化工作,建议覆盖此方法。
* 否则,覆盖带有参数的init方法,需要在方法的第一行添加super.init(config);
* public void init(ServletConfig config) throws ServletException {
super.init(config); //此行代码必须存在
//之后是自己的内容
}
* javax.servlet.http.HttpServlet类
* 此类是抽象类,但是不存在抽象方法。
* 抽象类的原因,需要子类进行HttpServlet类方法的覆盖
* 没有抽象方法的原因:当子类覆盖父类的相应的方式时,没有强制要求
* 此类是与协议(http)有关的servlet的实现类
* request = (HttpServletRequest) req;
response = (HttpServletResponse) res;
* request.getMethod()方法,返回当前servlet的请求方法,方便与处理不同的请求 * 总结:【**】
* 创建一个类,继承HttpServlet类
* 根据需求,覆盖doPost和doGet方法
* 需要再web.xml中进行配置
* 测试
* 注意:
* 如果需要初始化工作:覆盖init()方法
* 如果初始化工作需要耗费大量时间,需要设置servlet的在服务器启动时进行初始化工作。
* <servlet><load-on-startup>2</load-on-startup>
* 配置当前servlet在服务器启动时加载顺序,取值:0-6 ,值越小,优先加载 4、servlet的虚拟路径
指的是 <servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
中<url-pattern>的路径 1、只能使用 / 或 * 开头
2、/ 和 *. 不能同时存在
3、/ 或 /* 表示任意
4、只有*.才表示通配符

5、关于缺省Servlet
如果某个Servlet的映射路径仅仅为一个正斜杠(/),那么这个Servlet就成为当前Web应用程序的缺省Servlet。
凡是在web.xml文件中找不到匹配的<servlet-mapping>元素的URL,它们的访问请求都将交给缺省Servlet处理,也就是说,缺省Servlet用于处理所有其他Servlet都不处理的访问请求。
在<tomcat的安装目录>\conf\web.xml文件中,注册了一个名称为org.apache.catalina.servlets.DefaultServlet的Servlet,并将这个Servlet设置为了缺省Servlet。
当访问Tomcat服务器中的某个静态HTML文件和图片时,实际上是在访问这个缺省Servlet。

 

JavaWeb学习之什么是Servlet、如何使用servlet、为什么这样使用、servlet的虚拟路径、关于缺省Servlet(2)的更多相关文章

  1. servlet虚拟路径映射

    在web.xml文件中,一个<servlet-mapping>元素用于映射一个Servlet的对外访问路径,该路径也称为虚拟路径.例如<url-pattern>/TestSer ...

  2. Servlet虚拟路径匹配规则

    当 Servlet 容器接收到请求后,容器会将请求的 URL 减去当前应用的上下文路径,使用剩余的字符串作为映射 URL 与 Servelt 虚拟路径进行匹配,匹配成功后将请求交给相应的 Servle ...

  3. JavaWeb学习总结-04 Servlet 学习和使用

    一 Servlet 1 Servlet概念 Servlet时运行在服务器端的Java程序. Servlet的框架核心是 javax.servlet.Servlet 接口. 所有自定义的Servlet都 ...

  4. javaweb学习总结(六)——Servlet开发(二)

    一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...

  5. javaweb学习之Servlet开发(二)

    javaweb学习总结(六)--Servlet开发(二) 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个< ...

  6. JavaWeb学习之Servlet(二)----Servlet的生命周期、继承结构、修改Servlet模板

    [声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140466.html 一.http协议回顾: 在上一篇文章中:JavaW ...

  7. javaweb学习总结(六)——Servlet开发(二)(转)

    转载自 http://www.cnblogs.com/xdp-gacl/p/3763559.html 一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文 ...

  8. (转)JavaWeb学习之Servlet(二)----Servlet的生命周期、继承结构、修改Servlet模板

    [声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140466.html 一.http协议回顾: 在上一篇文章中:JavaW ...

  9. JavaWeb学习 (六)————Servlet(二)

    一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...

  10. JavaWeb学习总结(四):Servlet开发(二)

    一.ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些 ...

随机推荐

  1. sql执行顺序

    SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后 ...

  2. &,引用复制@,忽略错误提示

    function &chhua() { static $b="www.jb51.net";//申明一个静态变量 $b=$b."WEB开发"; echo ...

  3. Validform —— 再也不用担心“表单验证”!

    <!doctype html> <html> <head> <meta content="text/html" charset=" ...

  4. Python进程、线程

    Lock & RLock :用来确保多线程多共享资源的访问. Semaphore : 用来确保一定资源多线程访问时的上限,例如资源池. Event : 是最简单的线程间通信的方式,一个线程可以 ...

  5. 再谈Weiphp公众平台开发——1、增加插件

    去年开始接触基于Weiphp的公众平台开发,一直没时间好好整理一下. 下面开始讲解第一个自定义weiphp插件:MyHello的开发流程. 1.插件创建.在weiphp管理后台依次点击“插件管理-&g ...

  6. 7.6--找过点最多的直线(CC150)

    直接两个点确定一条直线.然后两两组合,再写一个看过多少个点的函数.一直更新max就行. import java.util.Arrays; public class Solution { public ...

  7. YUVviewerPlus使用教程

    1.YUVviewerPlus用于播放yuv文件,点击Open File打开yuv文件 2.点击Play播放yuv文件

  8. When building php 5.3, if you get the following error:

    buildconf: You need autoconf 2.59 or lower to build this version of PHP. You are currently trying to ...

  9. WCF 定制自己的签名验证逻辑

    关键点: 1. 保证在客户端设置签名. client.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentU ...

  10. C# Winfrom 页面传值

    2个窗体 Parent,Children 代码: Parent public partial class Parent : Form { public string parentValue = &qu ...