Servlet:
Servlet是JavaWeb的一个组件。属于动态资源,作用是处理请求;每个Servlet都是唯一的,他们能处理的请求是不同的。
在服务器把接收的请求交给Servlet处理时,在Servlet中通常需要:接收请求数据、处理请求、完成响应。
每个Servlet都必须实现 javax.servlet.servlet接口。
实现方式:
1、实现javax.servlet.servlet接口
2、继承javax.servlet.GenericServlet类
3、继承javax.servlet.http.HttpServlet类
Servlet接口中的五个方法:
init(ServletConfig);生命周期方法。在Servlet对象创建之后马上执行,且只执行一次。一般进行初始化操作。
service(ServletRequest,ServletResponse);生命周期方法。会被调用多次,每次处理请求都是调用service()。
destroy();生命周期方法。在Servlet被销毁之前调用,并且指挥被调用一次。
ServletConfig();获取Servlet的配置信息。
getServletInfo();获取Servlet信息。
生命周期:浏览器访问Servlet
1、给Servlet指定一个Servlet路径(让Servlet与一个路径绑定在一起)
2、浏览器访问Servlet路径。
配置Servlet路径:
在web.xml中进行Servlet配置
<servlet> <servlet-name>xxx</servlet-name> <servlet-class>包名.类名</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>xxx</servlet-name> <url-pattern>/path</url-pattern> </servlet-mapping>
若在Servlet中配置了load-on-startup,内容为非负数整数。表示服务器创建Servlet的顺序。
特性:
单例:一个类只有一个对象;当然可能存在多个Servlet类
线程不安全,所以效率高。
Servlet类由我们来写,但对象由服务器来创建,并且由服务器来调用响应方法。
ServletConfig:
一个ServletConfig对象,对应一段web.xml中的Servlet配置信息。在web.xml配置信息中可以加配置初始化参数信息。
<init-param> <param-name>内容</param-name> <param-value>内容</param-value> </init-param>
String getServletName();//获取的是<servlet-name>中的内容 ServletConfig getServletContext();//获取Servlet的上下文对象 String getInitParameter(String name);//通过名称获取指定初始化参数的值 Enumeration getInitParameterNames();//获取所有初始化参数的名称
GenericServlet:是Servlet的实现类
HttpServlet:
HttpServlet extends GenderServlet
类中存在方法void service(ServletRequest,ServletResponse);生命周期方法。需要强转俩个参数为http协议相关的类型。故、调用本类的service(HttpServletRequest,HttpServletResponse);该方法的参数已经是http协议相关的,使用起来更方便。它会通过request得到当前请求的请求方式;(例:get/post) 会根据请求方式再调用doGet()/doPost() 所以自定义类继承HttpServlet时需要重写doGet()和doPost()。若未重写并且调用了那么会出现405错误(不支持该种请求方式)。
ServletContext:
一个项目只有一个ServletContext对象,可以再N多个Servlet种获取该唯一的对象,可以使用它给多个Servlet传递数据。
作用:
在整个Web应用的动态资源之间共享数据。
获取ServletContext:
在方法void init(ServletConfig config)中:ServletContext sc=config.getServletContext();ServletConfig类的getServletContext()获取ServletContext对象。
在GenericeServlet或HttpServlet中获取:GenericeServlet类由getServletContext()方法,使用this.getServletContext()获取ServletContext对象。
ServletContext是JavaWeb四大域对象之一。所有的域对象都具有存取数据的功能。因为域对象内部有一个Map,用来存储数据。
void setAttribute(String,Object);//用来存储一个对象,或称之为存储一个域属性。
//在ServletContext中保存一个域属性,域属性名称为String参数,域属性的值为Object参数。或多次调用该方法,并且使用相同的String,那么会覆盖上一次的值。 Object getAttribute(String);//获取ServletContext中的数据。获取名为String参数的域属性。 void removeAttribute(String);//移除ServletContext中的域属性 Enumeration getAttributeNames();//获取多少有域属性的名称。
ServletContext获取应用初始化参数:
在web.xml中配置的应用初始化参数。注:应用初始化参数与Servlet初始化参数不同。
Servlet获取的初始化参数是局部的参数;也就是说,一个Servlet只能获取自己的数据和参数;即初始化参数职位一个Servlet准备。而配置的共有的初始化参数为所有的Servlet用,则组要使用ServletContext 。
web.xml:
<web-app> <context-param> <param-name>context-param</param-name> <param-value>context-value</param-value> </context-param> </web-app>
servletContext.getInitParameter(String);//获取初始化参数 String servletContext.getRealPath(String);//获取服务器端的绝对路径 InputStream servletContext.getRealPathAsStream(String);//获取资源的路径后,再创建 输入流对象 Set servletContext.getResourcepaths("/WEB-INF");//获取当前路径下所有资源的路径