JavaWeb--Servlet
Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中。(Tomcat, Resin, J2EE服务器(如Weblogic)中也提供了内置的Servlet容器)
Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet和客户的通信采用“请求/响应”的模式。
Servlet可完成如下功能:
创建并返回基于客户请求的动态HTML页面。
创建可嵌入到现有HTML 页面中的部分HTML 页面(HTML 片段)。
与其它服务器资源(如数据库或基于Java的应用程序)进行通信。
ServletAPI
Servlet容器:运行Servlet、JSP、Filter等软件的环境
1.可以用来创建Servlet,并调用Servlet相关生命周期的方法
2.JSP,Filter,Tag,Listener……
Servlet生命周期的方法:
1.构造器:第一次请求Servlet时,创建Servlet实例,调用构造器(Servlet是单实例的)
2.init方法:只被调用一次,在创建好实例后立即被调用,用于初始化当前的Servlet
3.service方法:被多次调用,每次请求都会调用service方法,实际用于响应请求的
4.destroy方法:只被调用一次,在当前的Servlet所在的Web被卸载前调用,用于释放当前Servlet所占用的资源
load-on-startup:可以指定Servlet被创建的时机。若为负数,则在第一次请求时被创建,若为0或正数,则在当前WEB被Servlet容器加载时创建实例,且数越小越早被创建。
ServletConfig接口:封装了Servlet的配置信息,并且可以获得ServletContext对象
1.配置Servlet的初始化参数
<!--配置和映射Servlet--> <servlet> <!-- servlet注册的名字 --> <servlet-name>helloServlet</servlet-name> <!-- servlet的全类名 --> <servlet-class>helloweb.HelloServlet</servlet-class> <!--配置Servlet的初始化参数,且该节点必须在load-on-startup节点的前面--> <init-param> <!--参数名--> <param-name>user</param-name> <!--参数值--> <param-value>root</param-value> </init-param> <init-param> <param-name>password</param-name> <param-value>1230</param-value> </init-param> <!-- 可以指定Servlet被创建的时机 --> <load-on-startup>1</load-on-startup> </servlet>
2.获取初始化参数
getInitParameterNames():获取参数名组成的Enumeration对象
getInitParameter (String name): 获取指定参数名的初始化参数
getServletName
***getServletContext
ServletContext
1.可以由ServletConfig获取
2.该对象代表当前Web应用:可以认为是当前Web的一个大管家,可以获取到当前Web应用的各个方面的信息
①获取当前Web应用的初始化参数
<!--配置当前Web应用的初始化参数--> <context-param> <param-name>driver</param-name> <param-value>com.mysql.jdbc.Driver</param-value> <param-name>jdbcUrl</param-name> <param-value>jdbc:mysql:///JDBC</param-value> </context-param>
getInitParameterNames():获取参数名组成的Enumeration对象
getInitParameter (String name): 获取指定参数名的初始化参数
②获取当前Web应用的某一个文件在服务器上的绝对路径
getRealPath(String path)
③获取当前Web应用的名称
getContextPath()
④获取当前Web应用的某一个文件对应的输入流
getResourceAsStream(String path):path的/为当前web应用的根目录
可以由classLoader获取,也可以由ServletContext获取
//获取ServletContext对象 ServletContext sContext = servletConfig.getServletContext(); ClassLoader classLoader = getClass().getClassLoader(); InputStream is1 = classLoader.getResourceAsStream("jdbc.properties"); System.out.println(is1); InputStream is2 = sContext.getResourceAsStream("/WEB-INF/classes/jdbc.properties"); System.out.println(is2);
⑤和getAttribute相关的方法
package helloweb; import javax.servlet.*; import java.io.IOException; public class HelloServlet implements Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("init"); } @Override public ServletConfig getServletConfig() { System.out.println("getServletConfig"); return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("service"); } @Override public String getServletInfo() { System.out.println("getServletInfo"); return null; } @Override public void destroy() { System.out.println("destroy"); } public HelloServlet(){ System.out.println("HelloServlet Constructor"); } }
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <!--配置和映射Servlet--> <servlet> <!-- servlet注册的名字 --> <servlet-name>helloServlet</servlet-name> <!-- servlet的全类名 --> <servlet-class>helloweb.HelloServlet</servlet-class>
<!-- 可以指定Servlet被创建的时机 -->
<load-on-startup>4</load-on-startup>
</servlet> <servlet-mapping> <!-- 需要和某个servlet节点的servlet-name子节点的文本节点一致 --> <servlet-name>helloServlet</servlet-name> <!-- 映射具体的访问路径:/代表当前web应用的根目录, --> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>