Servlet :
是运行在 Web 服务器中的小型 Java 程序(即:服务器端的小应用程序)。servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。
一,Servlet的三种创建方式:
1、实现javax.servlet.Servlet接口
public class servletDemo1 implements Servlet{
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("hello demo1");
}
}
2,继承javax.servet.GenericServlet类(适配器模式)
public class Demo2 extends GenericServlet{
@Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("hello demo2");
}
}
3,继承javax.servlet.http.HttpServlet类(模板方法设计模式)
(开发中常用方式)
public class Demo3 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("doget#####");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("dopost*****");
}
}
二、Servlet的线程安全
不要写全局变量,而写局部变量。
三,Servlet获取配置信息
作用1:可以获取servlet配置信息
方式1:
public class Demo1 extends HttpServlet {
private ServletConfig config;
@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
this.config=config;
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
//使用初始化方法得到ServletConfig对象
String value=config.getInitParameter("encoding");
System.out.println(value);
}
方式2:
public class Demo1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
//通过继承父类的方法得到ServletConfig
/*String value=this.getServletConfig().getInitParameter("encoding");
System.out.println(value);*/
String value=this.getInitParameter("encoding");
System.out.println(value);
}
作用2:可以获得ServletContext对象
ServletContext: 代表的是整个应用。一个应用只有一个ServletContext对象。单实例。
域对象:在一定范围内(当前应用),使多个Servlet共享数据。
常用方法:
向ServletContext对象的map中添加数据
void setAttribute(String name,object value);
从ServletContext对象的map中取数据
Object getAttribute(String name);
public class Demo2_context extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext sc = this.getServletContext();
sc.setAttribute("name", "tom");
}
public class Demo3_context extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
String name=(String) this.getServletContext().getAttribute("name");
if (name == null) {
System.out.println("不能直接访问");
}
System.out.println(name);
}
获取资源路径:
String getRealPath(String path);//根据资源名称得到资源的绝对路径.。可以得到当前应用任何位置的任何资源。
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext sc=this.getServletContext();
String path=sc.getRealPath("\\WEB-INF\\classes\\a.properties");
Properties p=new Properties();
p.load(new FileInputStream(path));
System.out.println(p.getProperty("key"));
}
实现Servlet的转发。
public class Demo4_path extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext sc=this.getServletContext();
System.out.println("请问跳了吗?");
sc.getRequestDispatcher("/servlet/demo5_request").forward(request, response);
System.out.println("已经回来了");
}
public class Demo5_request extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("来了呀,那你再跳回去吧");
}