Servlet基础知识

一 servlet 简述
1 servlet是运行在web服务器中的java小程序,通常通过HTTP接受和响应客户端请求。

2 servlet一定要实现javax.servlet.Servlet接口,并且要在web.xml中部署

3 servlet是单例的,不是同步的,不是线程安全的(多个线程同时访修改成员变量即属性,会出错如属性值10经过两个线程同时修改后变为11),所以一般不设置servlet的属性

二 servlet生命周期-三个方法

1 init方法:第一次url访问时,servlet初始化
2 service方法:每次响应请求时执行该方法
3 destroy方法:web容器关闭前即销毁servlet实例前调用该方法

三  HttpServlet简述
1 HttpServlet继承抽象类GenericServlet(实现了接口Servlet),常用方法:doGet、doPost

    2 网页直接访问servlet映射的url时,调用的方法为doGet。如果为post方式,可采用表单提交。

四 servlet在web.xml中的配置说明

<servlet>
	<servlet-name>servletName</servlet-name>
 	<servlet-class>com.google.servlet.ServletClassName</servlet-class>
 	<load-on-startup>0</load-on-startup>
 	<init-param>
 		<param-name>username</param-name>
 		<param-value>abc</param-value>
 	</init-param>
 	<init-param>
 		<param-name>password</param-name>
 		<param-value>123</param-value>
 	</init-param>
</servlet>
<servlet-mapping>
	<servlet-name>servletName</servlet-name>
	<url-pattern>/appletUploadServlet.do</url-pattern>
</servlet-mapping>

1映射路径url-pattern的分类和优先级

完全路径匹配,以/开头,如/aaa/aaa/bbb

> 目录匹配,以/开头,如/aaa/*/*

> 扩展名匹配,不能以/开头,如*.do*.action 禁止/*.do

2容器(服务器)启动时实例化servlet,参数load-on-startup,值只能大于等于0,表示一个序号,用来给servlet排序,服务器启动时按照这个顺序来实例化servlet对象

3初始化参数init-param,参数值都为String类型,只针对当前servlet有效

五 获取servlet的成员变量:ServletConfig和ServletContext

1 servletconfig在init方法中如何获取web.xml中初始化init-param的参数名称和参数值

public void init(ServletConfig config) throws ServletException {
	//方式一,初始化参数名称已知,获取对应的参数值
	String userNameValue = config.getInitParameter("username");
		
	//方式二,获取所有初始化名称组成的枚举,遍历初始化参数的名称name和参数值value
	Enumeration enums = config.getInitParameterNames();
	while(enums.hasMoreElements()) {
		String name = (String) enums.nextElement();
		String value = config.getInitParameter(name);
	}	
}

2 servletcontext在web容器启动时创建,一个web应用中的所有servlet共享一个servletcontext,实现数据共享

A 获取全局参数值

<context-param>
	<param-name>context_key</param-name>
	<param-value>context_value</param-value>
</context-param>

<context-param>
	<param-name>config_key</param-name>
	<param-value>config_value</param-value>
</context-param>
public void init(ServletConfig config) throws ServletException {			
	//获取ServletContext对象
	ServletContext sc = config.getServletContext();
		
	//根据参数名称获取参数值
	String val = sc.getInitParameter("context_key");
		
	//获取所有初始化名称组成的枚举,遍历初始化参数的名称name和参数值value
	Enumeration enums = sc.getInitParameterNames();
	while(enums.hasMoreElements()) {
		String name = (String) enums.nextElement();
		String value = sc.getInitParameter(name);
	}
}
B 全局属性的设置,应用案例,站点访问的统计

//获取ServletContext对象
ServletContext sc = config.getServletContext();
		
//获取全局属性的值
Integer callCount = (Integer) sc.getAttribute("callCount");
if (callCount == null) {
	sc.setAttribute("callCount", 1);
} else {
	sc.setAttribute("callCount", ++callCount);
}
C 获取工程中文件的目录路径

//获取ServletContext对象
ServletContext sc = config.getServletContext();		
//获取工程目录的位置
String projectPath = sc.getRealPath("");//该参数值随便写如/aaa,不会被校验
System.out.println(projectPath);

D获取工程中文件流

//获取ServletContext
ServletContext sc = config.getServletContext();
		
//根据servletcontext获取文件流
sc.getResourceAsStream("/fileNameToProjectPath"); // 文件,相对工程路径		
//根据类加载器获取文件流,不依赖servletContext,更常用
InputStream in = this.getClass().getClassLoader().getResourceAsStream("/fileNameToClassPath");//文件,相对类文件的根目录









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值