您的位置:首页 > Web前端 > JavaScript

jsp and servlet

2015-06-06 15:00 561 查看
1,servlet概述:servlet是web服务器端的java程序,是客户端浏览器与数据库的中间层。

public class ServletDemoFirst extends HttpServlet {   

  //用于处理客户端发送的GET请求   

  public void doGet(HttpServletRequest request, HttpServletResponse response)   

    throws ServletException, IOException {   

     response.setContentType("text/html;charset=GB2312"); //这条语句指明了向客户端发送的内容格式和采用的字符编码.   

     PrintWriter out = response.getWriter();    

     out.println(" 您好!"); //利用PrintWriter对象的方法将数据发送给客户端   

     out.close();   

  }   

  //用于处理客户端发送的POST请求   

  public void doPost(HttpServletRequest request, HttpServletResponse response)   

    throws ServletException, IOException {   

    doGet(request, response); //这条语句的作用是,当客户端发送POST请求时,调用doGet()方法进行处理   

  }

}

2,servlet的生命周期他的方法都是由容器控制的。servlet一生中只有一个实例出现,但是有多个线程出现。某个servlet的生命开始一般在被客户端首次请求时开始。但如果特别配置一下,也可以在容器启动时就开始。

1)容器中的jvm加载类 Servlet .class文件

2)容器实例化servlet

3)初始化 容器调用 init() 方法(一生只调一次)

4)service方法  servlet一生主要在这里度过(每个请求都会调用)

5)销毁  销毁实例之前调用 destroy() 方法,服务器关闭时调用该方法。

6)回收 等待垃圾回收等待垃圾回收

3.Servlet一生中的三大重要时刻
init():在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet对象。无论有多少客户机访问Servlet,都不会重复执行init()。因此可以在此方法中放入复杂的并且不想重复执行的初始化任务,如数据库连接。
service():它是Servlet的核心,负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。然后service方法帮我们调用doGet或者doPost方法。需要注意的是,系统只会生成一个servlet实例,当有多个用户请求时会创建多个线程,所以该实例中的成员会被共享访问。
destroy(): 仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。关闭数据库连接,关闭线程等。

4,Servlet的线程同步问题解决方案
1),不使用成员变量,而使用局部变量,因为局部变量在每个线程中都有各自的实例。所以对Servlet来说,如果要对某个变量做写入操作,一定不要使用成员变量,而要使用局部变量。
2).使用同步代码块,减小同步粒度
3).Servlet实现javax.serlvet.SingleThreadModel(Servlet2.4中已经废弃了该接口),此时Servlet容器将保证Servlet实例以单线程方式运行,也就是说,同一时刻,只会有一个线程执行Servlet的service()方法。

5,servlet与tomcat-- webapps
--myApp
-- WEB-INF
--classes
--lib
--web.xmlServlet没有main()方法,他们受控与另外一个java应用,这个java应用称为容器(Container)。Tomcat就是这么一个容器,web服务器应用(如Apache)得到一个指向Servlet的请求时,服务器不是把这个请求交给Servlet本身,而是交给部署该servlet的容器。要由容器向servlet提供HTTP请求和响应,而且是由容器调用servlet的方法(doGet()和doPost())。容器运行多个servlet线程来处理对同一servlet的多个请求。
工作原理:
1)用户点击一个链接,指向一个servlet而不是一个静态页面。

2)web服务器接到这个请求后转发给容器。容器接着创建两个对象:HttpServletRequest和HttpServletResponse。

3)容器根据请求中的URL找到相应的servlet,为这个请求创建一个线程(如果该类没有被加载,首先加载并创建实例),并把请求对象HtttpServletRequest和响应对象HttpServletResponse传递给这个servlet线程。

4)线程接下来调用service()方法,根据请求的不同,service()方法调用doGet()和doPost()方法。

5)doGet()方法生成动态页面,并把这个页面塞到响应对象里。

6)service()方法结束,随之线程结束,容器把响应对象装换为一个HTTP相应,发送给客户,然后删除请求和响应对象。

6,forward方式:request.getRequestDispatcher("/somePage.jsp").forward(request,
response);
   redirect方式:response.sendRedirect("/somePage.jsp");forword是服务器内部的重定向,他的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。
redirect其实是两次request,
第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,
而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。
7,GET和POST之间的主要区别如下
一般在浏览器中输入网址访问资源都是通过GET方式;在表单提交中,可以通过Method指定提交方式为GET或者POST

      (1)在客户端,Get方式在通过URL提交数据,数据在URL中可以看到;POST将内容隐藏在 HTML 表头(header)。
      (2) GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
      (3) 安全性问题。正如在(2)中提到,使用 Get 的时候,参数会显示在地址栏上,而 Post 不会,post更安全。

8.常用方法
request.getAttribute()是取setAttribute()保存的值,可以为request,session,application存取值。
Request.getParameter()获取request中传过来的参数值
response.setContentType("text/html;charset=GBK");   设置编码。

9,http协议
http超文本传输协议是一种属于应用层的面向对象协议,建立在TCP协议之上的可靠传输
特点:
无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。tcp有连接,但http无连接。http1.1实现了持续连接,就是在第一次建立连接后,连接会持续一段时间后断开。

无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

1)URL
HTTP URL (URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下: http://host[":"port][abs_path] http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号,为空则使用缺省端口80;abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。
eg:
1、输入:www.guet.edu.cn
浏览器自动转换成:http://www.guet.edu.cn/
2、DNS翻译为http:192.168.0.116:8080/index.jsp

2)工作过程
一次HTTP操作成为一个事物:


 过程:TCP的第三次握手,客户端发送http请求报文,服务器收到报文后返回请求文档。
 过程实例



A.客户端与服务器建立连接:TCP三次握手。
B.Http报文分为请求报文和响应报文:



报文由三部分组成,分别是:开始行、首部行、正文
请求报文的开始行叫请求行,响应报文的叫状态行。

3)请求报文
请求行 = 方法 [空格] 请求URI [空格] 版本号 [回车换行] ,如 GET http://192.168.2.217:8080/index.jsp HTTP/1.1
常用方法为GET和POST
 
请求报文实例


 
4)响应报文
状态行=HTTP版本[空格]状态码[空格]解释短语 
状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:表示临时响应并需要请求者继续执行操作的状态代码。
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--所请求的内容在其他服务器,需要再次访问其他服务器,可能是缓存,也可能是代理。
4xx:客户端错误--请求url有语法错误或请求无法实现,妨碍了服务器的处理;或者该客户机未授权登陆该服务器,被拒绝访问。此时服务器是正常的。
5xx:服务器错误:表示服务器在尝试处理请求时发生内部错误。是服务器本身的错误,而不是请求出错。
常见状态代码、状态描述、说明:
200 OK      //客户端请求成功
400 Bad Request  //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden  //服务器收到请求,但是拒绝提供服务
404 Not Found  //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器繁忙,如正在启动和关闭
503 Server Unavailable  //服务不可用,服务器由于维护或者负载过重未能应答。例如,Servlet可能在数据库连接池已满的情况下返回
状态行实例:


 

 
 

10,session and cookie
web会话可简单理解为:用户开一个浏览器,访问某一个web站点,在这个站点点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。而HTTP是无状态的,不可以保存用户信息。因此用cookie和session来保存。Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

1)cookie机制和session机制的区别
具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案(散列表)。
一般购物车用cookie实现,账户登陆权限用session实现。

2)会话cookie和持久cookie的区别
如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。
如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。

3) Session(session与浏览器相关联)
session的两种实现方式:
A.如果浏览器允许cookie就会通过cookie实现,把session的ID放在cookie中,如图


 B.如果不支持cookie,必须对每一个链接编程,用URL重写的方式实现。response.encodeURL(),对URL编码,就是在每一次请求的URL后面加上session的ID。

session的清除:
  1. 服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。Tomcat中Session的默认失效时间为20分钟。
  2. 调用Session的invalidate方法。

11,ServletContext:上下文作用域
对应于JSP 中的Application,是Servlet 与Servlet 容器直接通信的接口,Servlet 容器在启动一个Web app时,会为它创建一个唯一的ServletContext 。同一个Web app的所有Servlet 共享一个ServletContext,对应于所有的客户端,比如统计所有客户端访问该app的次数。session只对应于某一个客户端。

application是全局对象,在程序运行时建立,只被创建一次,application对象可以多用户同时使用。作用范围是当前应用程序上下文。session是会话的意思,一个用户对应一个session,用户访问网站的时候session被建立。

12,JSP
编译后为类servlet。
9种组建
request 用户端请求,此请求会包含来自GET/POST请求的参数
response 网页传回用户端的回应
pageContext 网页的属性是在这里管理
session 与请求有关的会话期
application servlet正在执行的内容
out 用来传送回应的输出
config servlet的构架部件
page JSP网页本身
exception 针对错误网页,未捕捉的例外

response和request的setCharacterEncoding区别
request是从url中读到的参数,response是显示在页面的内容。

session.setAtrrbute和getAtrrbute设置session,散列形式存储

13,代理服务器(WEB高速缓存)


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: