Servlet系列学习(一)

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

  1. 调用Servlet程序的构造方法 (初次访问被调用)
  2. 调用Servlet程序的init初始化方法 (初次访问被调用)
  3. 调用Servlet程序的Servlet方法 (每次访问都被调用)
  4. 调用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);
    }

猜你喜欢

转载自blog.csdn.net/weixin_44676935/article/details/104701965