疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Servlet学习笔记


 

   

  1.在互联网中,只要是能访问的资源,那么这个资源一定可以下载。(输入输出流)

  2.javaEE 定义的很多事接口(标准),由TomCat来实现具体的类,因为是TomCat实现了它的标准提供给我们开发使用。

  (这些类存放在Tomcat 7.0libservlet-api.jar)

  3.既然这些类都在Tomcat 7.0libservlet-api.jar中,那么我们要使用的话,第一步肯定是要导入(MyEclipse已经集合这些东西)。

  4.servlet是服务器端小程序,不只是单纯的WEB服务器,而是只要是支持servlet规范的都可以(FTP服务器等)。

  5.关于javax.servlet.servlet接口:我们不能直接实现这个接口,因为我们写得是应用于Http服务的Servlet(也就是应用于web服务器的),这个接 口有个service()方法,这个方 法是被容器直接调用的,对外提供服务。

  6.HttpServlet()构造方法由容器调用,当一个新的客户端请求访问web资源的时候调用(用于实例化一个Servlet对象)

  7.请求的时候,容器会根据请求的内容和提交的方法来调用对应的servlet的doXxx(),实际上是先调用(service()方法)

  8.HttpServletRequest request对象封装了客户端对服务器端的一系列的请求,然后服务器再这些请求交给容器,容器交给Servlet来处理。

  9.HttpServletResponse response对象封装了服务器对客户端请求的响应,用于返回给客户端的信息。

  10.Servlet要想在web服务器中运行,那么就必须进行注册。所谓的注册就是通过部署描述符告诉容器自己的位置(包.类名称),有因为自己被编译成*.class后放在了

  WEB-INF 目录下了(WEB-INF是安全级别最高的,用户不可访问),故此需要映射路径,通过映射的方式来访问该Servlet。

  11.关于当客户端发生请求时,容器怎么找到Servlet:首先找到该项目的web.xml文件;然后对比地址栏的URL地址和在web.xml中中的 URL有没有一样的。 如果没有则报404错误,如果有则通过URL对应的的名字,最后根据的名字找到该Servlet的类所在地,通过该类由容器生 成一个对象来处理请求。

  12./servlet/a表示的是:项目目录下的servlet文件夹下的a文件;“/”表示的项目的根目录。

  13.Servlet对象只会被构造一次,初始化一次,销毁一次,处理服务多次(也就是说,不管你请求多少次,为你提供服务的都是同一个对象)。

  14.HTTP具有无连接性,无连接性就是一次请求-响应之后就没有连接了(双方断开了通信)故此要设置session保存范围属性来告诉服务器之后的请求是不是同一个用户在操 作。

  1)服务器通过响应请求把一些东西记录上客户端上,这些东西就是Cookie。

  2)也就是说服务器在响应时,向客户端写入一些文本文档,而且客户端可以阻止服务器写入。

  3)webapp只能获取自己的Cookie(比如新浪不能获取网易的Cookie)

  4)每个浏览器都有一个独一无二编号(为了防止浏览器上面有同样的Cookie时无法判断)。

  5)Cookie以“名-值”对的形式保存的(类似于Map)

  6) Cookie的应用:记住密码,一周内免登陆等。。。

  注:之所以只能是文本文档,是为了防止恶意网站写入可执行文件(*.exe)来破坏客户端。

  15.Cookie分两种:一种是设置了它的生命周期setMaxAge()它将会放在文件中,这个生命周期内服务器都能拿到这个Cookie的内容。

  一种是没有设置生周期,那么就是相当于存在内存之中,只有浏览器的窗口打开着,这种Cookie就存在着;关闭则消失。

  16.一个servlet或者JSP设置的Cookie只能被同一个路径下面或者子路径下面的servlet或者JSP读取。

  例如:A/a.jsp设置的Cookie;A目录的文件能读取,A目录的子目录能读取,A的上级目录不能读取。

  注:这里的路径不是指真实路径,而是URL,映射的路径。

  17.会话跟踪:session也是用来记录一系列状态的,session和Cookie的区别就是:

  1)Cookie是记录在客户端的,不可靠,不安全

  2)session记录在服务器端的

  18.session的原理:当浏览器访问服务器的某个页面的时候,服务器会在内存里开辟一块内存,这块内存就叫session而且会跟浏览器关联在一起的,

  这个session只能由关联的浏览器来访问(另外一个浏览器,或者是同一个浏览器的新的窗口则不能访问),多个浏览器访问服务器,则会

  开辟多个session内存区域,每个session一一对应浏览器关联起来。

  注:HTTP协议是无连接性,当浏览器再次访问服务器时,怎么知道该浏览器对应着哪个session呢?这时候就必须有个机制来解决,这个机制就是Cookie机制:在浏览器 访问服务器的时候,服务器给浏览器关联session的时候,还给浏览器分配一个独一无二编号,同时还给和浏览器 关联的session分配同样的编号,这个编号就是 sessionID。

  19.session的两种实现方法:一种是通过Cookie机制,一种是通过URL重写。

  注:URL重写就是当浏览器不支持Cookie的时候,通过URL的方式把sessionID发给服务器;在链接加上response.encodeURL()。

  20.Httpsession session = request.getSession(true)表示的是,如果有session就拿到当前的session,没有就新建一个。

  21.session可以存东西,也就是说session这块内存里头可以存放一些属性(对象),通过这个属性来进行一些判定(登录验证)。

  注:session没有像Cookie拥有路径访问的问题。

  注:同一个application下的Servlet/JSP可以共享同一个session(前提是在一个客户端窗口下的)。

  22.request.getRequestDisPatcher(URL).forward(req,res)与thisServletContext.getRequestDisPatcher(URL).forward(req,res)的区别

  1)前者可以相对路径,后者只能是绝对路径。