JSP隐式对象和MVC设计模式

 今天我们一起来了解一下关于JSP应用的JSP的隐式对像和MVC设计模式。

  首先我们先来说一下JSP的隐式对象:JSP隐式对象是Web容器加载的一组类的实例。它是可以直接在JSP页面使用的对象。分为4个主要类别:1、 输入和输出对象:控制页面的输入和输出(request、response、out)。

  2、 作用域通信对象:检索与JSP页面的Servlet相关的信息(session、application、pageContext)。

  3、 Servlet对象:提供有关页面环境的信息(page、config)。

  4、 错误对象:处理页面中的错误(exception)。

 

  我们先了解一下输入和输出对象:request对象:request隐式对象表示客户端的请求,包含了所有的请求信息,常用的方法:voidsetContentType(String name):设置作为响应生成的内容的类型和字符编码。

  void sendRedirect(Stringname):发送一个响应给浏览器,指示其应请求另一个URL(会丢失数据,跳转后不再执行sendRedirect方法下面的代码。

  out对象:在JSP页面中应使用out隐式对象来向客户端发送文本形式的实体内容。

  out对象是通过调用pageContext对象的getOut方法返回的,其作用和用法与ServletResponse.getWriter方法返回的PrintWriter对象非常相似。

  JSP页面中的out隐式对象的类型为JspWriter,JspWriter相当于一种带缓存功能的PrintWriter,设置JSP页面的page指令的buffer属性可以调整它的缓存大小,甚至关闭它的缓存。

  JSP页面中的out隐式对象相当于插入到ServletResponse.getWriter方法返回的PrintWriter对象前面的缓冲包装类对象。

 

  只有向out对象中写入了内容,且满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中:设置page指令的buffer属性关闭了out对象的缓存功能写入到out对象中的内容充满了out对象的缓冲区整个JSP页面结束作用域通信对象:pageContext对象是javax.servlet.jsp.PageContext类的实例对象,javax.servlet.jsp.PageContext类是javax.servlet.jsp.JspContext的子类。

  pageContext对象是通过调用JspFactory.getPageContext方法返回的。

  pageContext对象封装了当前JSP页面的运行信息,它提供了返回JSP页面的其他隐式对象的方法。

  在JSP页面中只需将pageContext对象传递给某个Java类的实例对象,在该Java对象中就可以访问和调用其他隐式对象的功能了。

  pageContext对象使用户可以访问当前页面作用域中定义的所有隐式对象。

 

  getException()方法返回exception隐式对象getPage()方法返回page隐式对象getRequest()方法返回request隐式对象getResponse()方法返回response隐式对象getServletConfig()方法返回config隐式对象getServletContext()方法返回application隐式对象getSession()方法返回session隐式对象getOut()方法返回out隐式对象PageContext类中定义了一个setAttribute方法来将对象存储进pageContext对象内部的一个HashMap对象中,同时也定义了一个getAttribute方法来检索存储在该HashMap对象中的对象。

  void setAttribute(String name, ob ject value) ob ject getAttribute(String name)

  (注意:PageContext类除了可以存储和检索自身中的属性对象外,还定义了可以存储和检索其他域范围内的属性对象的方法。)

  在application、session、request、pageContext对象中都可以调用setAttribute方法和getAttribute方法来设置和检索各自域范围内的属性。

  存储在application对象中的属性可以被同一个WEB应用程序中的所有Servlet和JSP页面访问。

  存储在session对象中的属性可以被属于同一个会话的所有Servlet和JSP页面访问。

  存储在request对象中的属性可以被属于同一个请求的所有Servlet和JSP页面访问,例如使用PageContext.forward和PageContext.include方法连接起来的多个Servlet和JSP页面。

  存储在pageContext对象中的属性仅可以被当前JSP页面的当前响应过程中调用的各个组件访问,例如,正在响应当前请求的JSP页面和它调用的各个自定义标签类。

  PageContext类中还提供了对各个域范围的属性进行统一管理的方法,以简化对各个域范围内的属性的访问。

  public void setAttribute(java.lang.String name,java.lang.ob ject value,int scope) public java.lang.ob ject getAttribute(String name,int scope)

 

  其中参数scope的取值为:PageContext.APPLICATION_SCOPE PageContext.SESSION_SCOPE PageContext.REQUEST_SCOPE PageContext.PAGE_SCOPE publicvoid removeAttribute(String name)

  publicvoid removeAttribute(String name,int scope)

  getAttributeNamesInScope方法findAttribute方法PageContext类中定义了一个forward方 法和两个include方法来分别简化和替代RequestDispatcher.forward方法和 RequestDispatcher.include方法的调用:public void forward(java.lang.String relativeUrlPath)throwsjavax.servlet.ServletException,java.io.IOException public voidinclude(java.lang.String relativeUrlPath)

 

  throwsjavax.servlet.ServletException,java.io.IOException public void include(java.lang.String relativeUrlPath,boolean flush)throws javax.servlet.ServletException,java.io.IOException传递给这些方法的资源路径都只能是相对路径,如 果路径以“/”开头,表示相对于当前WEB应用程序的根目录,否则,表示相对于当前JSP所映射到的访问路径。

 

  session对象session对象表示用户的会话状况,用此项机制可以轻易识别每一个用户,能保存和跟踪用户的会话状态。session对象最常用的方法:void setAttribute(String name, ob ject value)

  void getAttribute(String name)

  application对象application对象作用于整个应用程序,所有的客户端窗口都可以共享该对象,从服务器开始就存在,直到服务器关闭为止。application对象最常用的方法:void setAttribute(String name, ob ject value):以名称/值的方式,将一个对象的值存放到application中(存的值的类型为ob ject)。

 

  void getAttribute(String name):根据名称去获取application中存放对象的值(获取的值的类型为ob ject)。

  设置context初始参数。在web.xm l文件适当的位置增加内容:

  <context-param> <param-name>website</param-name> <param-value>www.sohu.com</param-value> </context-param>

  在JSP页面中,使用applicatin对象的getInitParameter()方法可以取得 website参数对应的参数值。在Servlet中用ServletContext对象的同名方法获得参数值。

 

  使用log()方法记录日志。

  可以使用application对象提供的log()方法,实现日志记录功能,在Tomcat服务器中,记录的日志都保存在Tomcat根目录的logs目录下。日志内容分成不同文件进行记录。

  Servlet对象:page对象page对象提供对网页上定义的所有对象的访问。page对象表示页面本身,它是java.lang.ob ject类的一个实例。

  config对象config对象存储Servlet的一些初始信息。config对象是 javax.servlet.ServletConfig接口的一个实例,ServletConfig接口提供方法以检索Servlet初始化参数。 config对象表示编译JSP页面的Servlet初始化数据的配置。

  错误对象exception:exception对象处理JSP页面中的错误:printStackTrace()方法用于显示异常的堆栈跟踪 在上面我们以经介绍了JSP的隐式对象,下面我们来讲一下MVC的设计模式:在开发一个软件之前,必须先设计好其架构,一个基本的架构思想是将软件分成不 同的模块,问题的关键就是如何划分模块。

 

  MVC(模型-视图-控制器)是20世纪80年代为Smalltalk-80编程语言发明的一种软件设计模式,它是一种分离业务逻辑与显示界面的设计方法。

  MVC的模型(Model)部分负责管理程序的业务数据,视图(View)部分负责显示界面,控制器(Controller)部分则负责与用户进行交互(接受请求和选择响应视图)。

  JSP的设计模式:JSP规范给出了使用JSP页面构建Web应用程序的两个方案—JSP模式1和模式2.两个模式的区别在于处理的位置。

  JSP模式1(JSP + JavaBean):在模式1的体系结构中,JSP页面负责处理请求并将响应发送给客户端。

  Model1的典型的交换过程:首先用户通过浏览器调用Web应用中的JSP页面,发送request请求,JSP页面接收到浏览器的请求后,通过调用JavaBean对象的方法从数据库中读取数据,然后JSP页面再把数据返回浏览器,最终在浏览器中显示相应的信息。

  优点:非常适合小型Web项目的快速开发;对Java Web开发人员的技术要求不高。

  弊端:Java和HTML柔和在一起,在Web项目开发的后期和维护阶段会造成很大的困难。

  JSP模式2(MVC):模式2体系结构集成使用了Servlet和JSP页面。在该模式中,JSP页面用于表示层,并且Servlet负责处理各类任务。

  Model2交互过程:首先用户通过浏览器向Web应用中的Servlet发送请求,Servlet接收到请求后实例化JavaBean对象, 调用JavaBean对象的方法,JavaBean对象返回从数据库中读取的数据,Servlet选择合适的JSP,并且把从数据库中读取的数据通过这个 JSP进行显示,最后JSP页面把最终的结果返回给浏览器。

 

  优点:业务逻辑和表示内容得到了很好的分离,这种开发方式适合多人合作开发大型的项目。

  弊端:Web项目开发的难度加大了,对开发人员的技术要求也提高了。

  Servlet作为一个控制器,负责处理请求并创建JSP页面所需的任何Bean.该控制器也负责确定将该请求传递到哪个JSP页面。JSP页面检索Servlet创建的对象,并提取动态内容插入在一个模板中。

  注意:由于模型位于web服务器端,而最终的视图位于用户浏览器端,只有浏览器发出请求后,服务器才会做出响应,没有请求就没有响应,所以在 web应用中难以实现模型的“状态改变通知”事件,视图不能随着模型的改变而自动更新。由于在web应用中无法完全实现真正意义上的mvc模型,模式2只 能算是mvc设计模式的一种变体,有人干脆将他称之为“webMVC”。

时间: 2025-01-02 11:09:25

JSP隐式对象和MVC设计模式的相关文章

JSP 隐式对象

JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明.JSP隐式对象也被称为预定义变量. JSP所支持的九大隐式对象: 对象 描述 request HttpServletRequest类的实例 response HttpServletResponse类的实例 out PrintWriter类的实例,用于把结果输出至网页上 session HttpSession类的实例 application ServletContext类的实例,与应用上下文有关 conf

J2EE探索者:隐式对象的多种用法

j2ee|对象 接着上月对会话作用域的介绍,企业 Java 专家 Kyle Gabhart 深入研究了 JSP 隐式对象的多种用法.接下来,他将介绍 9 个隐式对象,解释每个对象的用途(或者多种用途),最后给出一些怎样在 JSP 编程中使用这些便利工具的最佳实践.您可以到我们的 讨论论坛 中分享您对这篇文章或者 J2EE 探索者 系列中的任何其他文章的想法. 本期的 J2EE探索者 是上个月的 正确处理会话作用域入门 的续篇.除了访问会话作用域之外,JSP 隐式对象还可以用来处理 HTML 参数

J2EE探索者: 隐式对象的多种用法

本期的 J2EE探索者是上个月的 正确处理会话作用域入门 的续篇.除了访问会话作用域之外,JSP 隐式对象还可以用来处理 HTML 参数,转发请求到一个 Web 组件,包括组件的内容.通过 JSP 容器的日志数据.控制输出流,处理异常,等等. 本月,您将学到在 JSP 页面中使用隐式对象.我们首先简要概括 JSP 架构,其中包括了隐式对象.然后,我将介绍每个对象并描述它的核心功能.最后,我们将给出使用每种类型的对象和它提供的容器管理服务的一些最佳实践. 隐式对象简介 JSP 架构背后的理念是提供

JSP中隐式对象用法实例_JSP编程

本文实例讲述了JSP中隐式对象用法.分享给大家供大家参考,具体如下: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServ

关于jsp使用隐式对象的问题

问题描述 关于jsp使用隐式对象的问题 Tomcat版本:7.0.57 现象: 使用${request.name}得不到数据,使用${name}能得到数据.不是很理解 Servlet 类 jsp页面 jsp 编译后的Servlet 解决方案 参考request的setAttribute()用法及request.sendRedirect 与 request.getRequestDispatcher.forward 的区别 request.getRequestDispatcher().forward

《Servlet和JSP学习指南》一3.3 隐式对象

3.3 隐式对象 Servlet容器将几个对象传给它所运行的Servlet.例如,在Servlet的service方法中获得HttpServletRequest和HttpServletResponse,并在init方法中获得ServletConfig.此外,还可以通过在HttpServletRequest对象中调用getSession获得一个HttpSession. 在JSP中,可以通过使用隐式对象来获取那些对象.表3-1列出了隐式对象. 例如,隐式对象request表示由Servlet/JSP

JSP的九个隐式对象

JSP使用脚本元素作为一种简易方法在模板数据中嵌入java代码,这些脚本元素在JSP翻译成Servlet的阶段,都被转化为Servlet中的java代码. JSP引擎在调用JSP对应的_jspServlet时,会传递或创建9个与web开发相关的对象供_jspServlet使用.JSP技术的设计者为便于开发人员在编写JSP页面时获得这些web对象的引用,特意定义了9个相应的变量,开发人员在JSP页面中通过这些变量就可以快速获得这9大对象的引用. JSP翻译成Servlet代码都存在有: 1 pub

理解jsp模式2架构:MVC设计模式探险

js|架构|设计 摘要:通过开发一个熟悉的基于web的购物店,你将学到如何工具化mvc设计模式并且真正地在使用jsp的时候分离内容和表现.Govind Seshadri 会向你展示这是多么的容易(2000字(原文字数)). 尽管相对抛开最近的相关介绍而言,jsp技术正在很好地以自己的方式成为卓越的创建提供动态web内容的应用程序的java技术.java开发者因为许多不同的理由喜爱jsp.一些人喜欢它给交互式web页面带来了"一次编写,到处运行"的变化这个事实:另一些人欣赏它易学易用并且

关于隐式对象转换问题

问题描述 privateSqlParameterobjparm;objparm.SourceVersion=objSqlDataAdapter.InsertCommand.Parameters.Add(newSystem.Data.SqlClient.SqlParameter("@Description",System.Data.SqlDbType.VarChar,50));提示错误:无法将类型System.Data.SqlClient.SqlParameter隐式转换为 System