1.Servlet生命周期
1.初始化:init():Servlet第一次被请求时调用
除非在web.xml里配置了<load-on-startup>,这样web容器启动时Servlet就会被实例化
例如tomcat默认的Servlet:org.apache.catalina.servlets.DefaultServlet
2.响应客户请求:service():客户端每次请求时调用
tomcat会自动生成request和response对象传给service()
3.终止阶段:destory():停止web容器时调用
2.ServletConfig
为了防止“硬编码”带来的低耦合,可以把信息放进配置文件,在程序里读取
例如:
在web.xml的Servlet里配置
<init-param>
<param-name>charset</param-name>
<param-value>UTF-8</param-value>
</init-param>
在程序里读取:getServletConfig().getInitParameter("chatset");
tomcat会在Servlet的init方法中把ServletConfig传进去,GenericServlet已经帮我们做好了
我们只需要调用getServletConfig即可
public void init(ServletConfig config) throws ServletException {
this.config = config;
this.init();
}
3.ServletContext
ServletContext,是一个全局的储存信息的空间,服务器开始,其就存在,服务器关闭,其才释放。
4.重定向和转发
重定向:你找我借钱,我没钱,我叫你去找银行借:两个request
response.sendRedirect("/index.jsp");
重定向的本质:
response.setStatus(302);
response.setHeader("location", "/index.jsp");
response.setHeader("location", "/index.jsp");
转发:你找我借钱,我没钱,我帮你去银行借:一个request
getServletContext().getRequestDispatcher("/index.html").forward(request, response);
5.Servlet和普通Java类读取文件
Servlet:通过ServletContext
Properties properties = new Properties();
properties.load(this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties"));
properties.load(this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties"));
普通Java类:通过classLoader
Properties properties = new Properties();
properties.load(UserDao.class.getClassLoader().getResourceAsStream("db.properties"));
properties.load(UserDao.class.getClassLoader().getResourceAsStream("db.properties"));
由于类加载器只加载一次,所以如果db.properties文件有所修改还是无法读取
我们可以用类加载器获取路径,然后用普通流读取文件
properties.load(new FileInputStream(Demo.class.getClassLoader().getResource("db.properties").getPath()));