Servlet基础知识

来源:互联网 发布:开源直播app源码 编辑:程序博客网 时间:2024/06/16 16:20
一 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和参数值valueEnumeration 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和参数值valueEnumeration 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获取工程中文件流

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









0 0
原创粉丝点击