Servlet介绍以及servetConfig和servletContext的区别

来源:互联网 发布:造价师网络课程 编辑:程序博客网 时间:2024/05/21 21:38

Servlet简介

第一种方式:实现Servlet接口
创建Servlet的步骤:

1.创建一个普通类implements Servlet接口,改Servlet接口是原SUN公司定义的规则

2.重写Servlet接口中的service方法,service()方法是服务端专用于处理客服端请求的方法,进行处理,将处理后的结果,响应给刚刚那个客服端

3.web应用有一个非常重要的特点,就是一定要配置web.xml文件,因为tomcat会读取web.xml文件中的内容,以获取Servlet相关信息

<servlet>    <servlet-name>xxx</servlet-name>    <servlet-class>xxx</servlet-class></servlet><servlet-mapping>    <servlet-name>xxx</servlet-name>    <url-pattern>/xxx</url-pattern></servlet-mapping>

第二种方式:继承GenericSerlvet类

1.类extends GenericServlet,重写service()方法

2.配置/WEB-INF/web.xml文件

前两种,任何协议下都可以开发Servlet

第三种:继承HttpServlet类:(重点)
只能专用于Http协议开发,把post和set分开,推荐使用
如果客户端以get方式提交数据,doGet()来处理
如果客户端以post方式提交数据,doPost()来处理,分而治之

Servlet生命周期

构造器()—1次
init()—1次
service()/doGet()/doPost()–N次,每次访问Servlet,都会执行service()
destroy()–1次,重新部署时或者重新启动Tomcat时,都会销毁原来的Servlet

因为Servlet是单例的,被多个线程共享,不要在service()/doGet()/doPost()中修改实例变量的值

Servlet配置详解

/WEB-INF/web.xml文件,是Web应用的一个标识性文件,它里面记录下:
1.欢迎列表文件
2.servlet配置信息

<servlet>    <servlet-name>Demo</servlet-name>    <servlet-class>cn.itheima.Demo01</servlet-class></servlet><servlet-mapping>    <servlet-name>Demo</servlet-name>    <url-pattern>/hello</url-pattern></servlet-mapping>

Servlet线程安全

尽量不要使用全局变量,而是使用局部变量

ServletConfig

在Servlet的配置文件中,可以使用一个或多个标签为servlet配置一些初始化参数。(配置在某个servlet标签或者整个web-app下)

encoding
UTF-8

访问Servlet路径分析

1.配置Servlet自动加载
在默认情况下,Servlet是第一次访问时,创建,初始化
Servlet第二次,第N次,不创建,不初始化
web.xml文件中
在servlet标签中,load-on-startup在Tomcat启动时提前完成创建,初始化,要配正数,负数相当于没配,数值小的优先级更高,0最高
解决用户第一次访问慢的问题,将创建和初始化放入到Tomcat启动时

Demo
cn.itheima.Demo01
1

2.配置Servlet虚拟路径
当访问静态页面和访问动态Servlet的URL相同是,只访问动态Servlet
/*
*只适合配置servlet映射路径
一个Servlet可以配置多个url-pattern映射路径/虚拟路径

/abc
/abc/*
/*
*.do
访问先后顺序:

3.配置Servlet为默认
如果某个Servlet设置为/的映射路径,那么这个Servlet就叫默认Servlet
好处:访问的URL如果出错了,服务器返回的404页面,这个404页面就是这个默认Servlet来创建的.

如果我们也有一个默认的Servlet,那么会替代Tomcat中默认Servlet
当web.xml文件中,没有一个Servlet来处理客户端请求时,就由默认的Servlet来处理

ServletConfig使用及获取Servlet初始化参数

ServletConfig.getInitParameter(“参数名”)->返回参数值
ServletConfig.getInitParameterNames(“参数名”)->返回枚举集合
作用:
1.获取初始化参数
2.获取ServletContext

ServletContext对象

Tomcat启动时,会加载多个web应用到内存,会为每一个web应用创建一个ServletContext对象,这些SservletContext对象是互相独立的,但每一个web应用中多个Servlet之间是共享这些ServletContext对象的.

获取系统初始化参数
一个Servlet可以配Servlet初始化参数,用ServletConfig来取
一个Web应用可以配Web初始化参数,用ServletContext来取

<context-param>    <param-name>username</param-name>    <param-value>xxx</param-value></context-param><context-param>    <param-name>email</param-name>    <param-value>yyy</param-value></context-param>

在当前web应用,创建任何一个Servlet,均可取到ServletContext

ServletContext何时创建?
1.部署web应用到Tomcat/webbapps中
2.启动Tomcat服务器,那么由Tomcat为应用创建唯一的ServletContext对象

ServletContext何时销毁
1.在不停服务器的情况下,重新发布web应用
2.停止服务器

ServletContext作用:
1)ServletContext域对象应用:
多个web组件之间使用它实现数据共享,ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。
在serlvet中,可以使用如下语句来设置数据共享
ServletContext context = this.getServletContext(); //servletContext域对象
context.setAttribute(“data”, “共享数据”); //向域中存了一个data属性
在另一个servlet中,可以使用如下语句来获取域中的data属性
ServletContext context = this.getServletContext();
String value = (String) context.getAttribute(“data”); //获取域中的data属性
System.out.println(value);
2)通过servletContext对象获取到整个web应用的配置信息
String url = this.getServletContext().getInitParameter(“url”);
String username = this.getServletContext().getInitParameter(“username”);
String password = this.getServletContext().getInitParameter(“password”);
3)通过servletContext对象实现servlet转发
由于servlet中的java数据不易设置样式,所以serlvet可以将java数据转发到JSP页面中进行处理
this.getServletContext().setAttribute(“data”,”serlvet数据转发”);
RequestDispatcherrd=this.getScervletContext().getRequestDispatcher(“/data.jsp”);
rd.forward(request, response);
4)通过servletContext对象读取资源文件
在实际开发中,用作资源文件的文件类型,通常是:xml、properties,而读取xml文件必然要进行xml文档的解析,所以以下例子只对properties文件进行读取(在一个web工程中,只要涉及到写地址,建议最好以/开头) 在web工程中,我们一般来说,是不能采用传统方式读取配置文件的,因为相对的是jvm的启动目录(tomcat的bin目录),所以我们要使用web绝对目录来获取配置文件的地址

0 0
原创粉丝点击