Servlet学习笔记

2 篇文章 0 订阅
1 篇文章 0 订阅

一、Servlet简介

Servlet运行在服务器端的Java小程序,是sun公司提供的一套规范,用来处理客户端请求、响应给浏览器的动态资源。但Servlet的实质就是Java代码,通过Java的API动态的向客户端输出内容。

Servlet规范:包含三个技术点:

1)Servlet技术

2)filter技术--过滤器

3)listener技术--监听器

                                                                           Java web请求-响应过程

                  

二、Servlet的API(生命周期)

(1) Servlet接口中的方法

        1)init(ServletConfig config) 

          执行时机:servlet对象创建的时候的执行

        2)service(ServletRequest req, ServletResponse res)

         执行时机:每次有http请求 的时候的执行

        3)destroy() 

        执行时机:Servlet对象销毁的时候执行

(2)

(3)Servlet的生命周期

        1)Servlet何时创建

         默认第一次访问Servlet时创建

        2)Servlet何时销毁

          服务器关闭servlet就销毁

       3)每次访问时必须执行的方法

          service(ServletRequest req, ServletResponse res)

                                                                                           整个servlet的访问过程

                                                                 一次http请求的详细过程图解

 

三、Servlet的配置

(1)基本配置

    <servlet>
		<servlet-name>quickStartServlet</servlet-name>
		<servlet-class>com.alibaba.servlet.QuickStartServlet</servlet-class>
		<init-param>
			<param-name>url</param-name>
			<param-value>www.baidu.com</param-value>
		</init-param>
	</servlet>

	<!-- Map all requests to the DispatcherServlet for handling -->
	<servlet-mapping>
		<servlet-name>quickStartServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

 

其中,url-pattern的配置方式

完全匹配      访问的资源与配置的资源完全相同才可以访问到

<url-pattern>/quickStartServlet</url-pattern>

目录匹配      格式:/虚拟的目录.../*    *代表的任意

<url-pattern>/aaa/bbb/ccc/*</url-pattern>

扩展名匹配   格式:*.扩展名

<url-pattern>*.action</url-pattern>

四、ServletContext对象

            1)ServletContext对象简介

【简介】

ServletContext即Servlet上下文对象,该对象表示当前的web应用环境信息,一个Web应用只会创建一个ServletContext对象。

Web容器启动的时候,它会为每个Web应用程序都创建一个对应的ServletContext对象,它代表当前的web应用。

[注意]

由于一个Web应用中的所有Servlet共享一个ServletContext对象,所以多个Servlet通过ServletContext对象实现数据共享,

ServletContext对象通常称为Context对象。

【ServletContext创建时机】

ServletContext对象是在TomCat服务器加载完当前Web应用后创建出来的。

ServletContext对象是作为ServletConfig对象成员变量传入Servlet中。

通过ServletConfig的getServletContext()方法就可以得到ServletContext对象。

看下ServletConfig中相关的ServletContext代码:

class ServletConfig{      //ServletConfig对象中维护了ServletContext对象的应用
    ServletContext context;
    getInitParameter();
    getInitParameterNames();
    public ServletContext getServletContext(){     //返回一个ServletContext对象
      return contex;
    }
} 

在Servet中的init的方法实例化一个ServletConfig

@Override
public void init(ServletConfig config) throws ServletException {
    super.init(config);
}

 

[ 注意 ]

this.ServletConfig.getServletContext():通过ServletConfig对象来获取ServletContext对象。

ServletContext对象:启动时创建

ServletConfig对象:调用init方法之前创建的,在ServletContext对象之前。

 

【在Servlet中得到ServletContext的两种方式】

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 得到ServletContext的方式一
		ServletContext context1 = this.getServletConfig().getServletContext();
		// 得到ServletContext的方式二
		ServletContext context2 = this.getServletContext();
}

 

【ServletContext的5大作用】

1.获取web的上下文路径

String getContextPath();

 

2.获取全局的参数 

配置全局初始化参数

<!-- 配置全局初始化参数 -->
<context-param>
  <param-name>driver</param-name>
  <param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
 String getInitParameter(String name);

 Enumeration getInitParameterNames();

3.和域对象相关的  

ServletContext域对象的作用范围:整个web应用(所有的web资源都可以随意向servletContext域中存取数据,数据是可以共享)

void setAttribute(String name,Onject object);

Object getAttribute(String name);

void removeAttribute(String name);

  域对象(域对象就是在不同资源之前来共享数据,保存数据,获取数据)

  ServletContext是我们学习的第一个域对象(Servlet共有三个域对象ServletContext、HttpServletRequest、HttpSession)

4. 请求转发的

  RequestDispatcher getRequestDispatcher(String path);

  在Servlet跳转页面:

  4.1请求重定向(你找我借钱,我没有,你自己去找他借钱)

    1.地址栏会改变,变成重定向到的地址

    2.可以跳转到项目内的资源,也可以跳转项目外的资源

    3.浏览器向服务器发出两次请求,那么不能使用请求来作为域对象来共享数据。

  4.2请求转发(你找我借钱,我没有,我帮你去向他借钱)

    1.地址栏不会改变

    2.只能跳转到项目内的资源,不能跳转项目外的资源。

    3.浏览器向服务器发出一次请求,那么可以使用请求作为域对象共享数据。

5.读取web项目的资源文件

  String getRealPath(String path);

  InputStream getResourceAsStream(String path);

  URL getResource(String path);

 

【利用ServletContext对象来收发数据(Servlet3.0新特性)】

利用ServletContext实现SendServlet和ReceiveServlet之间的数据共享

四、Servlet实战案例

主要业务逻辑:就是在Servlet中,首先从request中接受前台页面的请求数据,然后,访问数据库,将请求数据和数据库中的数据进行对比,如果数据库中存在该用户,则返回成功登陆页面,否则,返回错误提示信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值