JavaWeb – JSP:概述和语法,内置对象,JavaBean 组件,MVC(javaweb中jsp)

JavaWeb - JSP:概述和语法,内置对象,JavaBean 组件,MVC(javaweb中jsp)

JSP 的概述

概念

JSP 是 Java Server Pages 的简称,跟 Servlet 一样可以动态生成 HTML 响应, JSP 文件命名为 xxx.jsp。

与 Servlet 不同,JSP 文件以 HTML 标记为主,然后内嵌 Java 代码段,用于处理动态内容。

示例

<%@ page import="java.util.Date" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><html> <head> <title>Hello Time</title> </head> <body> 现在的时间是:<%= new Date()%> </body></html>

JSP 与 Servlet 的关系

  • JSP 在静态 HTML 内容中嵌入 Java 代码,Java 代码被动态执行后生成 HTML 内容;Servlet 在 Java 代码中通过 HttpServletResponse 对象动态输出 HTML 内容。
  • JSP 经编译后就变成了 Servlet。JSP 的本质就是 Servlet,JVM 只能识别 Java 的类,不能识别 JSP 的代码,Web 容器将 JSP 的代码编译成 JVM 能够识别的 Java 类。
  • JSP 更擅长表现于页面显示,servlet 更擅长于逻辑控制。
  • Web 浏览器发送 HTTP 请求到服务端,被 Servlet 获取并进行处理(例如参数解析、请求转发);Servlet 调用核心业务逻辑获得处理结果;Servlet 将逻辑处理结果交给 JSP,动态输出 HTML 内容;动态生成的 HTML 内容返回到浏览器显示。

JSP 的语法

JSP 语法结构

声明区,程序代码区,表达式,注释,指令和动作,内置对象

声明区

基本语法:<%! %>

可以定义全局变量、方法、类。

<%! int i; public void setName(){ ... }%>

程序代码区

基本语法:<% 程序代码区 %>

可以定义局部变量以及放入任何的Java程序代码。

<% int j; for (int k=0; k<10; k ) { ... }%>

表达式

基本语法:<%= %>

可以输出一个变量或一个具体内容,但 = 后面必须是字符串变量或者可以被转换成字符串的表达式。

不需要以 ; 结束,因为只有一行。

<%= "hello world" %><%= i 1 %>

注释

注释的内容不会被执行。

<!-- HTML 文件的注释,浏览器可以查看到 --><%-- JSP 文件的注释,浏览器看不到 --%><% // Java 语言中的单行注释,浏览器看不到 /* Java 语言中的多行注释, 浏览器看不到 */%>

指令和动作

指令格式:<%@指令 属性=“属性值” %>

指令的属性可以设定多个。

JSP常用指令有:page、taglib、include。

page 指令

用于导包和设置一些页面属性,常用属性如下:

  • import 导入相应的包,惟一允许在同一文档中多次出现的属性
  • contentType 设置 Content-Type 响应报头,标明即将发送到浏览器的文档类型
  • pageEncoding 设置页面的编码
  • language 指定页面使用的语言
  • session 控制页面是否参与 HTTP 会话
  • errorPage 处理当前页面中抛出但未被捕获的任何异常
  • isErrorPage 当前页是否可以作为其他页面的错误处理页面

taglib 指令

用来扩展 JSP 程序的标签元素,引入其他功能的标签库文件。

<!-- prefix 属性用于指定库前缀 --><!-- uri 属性用于指定库的标识 --> <%@taglib uri="tagLibary" prefix="prefix" %><!-- 引入第三方的标签库 --><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

include 指令

用于引入另一个 JSP 程序或 HTML 文件等。

JSP 引擎会在 JSP 文件的转换时期先把 file 属性设定的文件包含进来,然后开始执行转换及编译的工作。

<%@include file="被包含的文件地址" %>

jsp:include

jsp:include 动作用于引入另一个 JSP 程序或 HTML 文件等。

执行到 include 时,被 include 的文件才会被编译。

如果 include 的是 jsp 文件,那它暂时不会被转换成 Servlet 文件。

<jsp:include page="URLSpec" flush="true"/><jsp:include page="URLSpec" flush="true"> <jsp:param name="key" value="value"/></jsp:include>

include 指令和 jsp:include 动作的区别

include 指令是在 JSP 程序的转换时期就将 file 属性所指定的程序内容嵌入再编译执行(静态包含)。

jsp:include 动作在转换时期是不会被编译的,只有在客户端请求时期被执行到才会被动态的编译载入(动态包含,推荐)。

jsp:forward

jsp:forward 动作用于在 JSP 中实现转发,将请求转发到另一个指定的 JSP 程序或者 Servlet 中处理。

<jsp:forward page="urlSpec" flush="true"/><jsp:forward page="urlSpec"> <!-- 用于指定参数和其对应的值 --> <jsp:param name="key" value="value"/></jsp:forward>

JSP 内置对象

基本概念

在 JSP 程序中有 9 个内置对象由容器为用户进行实例化,程序员可以不用定义就直接使用这些变量。

在 JSP 转换成 Servlet 后,会自动追加这些变量的定义,使用内置对象可以简化 JSP 的开发。

out 内置对象

该对象类型是 JSPWriter。

该对象是一个缓冲的输出流,用来给客户端输出信息。

  • void println(String x) 向客户端输出各种类型数据
  • void newLine() 输出一个换行符
  • void close() 关闭输出流
  • int getBufferSize() 返回缓冲区的大小
  • int getRemaining() 返回缓冲区中未使用的字节数
  • void flush() 输出缓冲区里的数据
  • void clearBuffer() 清除缓冲区里的数据,同时把数据输出到客户端
  • void clear() 清除缓冲区里的数据,但不把数据输出到客户端

request 内置对象

该对象封装的是调用 JSP 页面的请求信息,它是 HttpServletRequest 接口的一个实例。

该对象的属性值只在一个请求中保存。

  • String getMethod() 返回客户端向服务器端传送数据的方式
  • String getParameter(String name) 返回客户端向服务器端传送的参数值
  • String[] getParameterValues(String name) 获得指定参数的所有值
  • String getRequestURI() 获得请求地址
  • String getRemoteAddr() 返回发送请求的客户端或最后一个代理的 IP 地址
  • int getRemotePort() 返回发送请求的客户端或最后一个代理的端口号
  • String getServerName() 获取服务器的名字
  • int getServerPort() 获取服务器端的端口
  • void setAttribute(String name, Object o) 在此请求中存储属性。属性在请求之间重置
  • Object getAttribute(String name) 将指定属性的值作为对象返回,若不存在则返回空值

response 内置对象

该对象作用是响应信息,用于给客户端输出相应的处理结果,它是 HttpServletResponse 接口的一个实例。

该对象经常用于设置 HTTP 标题,添加 cookie、设置响应内容的类型和状态、发送 HTTP 重定向和编码 URL。

  • void addCookie(Cookie cookie) 添加一个 Cookie 对象,用于在客户端保存特定的信息
  • void addHeader(String name, String value) 添加 HTTP 头信息,该 Header 信息将发送到客户端
  • boolean containsHeader(String name) 判断指定名字的 HTTP 文件头是否存在
  • void sendRedirect(String location) 重定向 JSP 文件
  • void setContentType(String type) 设置类型与编码方式

session 内置对象

该对象表示浏览器和服务器之间的一次会话;一次会话可以包含多次请求,在多次请求之间可以借助 session 对象存储信息,它是 HttpSession 类型的一个实例。

该对象的属性值在一次会话范围中保存,保存在服务器端,只要不关闭浏览器,默认半个小时内都可以访问。

  • void setAttribute(String name, Object value) 使用指定的名称将对象绑定到此会话
  • Object getAttribute(String name) 返回在此会话中用指定名称绑定的对象,如果没有对象在该名称下绑定则返回空值

application 内置对象

该对象代表全局上下文,是一个 web 程序的全局变量,它是 ServletContext 类型的一个实例。

该对象在整个服务器上保存数据,所有用户共享。

  • void setAttribute(String name, Object object) 将对象绑定到此 servlet 上下文中的给定属性名
  • Object getAttribute(String name) 返回给定名称的 servlet 容器属性,若没有该名称的属性返回 null

pageContext 内置对象

该对象表示 JSP 页面上下文,是 PageContext 类型的对象,可以使用这个对象来管理其他的隐含对象。

该对象只在一个页面中保存数据。

  • void setAttribute(String name, Object value, int scope) 使用适当的作用域设置指定的名称和值
  • Object getAttribute(String name, int scope) 返回指定作用域中名称关联的对象,若找不到则返回 null
  • ServletRequest getRequest() 获取请求对象
  • ServletResponse getResponse() 获取响应对象
  • HttpSession getSession() 获取会话对象
  • ServletConfig getServletConfig() 获取配置对象
  • JspWriter getOut() 获取输出对象
  • Object getPage() 获取页面对象
  • Exception getException() 获取异常对象

page 内置对象

该对象的类型是 Object。

该对象是 JSP 页面本身。

config 内置对象

该对象的类型是 ServletConfig。

该对象是 Servlet 配置对象。

exception 内置对象

该对象是 Throwable 的实例,表示的是 JSP 的异常信息,作用是捕获网页异常。

如果要使用它,必须将跳转的错误页面(如 error.jsp)的 page 指令的 isErrorPage 属性设置成 true。

单个页面的处理方式:

<%@page errorPage="error.jsp" %>

在 web.xml 中配置统一的异常处理页面:

<error-page> <exception-type>java.lang.Throwable</exception-type> <location>/error.jsp</location></error-page>

JavaBean 组件

基本概念

JavaBean 是使用 Java 语言开发的一个可重用的组件,在 JSP 开发中可以使用 JavaBean 减少重复代码,使整个 JSP 代码的开发更加简洁。

JavaBean 本质上就是 Java 类,通常要求如下:

  • 属性 – 全部私有化,通过 get 和 set 方法进行访问。
  • 方法 – 必须是 public 关键字修饰。
  • 构造器 – 必须有无参构造方法。

使用方式

使用 jsp:useBean 的方式创建 javaBean 实例;保存范围有 page|request|sessin|application,默认为 page 范围。

<jsp:useBean id="对象名" scope="保存范围" class="包名.类名" />

使用 jsp:setProperty 的方式设置 javaBean 的属性值。

<jsp:setProperty name="对象名" property="属性名" value="属性值" param="参数名"/>

使用 jsp:getProperty 的方式获取 javaBean 的属性值。

<jsp:getProperty name="对象名" property="属性名"/>

保存范围

JavaBean 的保存范围有 page、request、session 以及 application,默认是 page 范围。

删除方式

<% 内置对象.removeAttribute(“JavaBean 的名字”); %>

MVC 设计模式

基本概念

MVC 是模型(Model)和视图(View)以及控制器(Controller)的简写,是一种将数据、界面显示和业务逻辑进行分离的组织方式,这样在改进界面及用户交互时,不需要重新编写业务逻辑,从而提高了代码的可维护性。

M:主要用于封装业务数据的 JavaBean(Bean) 和 业务逻辑的 JavaBean(Service) 及访问数据库的 DAO 对象。

V:主要负责数据收集和数据展现,通常由 JSP 文件完成。

C:主要负责流程控制和页面跳转,通常由 Servlet 完成。

基本模型

  1. 浏览器发起请求;
  2. Servlet 接受处理请求,通过 JavaBean 封装业务数据和业务逻辑;
  3. Servlet 通过 Dao 对象来访问数据库,数据库把数据以 JavaBean 的形式发给 Servlet;
  4. Servlet 对数据进行业务逻辑处理并将结果发给 JSP;
  5. JSP 动态输出 HTML 页面到浏览器。

想了解更多,欢迎关注我的微信公众号:Renda_Zhang

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2024年5月14日 上午10:23
下一篇 2024年5月14日 上午10:35

相关推荐

  • 未知3212237683

    未知 人类对于未知事物的探索欲望永远无法停止。我们总是渴望了解更多的世界,了解更多的人,了解更多的文化。在探索的过程中,我们可能会遇到许多困难和挑战,但同时也会有许多惊喜和收获。 …

    联系我们 2024年12月6日
    0
  • 项目管理软件免费推荐

    项目管理软件免费推荐 随着数字化时代的到来,项目管理水平的好坏已经成为企业成功的关键因素之一。因此,选择一款优秀的项目管理软件已经成为了企业管理者的必备技能。本文将向大家推荐几款免…

    联系我们 2024年9月18日
    29
  • 二手车管理系统:库存管理系统软件哪个好?(二手车库存管理app)

      汽车库存管理软件在当今是二手车行业从业者常在百度中搜索的内容,在21世纪的今天,库存管理对于汽车行业来讲仍是一个值得探寻的主题。由于主机厂、经销商集团、二手车商在汽车经销存方面…

    联系我们 2022年5月22日
    328
  • 培训机构校长管理校区专用的管理软件?(培训学校管理软件系统)

    培训机构管理软件有许多种类,如有一些系统、仅与已安装于适用本台的计算机和该校区不能完成多校区、跨区域的完成管理;尤其是对多校区的培训学校,这一点尤其需要注意。爱耕云培训机构管理软件…

    联系我们 2022年5月22日
    265
  • 制造业项目管理软件

    制造业项目管理软件:提升制造业项目管理水平 制造业是现代经济的重要组成部分,也是全球经济的重要驱动力之一。然而,随着制造业的不断发展,项目管理也变得越来越重要。制造业项目管理软件是…

    联系我们 2024年9月16日
    35
  • 天津尚润新能源科技有限公司建设天津市武清区上马台镇80MW风电项目

    天津尚润新能源科技有限公司建设天津市武清区上马台镇80MW风电项目 近年来,随着新能源技术的不断发展和普及,风电项目成为了可再生能源发展的重要方向。作为天津尚润新能源科技有限公司,…

    联系我们 2024年12月3日
    2
  • 施工项目进度表怎么做

    施工项目进度表是项目管理中非常重要的一部分,它可以帮助项目经理和工程师跟踪项目的进度,确保项目按计划进行,并避免项目延误和额外的成本。本文将介绍如何制作一个有效的施工项目进度表。 …

    联系我们 2024年12月5日
    0
  • 超强大的网络维护管理软件NETworkManager(网络维护软件有哪些)

    NETworkManager是一款网络管理软件,可以查看和配置网络接口,扫描wlan网络,捕获ldp或cdp包,执行IP或端口扫描,ping您的主机,还有更多功能,例如子网计算器,…

    联系我们 2022年5月23日
    423
  • 科研创新申请理由

    科研创新申请理由 随着科技的不断发展,科研创新已经成为推动社会进步和经济发展的重要力量。在当今社会,科研创新已经成为了一种必备的素质,也是每个科学家和研究人员应该具备的基本要求。本…

    联系我们 2024年12月6日
    0
  • 蒙田智慧-矩阵式项目管理模式分析

    矩阵式项目管理是项目开发管理中容易被忽视的一种模式。很多项目经理发现,如果没有矩阵式项目管理模式或者使用不恰当,涉及到跨部门沟通合作,工作效率就会大大降低。 蒙田智慧-房企三大项目…

    联系我们 2022年5月23日
    277