Servlet①

Servlet

1.Servlet概述

Servlet是JavaWeb的三大组件之一,它属于动态资源ervlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理,在Servlet中通常需要:
  • 接收请求数据;

  • 处理请求;

  • 完成响应。

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

​ Servlet是前端和后端连接的枢纽,前端请求servlet,然后servlet调用业务层,业务层调用映射层,映射层映射实体类将数据写入数据库中。

2.Servlet的生命周期

#### 2.1生命周期包含三个阶段:出生、服务以及死亡。
  • void init(ServletConfig);
  • void service(ServletRequest,ServletResponse)
  • void destroy();
2.1.1Servlet的出生

​ 服务器在Servlet第一次被访问时创建Servlet,也可以是在tomcat启动时就创建好,这个需要在配置文件web.xml中进行设置0,也就是相当于java中静态代码块的作用,其中设置的数必须是0以上的整数,数字越大,加载的顺序就越靠后。所以如果需要初始化的方法或者参数就可以放在init()中。

2.1.2Servlet服务

​ 每次接受请求时,都会去调用Servlet的service()方法进行处理请求,服务器每请求一次,service方法就会被调用一次,所以service方法是会被调用多次的。正因为如此,所以我们才需要吧处理请求的逻辑代码写在service()中,一般也是调用业务层。

2.1.3Servlet的离去

Servlet是不会无缘无故的离去的,默认是服务器关闭是Servlet才会离去,在服务器关闭时,服务器会调用destory()销毁Servlet,所以如果还有什么后话的话就放在这个方法中,例如某些资源的释放等等。

3.Servlet服务的使用

  • 在Servlet接口中还存在三个我们不熟悉的类型
    • ServletRequest:它表示请求对象,它封装了所有与请求相关的数据,它是由服务器创建的;
    • ServletResponse:它表示响应对象,在service()方法中完成对客户端的响应需要使用这个对象
    • ServletConfig:init()方法的参数,它表示Servlet配置对象,对应Servlet的配置信息,可以通过它获取web.xml文件中的servlet元素
3.1ServletRequest和ServletResponse
  • 它们两个是接口,作用前者是请求对象,后者为响应对象,前者请求获取前端的数据到后端,后者将后端的数据响应到前端。它们的实现类是由服务器进行创建,这个服务器不局限于tomcat,其它的web服务器也会有对应的实现,相当于Sun公司当时对于JDBC的做法,本来Sun公司是想用JDBC连接所有需要连接的数据库,但是难度可想而知,每个数据库都有属于自己形状的接口,显然是无法做到,所以Sun公司只能将自己java的接口造出来,让那些使用java代码连接数据库来实现Sun公司的接口,因此Servlet也是同样的道理。
  • ServletRequest和ServletResponse的实例由服务器创建,然后传递给service()方法。如果在service() 方法中希望使用HTTP相关的功能,那么可以把ServletRequest和ServletResponse强转成HttpServletRequest和HttpServletResponse。这也说明我们经常需要在service()方法中对ServletRequest和ServletResponse进行强转,这是很心烦的事情。不过后面会有一个类来帮我们解决这一问题的。
HttpServletRequest方法:
  • String getParameter(String paramName):获取指定请求参数的值;

  • String getMethod():获取请求方法,例如GET或POST;

  • String getHeader(String name):获取指定请求头的值;

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

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

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

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

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

  • 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”)方法;

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值