记一下Servlet的重要知识点.
1)Servlet生命周期:构造方法-->init(有参)-->service()-->destroy()
构造方法: 创建servlet对象。默认情况下,第一次访问servlet对象时。只调用1次。
init方法(有参): 创建完servlet对象后调用。只调用1次。
注意: 会调用无参的init方法。
service方法: servlet提供服务的方法。每次发出请求调用。
注意: request对象 ,response对象
destroy方法: tomcat服务器停止或web应用重新部署,servlet对象销毁,destroy方法被调用。
demo如下:
package com.bighuan.day10_servlet;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletLifeCycle extends HttpServlet {
public ServletLifeCycle() {
System.out.println("1,创建了一个servlet对象");
}
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("2,init方法被调用");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("3,service方法被调用");
}
@Override
public void destroy() {
System.out.println("destroy方法被调用");
}
}
2)ServletConfig对象
获取servlet的初始化参数:
getInitParameter("name ");
getInitParameterNames();
贴代码了:
package com.bighuan.day10_servlet;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ConfigDemo extends HttpServlet {
//private ServletConfig config;
/**ServletConfig的API:
* java.lang.String getInitParameter(java.lang.String name)
* java.util.Enumeration getInitParameterNames()
* ServletContext getServletContext()
* java.lang.String getServletName()
*/
/**
* tomcat服务器做的事情:这些参数会在加载web应用的时候,加载到ServletConfig对象中
*/
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
//this.config=config;
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//方式一:直接找到那个文件,不好维护
//File file=new File("f:/test.txt");
//方式二:通过ServletConfig加载初始化参数,在web.xml文件中配置即可
// String path = config.getInitParameter("path");
String path = getServletConfig().getInitParameter("path");
System.out.println(path);
BufferedReader br=new BufferedReader(new FileReader(path));
String str=null;
while( (str=br.readLine()) != null){
System.out.println(str);
}
br.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}
3)ServletContext对象(ServletContext的作用范围在整个web应用程序内)
得到web应用路径:
context.getContextPath();
request.getContextPath(); 等价于上面的代码
package com.bighuan.day10_context;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 得到web应用的路径
* @author Administrator
*
*/
public class ContextDemo1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//ServletContext context = this.getServletConfig().getServletContext();
//这个方法内部就是调用了上面那行代码,推荐使用第二种
ServletContext context = this.getServletContext();
/**
* 得到web应用路径:/bighuan_jsp
* web应用路径:部署到tomcat服务器上的web应用名称
*/
/*String contextPath = context.getContextPath();
System.out.println(contextPath);
//应用到请求重定向
response.sendRedirect(contextPath+"/index.jsp");*/
/*
* 获得web应用参数
* 注意:web应用参数在所有servlet中都能获取
* servlet中的参数只能在当前servler内获取
*/
String aaaValue = context.getInitParameter("AAA");
System.out.println(aaaValue);
Enumeration<String> names = context.getInitParameterNames();
while(names.hasMoreElements()){
String name = names.nextElement();
System.out.println(name+"="+ context.getInitParameter(name));
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}
4)得到web应用参数:
context.getInitParameter("name");
context.getInitParameterNames();
5)域对象:
context.setAttribute("name",Object): 保存数据
context.getAttribute("name") 得到数据
context.removeAttribue("name") 清除数据
6)转发
context.getRequestDispatcher("路径").forward(request,response);
request.getRequestDispacher("路径").forward(request,response); 等价于上面的代码
/**
* 转发和重定向的区别:
* 转发:地址栏不会发生改变
* 不能转发到当前应用以外的资源
* 可以在转发过程中,把数据保存到request域对象中
* 重定向:地址栏会变为重定向的地址,
* 可转到当前应用以外的资源,如百度等等,比转发强大
* 不能在重定向的过程中,把数据保存到request对象中
*/
7)得到web应用中的资源文件
context.getRealPath("路径")
context.getResourceAsStream("路径");