Servlet程序(一)

 一、Servlet是什么

  1. Servlet程序是一个接口

  2. Servlet是JavaWeb三大组件之一

  3.  Servlet程序是运行在web服务器上的java小程序,它可以用来接收客户端的请求,以及响应客户端。

二、手动实现一个Servlet程序

1、创建Java类去实现servlet接口

 1 public class demo implements Servlet{
 2     @Override
 3     public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
 4         System.out.println("hello word");
 5     }
 6 
 7     @Override
 8     public void destroy() {
 9 
10     }
11 
12     @Override
13     public ServletConfig getServletConfig() {
14         // TODO Auto-generated method stub
15         return null;
16     }
17 
18     @Override
19     public String getServletInfo() {
20         // TODO Auto-generated method stub
21         return null;
22     }
23 
24     @Override
25     public void init(ServletConfig arg0) throws ServletException {
26         // TODO Auto-generated method stub
27         
28     }
29 }

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的生命周期

1. 调用Servlet程序的构造方法 (初次访问被调用)

2. 调用Servlet程序的init初始化方法 (初次访问被调用)

3. 调用Servlet程序的Servlet方法 (每次访问都被调用)

4. 调用Servlet程序的Servlet方法(在web工程停止时被调用)

四、GET请求和POST请求的分发处理

请求分发处理就是当客户端向服务器发出请求时,在服务器获取到请求后查看请求的类型,是GET还是POST。就是用request接口的HttpServletRequest类中的getMethod()方法得到。
1 public void service(ServletRequest request, ServletResponse response) 
2     throws ServletException, IOException {
3 //      判断是GET请求还是POST请求
4 //      getMethod() 可以得到,
5         HttpServletRequest httpRequest = (HttpServletRequest) request;
6         String method = httpRequest.getMethod();
7         System.out.println("请求方式!"+method);
8     }

 五、继承HttpServlet实现Servlet程序

在实际开发中,我们很少会通过实现Servlet接口的形式来实现Servlet程序,而是通继承HttpServlet抽象类来实现Servlet程序,通过重写doGet()和doPost()来分发处理来自客户端的请求!
 1 public class demo1 extends HttpServlet {
 2     /*
 3      * 需要根据你的业务需求,重写doGet或doPost方法
 4      * doGet在GET请求的时候调用
 5      * doPost方法在Post请求的时候调用*/    
 6     @Override
 7     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 8     
 9         super.doGet(req, resp);
10     }
11     @Override
12     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
13         
14         super.doPost(req, resp);
15     }
16 
17 }

六、利用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、可以获取<init-param>标签中配置的初始化参数

  3、获取ServletConfig 对象

(三)、具体实现

  是通过重写init方法来实现的·,init()中有ServletConfig类型参数,通过参数去调用getServletName()、getInitParameter("参数名");、getServletConfig()分别获取Servlet程序的名称、参数、对象。

1 @Override
2     public void init(ServletConfig config) throws ServletException {
3 //        1、获取<Servlet-name>标签配置的名称
4         System.out.println("Servlet的名字:"+config.getServletName());
5 //        2、获取Servlet程序的初始化参数
6         System.out.println("Servlet初始化参数:"+config.getInitParameter("canshu"));
7 //        3、获取Servlet对象
8         System.out.println("Servlet对象:"+config.getServletContext());
9     }

(四)、Servlet程序编码中常见的问题

  1、ServletConfig类不光可以在init()方法中使用,也可以在其他方法中使用,例如doget和dopost方法中。但是要注意:当你重写了init()方法后,就不能在其他方法中使用。如果想要使用必须在init()方法中调用super.init(config)方法。

1 @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);
    }
原文地址:https://www.cnblogs.com/geq2020/p/12425971.html