java Web之Servlet

今天自己把Servlet这块给总结一下。

1.首先什么是Servlet?

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

(1)接收请求数据;

(2)处理请求;

(3)完成响应;

每个Servlet都是唯一的,他们能处理的请求是不同的。

在Servlet中要做的第一件事就是获取响应。


2.实现Sevlet的三种方式:

(1)实现Servlet接口;

(2)继承GenericServlet类;

(3)继承HttpServlet类;

通常我们都会去继承HttpServlet来完成我们的Servlet。因为我们都是在htttp协议下操作的,它提供了对HTTP请求的特殊支持,所以继承HttpServlet用的是最多的。继承HttpServlet之后,我们不需要重写Service,需要我们重写doGet(),doPost()这两个方法。


3.Servlet的生命周期:

所谓xxx的生命周期,就是说xxx的出生、服务,以及死亡。Servlet生命周期也是如此!与Servlet的生命周期相关的方法有:
void init(ServletConfig):创建之后立即执行的初始化方法。
void service(ServletRequest,ServletResponse):每次处理请求时都会调用。
void destroy():销毁之前(调用一次),释放资源的方法。

Servlet的特性:

(1)单例:一个类只有一个对象;当然可能存在多个Servlet类!

(2)线程不安全的,所以他的效率是高的。

servlet类由我们自己写,但对象由服务器来创建,并且由服务器来调用相应的方法!


4.ServletContext对象(就是applicatiion):

服务器会为每个应用创建一个ServletContext对象:
ServletContext对象的创建是在服务器启动时完成的;
ServletContext对象的销毁是在服务器关闭时完成的。
ServletContext对象的作用是在整个Web应用的动态资源之间共享数据!例如在AServlet中向ServletContext对象中保存一个值,然后在BServlet中就可以获取这个值,这就是共享数据了。

可以通过两种方法来获取ServletContext对象:

(1)init(ServletConfig config)中:ServletContext context = config.getServletContext();
ServletConfig类的getServletContext()方法可以用来获取ServletContext对象;


(2)genericeServlet或HttpServlet中获取ServletContext对象:
GenericServlet类有getServletContext()方法,所以可以直接使用this.getServletContext()来获取;

 //获取ServletContext对象
 ServletContext application = this.getServletContext();
   //调用setAttribute方法,来进行保存参数
   application.setAttribute("name","张三");


5.servletContext是四大域对象之一:

所有域对象都有存取数据的功能,因为域对象内部有一个Map,用来存储数据,下面是ServletContext对象用来操作数据的方法:

void setAttribute(String name, Object value):用来存储一个对象,也可以称之为存储一个域属性,例如:servletContext.setAttribute(“xxx”, “XXX”),在ServletContext中保存了一个域属性,域属性名称为xxx,域属性的值为XXX。请注意,如果多次调用该方法,并且使用相同的name,那么会覆盖上一次的值,这一特性与Map相同;


Object getAttribute(String name):用来获取ServletContext中的数据,当前在获取之前需要先去存储才行,例如:String value = (String)servletContext.getAttribute(“xxx”);,获取名为xxx的域属性;


void removeAttribute(String name):用来移除ServletContext中的域属性,如果参数name指定的域属性不存在,那么本方法什么都不做;
Enumeration getAttributeNames():获取所有域属性的名称;


6.服务器处理流程:

1.服务器处理请求的流程:
 服务器每次收到请求时,都会为这个请求开辟一个新的线程。
 服务器会把客户端的请求数据封装到request对象中,request就是请求数据的载体!(袋子)
 服务器还会创建response对象,这个对象与客户端连接在一起,它可以用来向客户端发送响应。(手机)


2.servlet是一个服务器端的响应程序。所有的请求都是由servlet来进行处理的。Tomcat都是把请求拿过来给servlet来处理。servlet通过request来接收请求。处理完处理请求,在由response响应给客户端。


3.request和response是服务器创建的。


 7.请求响应流程:

request和response
 * 当服务器接收到请求后,服务器会创建request和response对象,把请求数据封装到request对象中;
 * 然后调用Servlet的service()方法时把这两个对象传递给service()方法;
 * 在service()方法中可以通过request对象获取请求数据,可以使用response对象向客户端完成响应;
  
 * 每次请求服务器都会创建新的request和response对象,即每个请求有自己独自的request和response对象。

request和response
 * 当服务器接收到请求后,服务器会创建request和response对象,把请求数据封装到request对象中;
 * 然后调用Servlet的service()方法时把这两个对象传递给service()方法;
 * 在service()方法中可以通过request对象获取请求数据,可以使用response对象向客户端完成响应;
  
 * 每次请求服务器都会创建新的request和response对象,即每个请求有自己独自的request和response对象。

request和response
 * 当服务器接收到请求后,服务器会创建request和response对象,把请求数据封装到request对象中;
 * 然后调用Servlet的service()方法时把这两个对象传递给service()方法;
 * 在service()方法中可以通过request对象获取请求数据,可以使用response对象向客户端完成响应;
  
 * 每次请求服务器都会创建新的request和response对象,即每个请求有自己独自的request和response对象。


8.getParameter和setAttribute的区别:

1.参数:getParameter()是客户端向服务器端传递数据的。是用来获取客户端的参数的。
请求参数是由客户端发送给服务器的!有可能是在请求体中(POST),也可能是在URL之后(GET)
2.属性:setAttribute()和getAttribute()是请求转发和请求包含时两个servlet相互传递值的。
3.request.getParameter()和request.getAttribute()
 * getParameter()是获取客户端参数,它是从客户端传递给服务器的数据。
 * getAttribute()是获取服务器端自己设置的数据,而不是客户端的数据。
 * request没有setParameter()方法,不能自己设置参数,参数都由客户端传递
 * request有setAttribute()方法,在getAttribute()之前,需要先setAttribute()才能获取到。
 * getAttribute()和setAttribute()是用来在请求转发和请求包含中的多个Servlet中共享数据。



9.Servlet三大作用域:

ServletRequest;

HttpSession;

ServletContext;

这几个域对象都有setAttribute(),getAttribute(),removeAttribute(),getAttributeNames()

Servlet中三大域对象:request、session、application,都有如下三个方法:一提到范围就是以下这三个方法。
    > void setAttribute(String name, Object value)
    > Object getAttribute(String name)
  > void removeAttribute(String name);
    > 同一请求范围内使用request.setAttribute()、request.getAttribute()来传值!前一个Servlet调用setAttribute()保存值,后一个Servlet调用getAttribute()获取值。




猜你喜欢

转载自blog.csdn.net/qq_34939308/article/details/78897157