Servlet程序(一)
一、Servlet是什么
- Servlet程序是一个接口 Servlet是JavaWeb三大组件之一
- Servlet程序是运行在web服务器上的java小程序,它可以用来接收客户端的请求,以及响应客户端。
- Servlet程序是运行在web服务器上的java小程序,它可以用来接收客户端的请求,以及响应客户端。
二、手动实现一个Servlet程序
1、创建Java类去实现servlet接口
public class demo implements Servlet{
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
System.out.println("hello word");
}
@Override
public void destroy() {
}
@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
}
}
2、实现service方法
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
System.out.println("hello word");
}
3、需要到Web.xml文件中去配置一个servlet访问地址。
<!-- servlet标签 表示在web服务器上配置了一个Servlet程序 -->
<servlet>
<!-- servlet唯一的名字 -->
<servlet-name>HelloServlet</servlet-name>
<!-- servlet全类名 -->
<servlet-class>demo</servlet-class>
</servlet>
<!-- servlet-mapping配置一个请求地址 -->
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
访问时就可以用localhost:端口号/项目名/hell就可以,因为我们再配置文件里设置了它的访问地址。
三、Servlet的生命周期
- 调用Servlet程序的构造方法 (初次访问被调用)
- 调用Servlet程序的init初始化方法 (初次访问被调用)
- 调用Servlet程序的Servlet方法 (每次访问都被调用)
- 调用Servlet程序的Servlet方法(在web工程停止时被调用)
四、GET请求和POST请求的分发处理
请求分发处理就是当客户端向服务器发出请求时,在服务器获取到请求后查看请求的类型,是GET还是POST。就是用request接口的HttpServletRequest类中的getMethod()方法得到。
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
// 判断是GET请求还是POST请求
// getMethod() 可以得到,
HttpServletRequest httpRequest = (HttpServletRequest) request;
String method = httpRequest.getMethod();
System.out.println("请求方式!"+method);
}
五、继承HttpServlet实现Servlet程序
在实际开发中,我们很少会通过实现Servlet接口的形式来实现Servlet程序,而是通继承HttpServlet抽象类来实现Servlet程序,通过重写doGet()和doPost()来分发处理来自客户端的请求!
public class demo1 extends HttpServlet {
/*
* 需要根据你的业务需求,重写doGet或doPost方法
* doGet在GET请求的时候调用
* doPost方法在Post请求的时候调用*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
六、利用Eclipse创建Servlet程序
七、Servlet的体系结构
八、ServletConfig类
(一)、认识ServletConfig类
1. ServletConfig类从类名中我们就可以体现出它的本质作用。就是Servlet程序的配置信息类嘛!
2. 每次Tomcat服务器创建Servlet程序的时候,都会创建一个ServletConfig对象,传递给init()初始化方法,做初始化使用!
3.注意:在这里Servlet程序是由Tomcat服务器创建,ServletCobfig类也是有它创建,这是需要我们弄清楚的地方!
(二)、ServletConfig类的三大作用
1、可以获取Servlet-name标签Servelt配置的名字(也就是在web.xml中配置的名称)
2、可以获取标签中配置的初始化参数
3、获取ServletConfig 对象
(三)、具体实现
是通过重写init方法来实现的·,init()中有ServletConfig类型参数,通过参数去调用getServletName()、getInitParameter(“参数名”);、getServletConfig()分别获取Servlet程序的名称、参数、对象。
@Override
public void init(ServletConfig config) throws ServletException {
// 1、获取<Servlet-name>标签配置的名称
System.out.println("Servlet的名字:"+config.getServletName());
// 2、获取Servlet程序的初始化参数
System.out.println("Servlet初始化参数:"+config.getInitParameter("canshu"));
// 3、获取Servlet对象
System.out.println("Servlet对象:"+config.getServletContext());
}
(四)、Servlet程序编码中常见的问题
1、ServletConfig类不光可以在init()方法中使用,也可以在其他方法中使用,例如doget和dopost方法中。但是要注意:当你重写了init()方法后,就不能在其他方法中使用。如果想要使用必须在init()方法中调用super.init(config)方法。
@Override
2 public void init(ServletConfig config) throws ServletException {
3 // 必须添加,否则不能在其他方法中使用
4 super.init(config);
5 }
2、当重写了dogett()和dopost(),不要调用super.doGet(req,resp);或者super.doPost(req,resp)方法;否则就会向客户端发送错误!
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doPost(req, resp);
}