- HttpServlet是GenericServlet的子类,又是在GenericServlet的基础上做了增强。
- HTTP的请求方式包括DELETE,GET,OPTIONS,POST,PUT和TRACE,在HttpServlet类中分别提供了相应的服务方法, 它们是,doDelete(),doGet(),doOptions(),doPost(), doPut()和doTrace().
-
如果继承了HttpServlet没有实现任何的doXxx方法则会抛出一个异常:405
HttpServlet的执行过程
图解HttpServlet的执行方式
Servlet细节
- 不要再Servlet中创建成员,创建局部变量就好
可以创建无状态成员
可以创建有状态的成员,但状态必须是只读状态
- 在<Servlet>中配置<load-on-starup> ,其中给出的是非负整数
<load-on-starup>0</load-on-starup>
小的先创建,再创建大的 - <url-pattern>:用来指令Servlet的访问路径,即url,路径必须是/开头
/servlet/*:路径匹配
.do:扩展名匹配
/:啥都匹配
web.xml文件的继承
在${CATALINA_HOME}\conf\web.xml中的内容,相当于写到每个项目的web.xml中,他是所有web.xml的父文件
<servlet-name>default</servlet-name>:它的优先级最低,如果一个请求没有处理,那么它来处理,显示404
ServletContext
一个项目就只有一个ServletContext对象,可以在很多个servlet中获取这个唯一的对象,使用它可以给多个servlet传递数据
与天地同寿:这个对象在tomcat启动是就创建,在tomcat关闭时才死去
-
获取ServletContext
- 在Servlet中获取ServletContext对象:
- 在void init(ServletConfig config)中:ServletContext context = config.getServletContext();
- GenericConfig类有getServletContext() 方法,所以可以直接使用this.getServletContext()来获得
- HttpSession#getServletContext()
- ServletConetextEvent#getServletContext()
- 在Servlet中获取ServletContext对象:
-
域对象的功能
ServletContext是javaWeb四大域之一:
pageContext
ServletRequset
HttpSession:
ServletContext
域对象就是用来在多个Servlet中传递数据:域对象必须有存取数据的功能
域对象的方法
import javax.servlet.ServletContext;
import java.io.IOException;
/**
* 演示向ServletContext中保存数据
*/
public class AServlet extends javax.servlet.http.HttpServlet {
protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
//获取ServletContext对象
//调用其serAttribute()方法完成保存数据
ServletContext application = this.getServletContext();
application.setAttribute("name","zhangsan");
}
}
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 从ServletContext中获取数据
*/
@WebServlet(name = "BServlet",urlPatterns ="/BServlet")
public class BServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取ServletContext对象
//调用getAttribute()方法完成获取数据
ServletContext applcation = this.getServletContext();
String name = (String) applcation.getAttribute("name");
System.out.println(name);
}
}
-
获取应用初始化参数
Servlet也可以获取初始化参数,一个Servlet只能获取自己的初始化参数
可以配置公共的初始化参数,为所有Servlet用需要使用ServletContext才能使用
<context-param>
<param-name>context-param</param-name>
<param-value>context-value</param-value>
</context-param>
-
获取真实路径
获取路径后再创建输入流对象
获得所有资源的路径
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.Set;
/*
使用ServletContext获取资源路径
*/
@WebServlet(name = "CServlet",urlPatterns = "/CServlet")
public class CServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
得到的是有盘符的路径
/Users/hxl/study/学习文件(源码)/idea/JavaWeb/JavaWebDay09_2/out/artifacts/JavaWebDay09_2_war_exploded/index.jsp
*/
String path = this.getServletContext().getRealPath("/index.jsp");
System.out.println(path);
/*
获取资源的路径后,在创建输入流对象
*/
InputStream input = this.getServletContext().getResourceAsStream("/index.jsp");
/*
获得当前路径下的所有资源路径
*/
Set<String> paths = this.getServletContext().getResourcePaths("/WEB-INF");
}
}
网友评论