[日常笔记]servelt

servlet复习

1. servlet概述
  • javaWeb的三大组件
    Servlet(今天所说的就是这个组件),Filter(拦截器),Listener(观察者模式)。
  • servlet的作用
    用来处理用户请求(当客户端发出请求后,由Tomcat去找到可以处理这个请求的Servlet来处理)。
2. servlet的生命周期

javax.servlet.Servlet接口中,有三个方法说明了Servlet的生命周期:

  • void init(ServletConfig):创建后马上调用init()完成初始化。
  • void service(ServletRequest, ServletResponse):每次处理请求时调用service()方法。
  • void destroy():当Tomcat要销毁Servlet实例时,先调用destroy()方法。
3. http的Servlet

写一个Servlet类,继承javax.servlet.http.HttpSevlet类,需要重写doGet方法和doPost方法。
方法:

方法作用
doGet(HttpServeltRequest req,HttpServletResponse resp)由服务器(通过服务方法调用),以允许servlet处理Get请求。
doPost(HttpServeltRequest req,HttpServletResponse resp)由服务器(通过服务方法调用),以允许servlet处理Post请求。
service(HttpServeltRequest req,HttpServeltResponse resp)接收来自公共服务方法的标准HTTP请求,并将其分派给该类中定义的do***方法。
service(ServletRequest req,ServletResponse resp)将客户端请求分派到受保护的服务方法。
  • HTTP请求方法
    Get:通过请求URI得到资源
    Post:用于添加新的内容
4. Servlet的实例

Servelt类:

package com.cn.zkk;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class ServletDemo1 implements Servlet {

	/*
	 * 执行时机:当Servlet的实例对象被销毁的时候调用
	 * 做一些收尾或者清理的工作
	 */
	public void destroy() {
		System.out.println("Servlet销毁了");
	}

	/*
	 * 获得ServletConfig的配置对象
	 */
	public ServletConfig getServletConfig() {
		return null;
	}

	/*
	 * 获得当前Servlet的属性信息(了解)
	 */
	public String getServletInfo() {
		return null;
	}
	
	/*
	 * 执行时机:当Servlet实例被创建时被调用,用于做初始化的工作
	 * ServletConfig:Servlet的配置对象,初始化的时候可以进行配置
	 */
	public void init(ServletConfig arg0) throws ServletException {
		System.out.println("servlet组件创建了");
	}

	/*
	 * 核心方法
	 * 执行时机:当一个请求来请求当前的Servlet的时候被调用
	 * 处理当前Servlet的业务逻辑,并且把结果集(响应)返回给浏览器
	 * ServletRequest:Servlet请求对象(用于接收请求)
	 * ServletResponse:Servlet响应对象(用于响应请求)
	 */
	public void service(ServletRequest request, ServletResponse response)
			throws ServletException, IOException {
		System.out.println("响应请求!");
		response.getOutputStream().write("<font color='red'>hello Servlet</font>".getBytes());
	}
}

web.xml配置:

<servlet>
  	<!-- 设置servlet的名字 -->
  	<servlet-name>helloServlet</servlet-name>
  	<!-- 具体的servlet的类 -->
  	<servlet-class>com.cn.zkk.ServletDemo1</servlet-class>
  </servlet>
  
  <servlet-mapping>
  <!-- 指定要映射的servlet的名字 -->
 	<servlet-name>helloServlet</servlet-name>
 	<!--  servlet的具体的映射路径 ,/:表示根目录-->
 	<url-pattern>/hello</url-pattern>
  </servlet-mapping>
5. Tomcat启动时创建Servelt

<load-on-startup>元素的值是一个序号,Tomcat会使用这个序号给多个Servlet排序!然后在Tomcat启动时会按这个顺序来创建Servlet实例对象!1最大。
需要注意的是:当Tomcat启动时创建时只是被创建,但没有做处理请求!参数必须是大于0的整数。

<load-on-startup>1</load-on-startup>
6. ServeltConfig

方法:

方法作用
getInitParameter(String name)返回一个字符串,该字符串包含指定的初始化参数的值,如果该参数不存在,则返回null。
getInitParameterNames()以字符串对象枚举的形式返回servlet的初始化参数的名称,如果servlet没有初始化参数,则返回空枚举。
getServeltContext()返回对调用方正在其中执行的ServletContext的引用。
getServletName()返回此servlet实例的名称。

示例:

 - Servelt:
String username = config.getInitParameter("username");
		System.out.println(username);
		
		Enumeration enums = config.getInitParameterNames();
		while(enums.hasMoreElements()){
			 String name = (String) enums.nextElement();
			 String pass = config.getInitParameter(name);
			 System.out.println(name);
			 System.out.println(pass);
		}

web.xml:

<init-param>
    	<param-name>username</param-name>
    	<param-value>10086</param-value>
    </init-param>
    <init-param>
    	<param-name>password</param-name>
    	<param-value>123456</param-value>
</init-param>
7.Servlet 路径映射

关于url-pattern的配置:

匹配方式配置注意示例
完全路径匹配以/开头/aaa
目录匹配以/开头/aaa/*
扩展名匹配不能以/开头*.do

优先级:完全路径匹配 > 目录匹配 > 扩展名匹配
经典错误:/*.do

8.ServletContext(用来获取全局参数)

主要应用:

  • 获取web应用的全局初始化参数
  • 通过ServletContext对象实现数据共享
  • 利用ServletContext对象读取资源文件
    方法:
返回类型方法
ObjectgetAttribute(String name) :返回具有给定名称的servlet容器属性,如果该名称中没有属性,则返回null。
StringgetContextPath():返回web应用程序的上下文路径。
StringgetIninParameter(String name):返回一个字符串,该字符串包含指定的上下文范围初始化参数的值,如果该参数不存在,则返回null。
StringgetRealPath(String path):返回一个字符串,该字符串包含给定虚拟路径的实际路径
voidsetAttribute(String name, Object obj):将对象绑定到此servlet上下文中给定的属性名。
InputStreamgetResourceAsStream(String path):以InputStream对象的形式返回位于指定路径的资源。
ServletContextgetServletContext:获得ServletContext的对象

获得文件的资源(以后会大量的使用):

使用类加载器的方式来读取classpath下的资源,使用的好处是:不依赖与ServletContext,任何类都可以获取classpath下的资源文件,不需要自己指定/WEB-INF/classpath

  • 重点:this.getClass().getClassLoader().getResourceAsStream(“需要找到的文件名”);

示例:
Servelt(ServletContext来访问网站来统计次数):

ServletContext sc = getServletContext();
		Integer value = (Integer)sc.getAttribute("value");
		if(value == null){
			sc.setAttribute("value", 1);
		}else{
			sc.setAttribute("value", ++value);
		}
		value = (Integer)sc.getAttribute("value");
		String result = "<font color='red' size='20'>当前站点被点击的次数是"+value+"次!</font>";
		response.getOutputStream().write(result.getBytes());
9. 单例的Servlet

因为Servlet实例是由Tomcat来创建的,但Tomcat只会创建一个Servlet实例,所以Servlet就是单例的!

  • Servelt是线程不安全的
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值