servlet—jsp日集中总结总结

1.JSP内置对象简单概述:

   (1) HttpServletRequest类的Request对象

       作用:代表请求对象,主要用于接受客户端通过HTTP协议连接传输到服务器端的数据。

       getParameter(String name); //表示表单的参数名

       getParameterValues(String name); //使用得到是String[];

       setAttribute(String name,Object obj); //设置名字为name的obj,值为obj;

       getAttribute(String name); //返回由name指定的属性值,如果不存在就返回null;
       
       getCookies(); //获取cookie

  (2) HttpServletResponse类的Respone对象

      作用:代表响应对象,主要用于向客户端发送数据

      addCookie(Cookie cookie); //添加cookie

      sendRedirect("Web.jsp"); //重定向

(3) JspWriter类的out对象

    作用:主要用于向客户端输出数据; Out的基类是JspWriter

    out.println("");

(4) HttpSession类的session对象

    作用:主要用于来分别保存每个用户信息,与请求关联的会话;
    会话状态维持是Web应用开发者必须面对的问题。
   
    setAttribute(String name,Object obj); //设置名字为name的obj,值为obj;

   getAttribute(String name); //返回由name指定的属性值,如果不存在就返回null;

(5) ServletContext类的application对象

    作用:主要用于保存用户信息,代码片段的运行环境;

    它是一个共享的内置对象,即一个容器中的多个用户共享一个application对象,故其保存的信息被所有用户所共享.

(6) PageContext类的PageContext对象

      作用:管理网页属性,为JSP页面包装页面的上下文,管理对属于JSP中特殊可见部分中已命名对象的访问,它的创建和初始化都是由容器      来完成的。

(7) ServletConfig类的Config对象

     作用:代码片段配置对象,表示Servlet的配置。

(8) Object类的Page(相当于this)对象

    作用:处理JSP网页,是Object类的一个实例,指的是JSP实现类的实例,即它也是JSP本身,只有在JSP页面范围之内才是合法的。

(9)Exception

     作用:处理JSP文件执行时发生的错误和异常

     只有在错误页面里才可以使用,前提是:在页面指令里isErrorPage=true  的页面中;

     getMessage();

如:

a.jsp:


<%@ page contentType="text/html;charset=gb2312" errorPage="error.jsp"%>

error.jsp:


<%@ page contentType="text/html;charset=gb2312" isErrorPage="true"%>

则:在error.jsp页面中便可使用exception内置对象,用法如下:


     注:pageContext中的属性默认在当前页面是共享的;

         session中的属性是在当前session中是共享的;

         ServletContext对象中的属是则是对所有页面都是共享的;


2.为什么会出现jsp技术?
  虽然servlet功能非常的强大,但有一个很大的缺点:

     那就是:在开发过程中,发现servlet做界面非常的不好,很麻烦。

  所以就出现了jsp这种技术,jsp技术它弥补了界面不好做的这一观点,jsp的出现并不是代表servlet会退出历史舞台,它只是对servlet的一种补充,也不是对servlet完全的否定,servlet肯定是jsp基础的一种基础,同时jsp肯定是已servlet为基础的,所以jsp并不是一种全新的技术,它是在servlet基础上发展起来的。

 jsp=html+java片段+jsp标签+javascript(css)---> 比较综合

 jsp之所以功能强大是因为jsp可以与javabean结合使用(即:jsp作前台(相当于界面),javabean作后台(相当于逻辑层))






1.对session的理解
   我们可以把session看作是一张表,这张表有两列。每行就是session的一个属性,每个属性包含有两部分,一个是该属性的名字(String),另一个是它的值(Object)。
 (1)得到session:
    HttpSession session=request.getSession(true);
 (2)向session添加属性
    session.setAttribute(String name,Object value);
 (3)从session得到某个属性
    String name=session.getAttribute(String name);
 (4)从session删除掉某个属性
    session.removeAttribute(String name);
 (5)删除所有的session
    session.setMaxInactiveInterval(0);
 (6)设置session的有效时间为秒,注(指的是锏隔时间)
    session.setMaxInactiveInterval(ms);
    int getMaxInactiveInterval(); //获取session的有效时间
 (7)session中属性存在的默认值是30min,你也可以修改它存在时间:
    a.修改web.xml (在Tomcat — conf—web.mxl里面改)
    b.在程序中用setMaxInactiveInterval(ms)这个方法去进行修改.
 (8)当某个浏览器访问网站时,服务器会给浏览器分配一个唯一的session id,并    以此来区分不同的浏览器(也就是不同的客户端)。
 (9)因为session得各个属性要占用服务器的内存,因此软件公司都是在迫不得己    的情况下,才使用。




1.  JSP中九大内置对象为:
  request          请求对象             类型     javax.servlet.ServletRequest        作用域    Request

  response         响应对象              类型     javax.servlet.SrvletResponse        作用域    Page

  pageContext      页面上下文对象        类型     javax.servlet.jsp.PageContext       作用域    Page

  session          会话对象              类型     javax.servlet.http.HttpSession      作用域    Session

  application      应用程序对象          类型     javax.servlet.ServletContext        作用域    Application

  out              输出对象              类型     javax.servlet.jsp.JspWriter         作用域    Page

  config           配置对象              类型     javax.servlet.ServletConfig         作用域    Page

  page             页面对象              类型     javax.lang.Object                   作用域    Page

  exception        例外对象              类型     javax.lang.Throwable                作用域    page

2.对MVC的理解
  大家都知道MVC不是设计模式,是一个比设计模式更大一点的模式,应该说是MVC它是一种软件开发架构模式,它包含了很多的设计模式,最为密切的是一下三种:
Observer(观察者模式)
Composite(组合模式)
Strategy(策略模式)
所以说MVC模式有称为复合模式。
MVC(Model-View-Controller)模式的基本思想是把,数据,显示,处理相分离。模型(Model)负责数据管理,视图(View)负责数据显示,控制器(Controller)负责业务逻辑和响应策略。
MVC架构把数据处理,程序输入输出控制及数据显示分离开来,并且描述了不同部件的对象的通信方式,使得软件可维护性,可扩展性,灵活性以及封装性大大提高; MVC(Model-View-Controller)把系统的组成分解为M(模型)、V(视图)、C(控制器)三种部件。视图表示数据在屏幕上的显示。控制器提供处理过程控制,它在模型和视图之间起连接作用。控制器本身不输出任何信息和做任何处理,它只负责把用户的请求转成针对Model的操作,和调用相应的试图来显示Model处理后的数据。


3 MVC架构的优点及不足
3.1 MVC的优点
MVC的优点体现在以下几个方面:
(1) 有利于团队开发分工协作和质量控制,降低开发成本。
(2) 可以为一个模型在运行时同时建立和使用多个视图。变化-传播机制可以确保所有相关的视图及时得到模型数据变化,从而使所有关联的视图和控制器做到行为同步。
(3) 视图与控制器的可接插性,允许更换视图和控制器对象,而且可以根据需求动态的打开或关闭、甚至在运行期间进行对象替换。
(4) 模型的可移植性。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。需要做的只是在新平台上对视图和控制器进行新的修改。
(5) 潜在的框架结构。可以基于此模型建立应用程序框架,不仅仅是用在设计界面的设计中。
3.2 MVC的缺点
MVC的不足体现在以下几个方面:
(1)增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
(2)视图对模型数据的访问效率低。视图可能需要多次调用Model才能获得足够的显示数据。
(3)完全理解MVC并不是很容易。使用MVC需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考。 同时由于模型和视图要严格的分离,这样也给调试应用程序到来了一定的困难。MVC模式可以分解为以下设计模式
在GOF书的 Introduction中,有一小节是"Design Patterns in Smalltalk MVC"即介绍在MVC模式里用到的设计模式。它大概向我们传达了这样的信息:合成模式+策略模式+观察者模式约等于MVC模式(当然MVC模式要多一些东西)。也就是说它在大部分情况




B/S(浏览器\服务器)
C/S(VB、Delphi、VC、PB)

Java Web [B/S] java servlet jsp struts hibernate(ibatis) spring 【SSH2】S2SH
Web服务器 Web容器
1、    Web服务器(硬件、软件)Apache:静态网页 html
2、    Web容器 Tomcat:动态网页
容器要做哪些事情:网络连接socket,做监听,线程安全,内存管理…

数据持久化:数据库持久化
Servlet+HTML

Web:
HTML

Index.jsp URL
1、    发送请求request  B
2、    响应  response  S
HTTP (应用层)网络七层协议 FTP SMTP
TCP/IP协议簇

GET/POST
Form method = “POST”
HTTP网络协议 头/体/尾
MIME类型

HTTP响应的首部:
HTTP/1.1 200 OK
Set-Cookie:xxx
Content-Type:text/html


端口 每个端口分给一个应用
8080【tomcat】

65536【0-65535】
POP3邮件服务:110 FTP:21
Tomcat:CRM、OA、ERP
8080(CRM) 8081:OA  URL->资源
web.xml  

URL:    IP(网址):8080/应用名
tomcat部署应用的目录结构

Servlet沿革
1、CGI(公共网关)
COM (组件)
JavaBean(组件)
3、    Sun Servlet

CGI:进程
Servlet:线程

Windows ->linux\unix\solaris  jdbc

Servlet
Jsp[1、跳转;2、业务逻辑的判断3、操作数据库4、显示页面…]
MVC(Model+View+Controller)
Model1、Model2

Servlet生命周期:
1、    init()
2、    service()反复进行service //post、get
3、    destroy()

javax.servlet.*;
javax.servlet.http.*;  request/response

HttpServlet
doPost()
doGet()

Role:客户、部署人员、开发人员

任务                    Web服务器(硬件服务器+Apache)            Web容器                                   Servlet

创建请求和响应对象                                     在开始线程之前创建    

调用service()方法                                    Service()方法、doGet()、doPost()    
 
开始一个线程来处理请求                                    开始一个servlet线程    

把响应对象转换为一个HTTP响应                            用于与客户浏览器对话
    
了解HTTP          用于与客户浏览器对话        

把HTML增加到响应对象                                                                         组装动态内容

有响应对象的一个引用                                      容器传递给servlet                         打印响应信息

在部署描述文件中查找URL                                     Web.xml:servlet    

删除请求和响应对象                                   Servlet一旦结束就删除请求和响应对象    

协调生成动态内容    知道如何转发到容器                知道要调用什么方法    

管理生命周期                                             调用服务等方法    

名字与部署描述文件中的<servlet-class>元素匹配            

容器:Web容器、EJB容器
J2EE应用服务器:
Tomcat
Jetty:Web服务器 (jar WEB服务)
Resin:JSP、Servlet、EJB

JBOSS
WAS:websphere
Weblogic

****Web服务器+容器+servlet


1. 什么是cookie?
    服务端在客户端保存用户的信息,比如登录名,密码等,这就是cookie。

2.可以通过sendRedirect()方法将信息传送给下一个界面:比如
   sendRedirect("welcome?username=yangjie");
   它的优点是:传送信息的速度比较快。
   它的缺点是:它只能传送字符串,而不能传送一个对象。
3.隐藏表单,这是最常见的一种方式,也是最简单,但有时该技术非常管用.比如
  <form action=login>
     <input type=hidden name=a value=b>
  </form>



1.什么是servlet?
     servlet是一个用Java编写的在服务器上运行以处理客户请求的小程序,具体运行在servlet引擎管理的JVM上; servlet容器负责servlet     和用户的通信以及调用servlet的方法;servlet和用户通信采用请求/响应模式,以动态形式扩展Web服务器的功能。

2.什么是容器?
   servlet没有main()方法,它们受控于另一个Java应用,这个应用称为容器。
   Tomcat就是这样一个容器。如果Web服务器应用(如Apache)得到一个指向某servlet的请求(而不是其它请求,如请求一个普通的静态html页面),此时服务器不是把这个请求交给servlet本身,而是交给部署该servlet的容器。要有容器向servlet提供HTTP请求和响应,而且要由容器调用servlet的方法,如doGet()或doPost()。

3.容器能提供什么?
   (1).通信支持
          利用容器提供的方法,轻松地让servlet与Web服务器对话。无需自己建立ServletSocket监听端口、创建流等。容器知道自己与Web服务器之间的协议,所以你的servlet不必担心Web服务器(如Apache)和你自己的Web代码之间的API。你要考虑的只是如何在servlet中实现业务逻辑。
   (2).生命周期管理
          容器控制着servlet的生与死。它会负责加载类、实例化和初始servlet、调用servlet方法,并使servlet实例能够被垃圾回收。有了容器的控制,你就不用太多的考虑资源管理了。
   (3).多线程支持
          容器会自动的为它接受的每个servlet请求创建一个新的java线程。针对客户请求,如果servlet已经运行完相应的HTTP服务方法,这个线程就会结束(也就是会死掉)。这并不是说不用考虑线程安全性,还是会遇到同步的问题。不过,由服务器创建和管理多个线程来处理多个请求,这样确实能让你少做很多工作。
   (4).声明方式实现安全
          利用容器,可以使用XML部署描述文件来配置(和修改)安全性,而不必将其硬编码写到servlet(或其他)类代码中。想象一下,不用去改你的java源文件,也不用重新编译,你就能管理和修改安全性配置,这是多么吸引人呀!
  (5).Jsp支持
       负责把Jsp代码翻译成真正的java。

4.容器如何处理请求?
     (1).用户点击一个链接,其URL指向一个servlet而不是静态页面。
     (2).容器“看出来”这个请求是一个servlet,所以容器创建两个对象:
      HttpServletResponse;
          HttpServletRequest。
     (3).容器根据请求中的URL找到正确的servlet,为这个请求创建或分配一个线程,并把请求和响应对象传递给这个servlet线程。
     (4).容器调用servlet的service()方法。根据请求的不同类型,service()方法会调用doGet()或doPost()方法。eg:假设请求是一个HTTP GET请求。
     (5).doGet()方法生成动态页面,并把这个页面“填入”响应对象。要记住,容器还有响应对象的一个引用!
     (6).线程结束,容器把响应对象转换为一个HTTP响应,把它发回给客户,然后删除请求和响应对象。




1.forward(请求转发)与redirect(重定向)的区别
    ( Forward是服务器端请求,是servlet提供的一种技术,服务器根据请求的url找到请求的页面,对浏览器而言,这一过程是不透明的,好像什么也没发生一样,浏览器的地址栏不会显示被请求的url页面地址(显示的仍是上次请求的服务器端的url地址),从HTTP协议的角度,只发生一次的请求响应过程
Redirect是客户端的请求,客户端根据服务器传回的地址,重新向服务器发出请求,浏览器的地址栏显示的是新请求的url地址, 从http协议的角度,发生了两次请求响应的过程 )

   (1).重定向是HTTP协议定义的功能,要经过两次HTTP通信过程,第一次用于获取资源的实际地址,第二次用之前得到的地址发出请求, 这个过程对浏览器是可见的;
    请求转发是servlet技术本身的特点,转发的过程是在服务器内部进行,对浏览器是不透明的,它认为它所发送的地址实际上得到的就是这些内容; 从HTTP角度看,只有一次通讯过程

  (2).重定向只能转向新的资源,功能较单一;  请求转发不但可以转向新的资源,也可将其它资源和本身的生成的内容结合起来,功能很丰富

  (3).重定向适用范围广,因为它是HTTP协议定义的,不但可以重定向统一web程序的其它资源,也可以重定向到其它web程序甚至其它网站;  而请求转发是servlet本身的一种机制,通常只在同一web程序内部转发,从而使它的可用范围受到限制。

2.重定向与转向(请求分派)的区别?
   重定向:response.sendRedirect(“http://www.163.com”);
   (转向)请求分派:RequestDispatcher view = request.getRequestDispatcher(“result.jsp”);
           view.forward(request,response);
重定向与请求分派的最大区别:重定向让客户来完成工作,而请求分派要求服务器上的某某来完成任务。
所以,记住:重定向=客户,请求分派=服务器!

   


API                    隐式对象

JSPWriter             out
HttpServletRequest    request
HttpServletResponse    response
HttpSession            session
ServletContext            application
ServletConfig            config
Throwable            exception
PageContext            pageContext
Object                    page


容器如何处理JSP
 (1).查看指令,得到转换时可能需要的信息。
 (2).创建一个HttpServlet子类【对于Tomcat 5,所生成的servlet会扩展:org.apache.jasper.runtime.HttpJspBase】
 (3).如果一个page指令有import属性,它会在类文件的最上面(package语句下面)写import语句。【对于Tomcat 5,package语句是              package org.apache.jsp;】
 (4).如果有声明,容器将这些声明写到类文件中,通常放在类声明下面,并在服务方法前面。
 (5).建立服务方法。服务方法的具体方法名是_jspService()。_jspService()由servlet超类被覆盖的service()方法调用,要接收              HttpServletRequest和HttpServletResponse参数在建立这个方法时,容器会声明并初始化所有隐式对象。
 (6).将普通的HTML、java脚本和表达式放到服务方法中,完成格式化,并写出至PrintWriter响应输出。

JSP中的属性
    Servlet中                                            JSP中—使用隐式对象
应用    getServletContext().setAttribute(“bar”,barObj);    application.setAttribute(“bar”,barObj);
请求    request.setAttribute(“bar”,barObj);                    request.setAttribute(“bar”,barObj);
会话    request.getSession().setAttribute(“bar”,barObj);    session.setAttribute(“bar”,barObj);
页面    不适用!                                            pageContext. setAttribute(“bar”,barObj);

特殊的使用PageContext得到属性的方法:
findAttribute(String name):对应任何作用域的方法












API                    隐式对象

JSPWriter             out
HttpServletRequest    request
HttpServletResponse    response
HttpSession            session
ServletContext            application
ServletConfig            config
Throwable            exception
PageContext            pageContext
Object                    page


容器如何处理JSP
 (1).查看指令,得到转换时可能需要的信息。
 (2).创建一个HttpServlet子类【对于Tomcat 5,所生成的servlet会扩展:org.apache.jasper.runtime.HttpJspBase】
 (3).如果一个page指令有import属性,它会在类文件的最上面(package语句下面)写import语句。【对于Tomcat 5,package语句是              package org.apache.jsp;】
 (4).如果有声明,容器将这些声明写到类文件中,通常放在类声明下面,并在服务方法前面。
 (5).建立服务方法。服务方法的具体方法名是_jspService()。_jspService()由servlet超类被覆盖的service()方法调用,要接收              HttpServletRequest和HttpServletResponse参数在建立这个方法时,容器会声明并初始化所有隐式对象。
 (6).将普通的HTML、java脚本和表达式放到服务方法中,完成格式化,并写出至PrintWriter响应输出。

JSP中的属性
    Servlet中                                            JSP中—使用隐式对象
应用    getServletContext().setAttribute(“bar”,barObj);    application.setAttribute(“bar”,barObj);
请求    request.setAttribute(“bar”,barObj);                    request.setAttribute(“bar”,barObj);
会话    request.getSession().setAttribute(“bar”,barObj);    session.setAttribute(“bar”,barObj);
页面    不适用!                                            pageContext. setAttribute(“bar”,barObj);

特殊的使用PageContext得到属性的方法:
findAttribute(String name):对应任何作用域的方法


阅读更多
换一批

没有更多推荐了,返回首页