java Web(2)

来源:互联网 发布:贝思外贸软件数据导出 编辑:程序博客网 时间:2024/05/17 20:53

今天自己把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()获取值。




阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 庆祝升学 升学e 网通 升学目标 升学e学网 升学e网通登录平台登录 升学e网通平台 升学e网通app 升学e网通下载 小学语文升学夺冠知识大集结 升学指导网登录 升学e网通值得买吗 升学e网通账号登陆入口 对口升学什么意思 升学指导一卡通 升学宴答谢词 ewt升学e网通 对口升学分数线 深圳市升学文化传播有限公司 升学e网通效果很恐怖 升学宴邀请函 职高对口升学 小升初升学简历 对口升学辅导 对口升学补习班 对口升学学校 升学教育集团 升学e网通怎么样 对口升学辅导班 升学e网通有用吗 升学指导测验 中等职业学校对口升学 升平公主 升平 升序和降序 升序 升序排列 四座40万左右直升飞机 直升飞机价格4座家用 太阳升起时你未曾离开 手动挡超车时是升挡还是降挡 1升水等于多少kg