本文已参与「新人创作礼」活动,一起开启掘金创作之路。
servlet讲解
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
最早支持Servlet标准的是JavaSoft的Java Web Server,此后,一些其它的基于Java的Web服务器开始支持标准的Servlet。
使用IDEA创建Servlet程序
配置Servlet信息、一般为类名大写,配置xml为类名的小写
六.Servlet继承体系
| javax.servlet Interface Servlet | Servlet接口,只是负责定义Servlet程序的访问规范 |
|---|---|
| javax.servlet Class GenericServlet | GenericServlet 类实现lServlet接口,做了很多空实现,并且持有一个ServletConfig类的引用。并对ServletConfig的使用做一些方法 |
| javax.servlet.http Class HttpServlet | HttpServlet抽取类实现了service()方法,并实现了请求的分发处理 |
| 自定义的Servlet程序 --->根据需要重写doGet或doPost方法 | String method = req.getMethod(); |
七.ServletConfig类
ServletConfig类为Servlet程序的配置信息类 servlet程序和ServletConfig对象都说由Tomcat负责创建,我们负责使用,Servlet程序默认是第一次访问的时候创建,Servlet程序创建时,就创建一个对应的ServletConfig对象。 1.ServletConfig类的三大应用 1).可以获取Servlet程序的别名Servlet-name 2).获取初始化参数init-param 3).获取ServletContext对象
public class ServletTest implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
// 1).可以获取Servlet程序的别名Servlet-name
System.out.println("ServletTest 的别名为:" + servletConfig.getServletName());
// 2).获取初始化参数init-param
System.out.println("初始化参数username为:"+ servletConfig.getInitParameter("username"));
System.out.println("初始化参数password为:"+ servletConfig.getInitParameter("password"));
System.out.println("初始化参数url为:"+ servletConfig.getInitParameter("url"));
System.out.println("初始化参数Driver为:"+ servletConfig.getInitParameter("Driver"));
// 3).获取ServletContext对象
System.out.println(servletConfig.getServletContext());
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
这是在xml里面配置的init的参数它只可以得到自己的Servlet部署的信息,不能获取别的Servlet的信息
<servlet>
<servlet-name>ServletTest</servlet-name>
<servlet-class>com.Demo.Servlet.ServletTest</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/test</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value></param-value>
</init-param>
<init-param>
<param-name>Driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</init-param>
</servlet
八.ServletContext类
1.ServletContext是一个接口,他表示Servlet上下文 2.一个web工程,只有一个ServletContext对象实例 3.ServletContext对象是一个域对象(域对象是可以象Map那样存取数据的对象,叫域对象,域指的是存取数据的操作范围、Context的范围是整个web工程) 4.ServletContext在web工程部署启动的时候创建,在web工程停止的时候销毁
| 存数据 | 取数据 | 删除数据 | |
|---|---|---|---|
| Map | put() | get() | remove() |
| 域对象 | setAttribute() | getAttribute() | removeAttribute() |
| 4.ServletContext类的四个作用 |
1).获取web.xml中配置的上下文参数
1.获取web.xml中配置的上下文参数
2.获取当前的工程路径
3.获取工程部署后服务器硬盘的绝对路径
4.象Map一样存取数据
public class ContextServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.获取web.xml中配置的上下文参数context-param
ServletContext context = getServletConfig().getServletContext();
String username = context.getInitParameter("username");
System.out.println("context-param参数username的值为:" + username);
System.out.println("context-param参数password的值为:" + context.getInitParameter("password"));
// 2.获取当前的工程路径
System.out.println("当前路径:" + context.getContextPath());
// 3.获取工程部署后服务器硬盘的绝对路径
//斜杠被服务器解析地址为:http://ip:port/工程名 映射到IDEAdaima的web目录
System.out.println("工程部署的路径是:" + context.getRealPath("/"));
// 4.象Map一样存取数据
ServletContext context1 = getServletContext(); //先获取servletContext对象
context1.setAttribute("key1","value1");
context1.setAttribute("key2","value2");
context1.setAttribute("key3","value3");
context1.setAttribute("key4","value4");
System.out.println("Context1中key1的数据" + context1.getAttribute("key1"));
System.out.println("Context1中key2的数据" + context1.getAttribute("key2"));
System.out.println("Context1中key3的数据" + context1.getAttribute("key3"));
System.out.println("Context1中key4的数据" + context1.getAttribute("key4"));
}
}