实现Servlet接口创建第一个Servlet小程序

Servlet概述:

I.什么是Servlet

    Servlet是JavaWeb的三大组件之一,它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,通常被叫做服务器端小程序。在Servlet中通常需要:

 1. 接收请求数据;
 2. 处理请求;
 3. 完成响应。

例如客户端发出登录请求,或者输出注册请求,这些请求都应该由Servlet来完成处理!Servlet需要我们自己来编写,每个Servlet必须直接或者间接的实现javax.servlet.Servlet接口。

II.实现Servlet有三种方式:

 1. 实现javax.servlet.Servlet接口;
 2. 继承javax.servlet.GenericServlet类;
 3. 继承javax.servlet.http.HttpServlet类;

通常我们会去继承HttpServlet类来完成我们的Servlet,但学习Servlet还要从javax.servlet.Servlet接口开始学习。

    Servlet中的五个方法:
1. void destroy()  
2. ServletConfig getServletConfig()
3. String getServletInfo()   
4. void init(ServletConfig config)  
5. void service(ServletRequest req, ServletResponse res)   
III.生命周期方法:

 1. void init(ServletConfig):创建对象之后(1次);
 2. void service(ServletRequest request, ServletResponse response):每次处理请求时都会被调用;
 3. void destroy():销毁对象之前(1次);

注意:一般来说生命周期方法就是这么3个,但如果严格来说构造方法也算一个,但我们一般来说就是3个。

IV.特性:

 1.单例,一个类只有一个对象;当然可能存在多个Servlet类!
 2.线程不安全的,所以它的效率是高的!

接下来我们开始准备完成Servlet,完成Servlet需要分为两步:
 1. 编写Servlet类;
 2. 在web.xml文件中配置Servlet;

 好,下面我们就开始来创建一个Servlet小程序。
public class HelloWorld implements Servlet{

    @Override
    public void destroy() {
        System.out.println("destroy");
    }

    @Override
    public ServletConfig getServletConfig() {
        System.out.println("Config");
        return null;
    }

    @Override
    public String getServletInfo() {
        System.out.println("Info");
        return null;
    }

    @Override
    public void init(ServletConfig arg0) throws ServletException {
        System.out.println("Init");
    }

    @Override
    public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
        System.out.println("Hello World");
    }

}

既然你已经创建好了,那就该如何去访问吧。
在web.xml文件中配置Servlet

    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>包名.类名</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/helloworld</url-pattern><!-- 这个是在浏览器地址栏中的地址 -->
    </servlet-mapping>  
加入我的项目名是WebStudy  我的包名是Study  类名是Web

那么当我配置好web.xml文件后就可以通过地址http://localhost:8080/WebStudy/helloworld  进行访问这个Servlet   

就可以看到只执行了init,server,destroy其中init只执行一次就在第一次处理请求,destroy在服务器关闭之前执行。server执行多次,也就是处理多次请求

本质上来说,不管是访问Servlet小程序,还是其他的服务端小程序,目的都是接受请求,处理请求,并且响应请求。


V.下面我们来谈谈Servlet接口的相关类型:

在Servlet接口中还存在三个我们不熟悉的类型:
1.  ServletRequest:service() 方法的参数,它表示请求对象,它封装了所有与请求相关的数据,它是由服务器创建的;
2.  ServletResponse:service()方法的参数,它表示响应对象,在service()方法中完成对客户端的响应需要使用这个对象;
3.  ServletConfig:init()方法的参数,它表示Servlet配置对象,它对应Servlet的配置信息,那对应web.xml文件中的元素。


--->ServletRequest和ServletResponse

ServletRequest和ServletResponse是Servlet#service() 方法的两个参数,一个是请求对象,一个是响应对象,可以从ServletRequest对象中获取请求数据,可以使用ServletResponse对象完成响应。
ServletRequest和ServletResponse的实例由服务器创建,然后传递给service()方法。如果在service() 方法中希望使用HTTP相关的功能,那么可以把ServletRequest和ServletResponse强转成HttpServletRequest和HttpServletResponse。这也说明我们经常需要在service()方法中对ServletRequest和ServletResponse进行强转,这是很心烦的事情。所以在HttpServlet类中,就已经问我们干了这些事。

HttpServletRequest方法:

1.  String getParameter(String paramName):获取指定请求参数的值;
2.  String getMethod():获取请求方法,例如GET或POST;
3.  String getHeader(String name):获取指定请求头的值;
4.  void setCharacterEncoding(String encoding):设置请求体的编码!因为GET请求没有请求体,所以这个方法只只对POST请求有效。当调用request.setCharacterEncoding(“utf-8”)之后,再通过getParameter()方法获取参数值时,那么参数值都已经通过了转码,即转换成了UTF-8编码。所以,这个方法必须在调用getParameter()方法之前调用!

HttpServletResponse方法:

1.  PrintWriter getWriter():获取字符响应流,使用该流可以向客户端输出响应信息。例如response.getWriter().print(“<h1>Hello JavaWeb!</h1>”);

2.  ServletOutputStream getOutputStream():获取字节响应流,当需要向客户端响应字节数据时,需要使用这个流,例如要向客户端响应图片;

3.  void setCharacterEncoding(String encoding):用来设置字符响应流的编码,例如在调用setCharacterEncoding(“utf-8”);之后,再response.getWriter()获取字符响应流对象,这时的响应流的编码为utf-8,使用response.getWriter()输出的中文都会转换成utf-8编码后发送给客户端;

4.  void setHeader(String name, String value):向客户端添加响应头信息,例如setHeader(“Refresh”, “3;url=http://www.baidu.cn”),表示3秒后自动刷新到http://www.baidu.cn;

5.  void setContentType(String contentType):该方法是setHeader(“content-type”, “xxx”)的简便方法,即用来添加名为content-type响应头的方法。content-type响应头用来设置响应数据的MIME类型,例如要向客户端响应jpg的图片,那么可以setContentType(“image/jepg”),如果响应数据为文本类型,那么还要台同时设置编码,例如setContentType(“text/html;chartset=utf-8”)表示响应数据类型为文本类型中的html类型,并且该方法会调用setCharacterEncoding(“utf-8”)方法;

6.  void sendError(int code, String errorMsg):向客户端发送状态码,以及错误消息。例如给客户端发送404:response(404, “您要查找的资源不存在!”)。
VI.在Servlet中的ServletConfig

那么什么是ServletConfig??
下面是 ServletConfig的几个方法。它是个接口。
1. String getInitParameter(String name) 
2. Enumeration getInitParameterNames() 
3. ServletContext getServletContext() 
4. String getServletName()  

对于在web.xml中的配置来说。

    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>包名.类名</servlet-class>
        <init-param>
            <param-name>par1</param-name>
            <param-value>value1</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/helloworld</url-pattern>
    </servlet-mapping>  
    getServletName()  获取的是<servlet-name>hello</servlet-name> 中的值。
    接下来,下面就是关于这两个方法的初始化参数的键和值
    1. String getInitParameter(String name) 
    2. Enumeration getInitParameterNames() 

    初始化参数可以有多个。并且写在web.xml的Servlet标签中。
<init-param>
    <param-name>par1</param-name>
    <param-value>value1</param-value>
</init-param>
ServletConfig对象是由服务器创建的,然后传递给Servlet的init()方法,你可以在init()方法中使用它!

1.  String getServletName():获取Servlet在web.xml文件中的配置名称,即指定的名称;
2.  ServletContext getServletContext():用来获取ServletContext对象,ServletContext会在后面博客中讲解;
3.  String getInitParameter(String name):用来获取在web.xml中配置的初始化参数,通过参数名来获取参数值;
4.  Enumeration getInitParameterNames():用来获取在web.xml中配置的所有初始化参数名称;
在元素中还可以配置初始化参数:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值