Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JavaWeb - JSP:概述和语法,内置对象,JavaBean 组件,MVC 设计模式

JavaWeb - JSP:概述和语法,内置对象,JavaBean 组件,MVC 设计模式

作者头像
RendaZhang
发布于 2020-09-08 07:55:17
发布于 2020-09-08 07:55:17
68800
代码可运行
举报
文章被收录于专栏:RendaRenda
运行总次数:0
代码可运行
JSP 的概述
概念

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

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

示例
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%@ 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 语法结构

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

声明区

基本语法:<%! %>

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%!
    int i;
    public void setName(){
        ...
    }
%>
程序代码区

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%
    int j;
    for (int k=0; k<10; k++) {
        ...
    }
%>
表达式

基本语法:<%= %>

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%= "hello world" %>
<%= i+1 %>
注释

注释的内容不会被执行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- HTML 文件的注释,浏览器可以查看到 -->
<%-- JSP 文件的注释,浏览器看不到 --%>
<%
    // Java 语言中的单行注释,浏览器看不到
    /*
    Java 语言中的多行注释,
    浏览器看不到
    */
%>
指令和动作

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

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

JSP常用指令有:pagetaglibinclude

page 指令

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- prefix 属性用于指定库前缀 -->
<!-- uri 属性用于指定库的标识 -->  
<%@taglib uri="tagLibary" prefix="prefix" %>
<!-- 引入第三方的标签库 -->
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
include 指令

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%@include file="被包含的文件地址" %>
jsp:include

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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 中处理。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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。

单个页面的处理方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%@page errorPage="error.jsp" %>

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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 范围。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<jsp:useBean id="对象名" scope="保存范围" class="包名.类名" />

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<jsp:setProperty name="对象名" property="属性名" value="属性值" param="参数名"/>

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<jsp:getProperty name="对象名" property="属性名"/>
保存范围

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

删除方式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%
    内置对象.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 页面到浏览器。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Renda 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
西门子的PLC真的也要弃“硬”从“软”?
PLC控制领域在悄悄的改变,融合趋势越来越明显,甚至有点明目张胆了。以前还有一个专属的领域叫PC-base,就是用计算机当控制器,直接带PCIE板卡或者以太网连接远程IO。现在PLC传统厂商也开始从“硬”变“软”了。西门子随着TIA V19的发布,西门子Soft PLC(软控制器)产品线也全面升级到了V30.0及以上,不仅拥有更高的性能,还开始支持全新功能和硬件。
剑指工控
2024/06/04
3840
西门子的PLC真的也要弃“硬”从“软”?
V18你用上了吗?西门子 TIA Portal V19 来了!(中文翻译版)
TIA Portal Openness 附加选项包中的新 API 函数:⾼级测试套件
剑指工控
2023/11/15
2.1K0
V18你用上了吗?西门子 TIA Portal V19 来了!(中文翻译版)
​SIMATIC S7‑1500R/H​ 冗余系统6--应用规划
PROFINET 环网在所有组态方式的 S7-1500R/H 冗余系统中都必须使用 PROFINET 环网。PROFINET 设备
科控物联
2022/03/29
2.4K0
​SIMATIC S7‑1500R/H​ 冗余系统6--应用规划
​SIMATIC S7‑1500R/H​ 冗余系统3--S7-1500 R/H-CPU
S7-1500R/H 冗余系统允许 PROFINET 环网中的两个 R-CPU 或 H-CPU 中有一个发生故障。如果主 CPU 发生故障,则备用 CPU 将作为新的主 CPU 在中断点继续进行过程控制。
科控物联
2022/03/29
5K0
​SIMATIC S7‑1500R/H​ 冗余系统3--S7-1500 R/H-CPU
西门子PLCSIM Advanced仿真S7-1500 OPC UA
PLCSIM Advanced允许在使用STEP 7(TIA Portal)进行组态和工程设计期间全面模拟功能,而无需物理连接S7-1500/ET 200SP硬件。它支持生成虚拟控制器,以模拟S7-1500和ET 200SP控制器以测试其功能。
剑指工控
2021/11/09
3.4K0
西门子PLCSIM Advanced仿真S7-1500 OPC UA
重磅!TIA Portal V19 已正式发布!
了解V18的同学会知道,当时随着软件发布,也发布了一大批新硬件——具有双核的S7-1500系列CPU。当然肯定也会有有心人注意到有些产品没有出现,那就是1500C系列以及ET 200pro系列CPU没有换新型号。
科控物联
2023/11/27
9.6K0
重磅!TIA Portal V19 已正式发布!
TIA V15.1发布,来看看有什么新功能
TIA V15.1终于发布了,按照西家常规惯例,只有出了SP1之后,这个软件版本才算稳定和成熟,所以相信更多V14的兄弟们会移步到V15,那我们今天就来看看V15.1到底更新了什么?另外文章附带了TIA V15.1官方安装包下载链接!
剑指工控
2021/11/09
1.8K0
TIA V15.1发布,来看看有什么新功能
TIA能源管理套件SIMATIC Energy 示例项目下载
采用TIA博途中集成的能源管理套件(SIMATIC Energy Suite),无需编程,通过简单直观的组态就可实现
科控物联
2022/03/29
1.1K0
TIA能源管理套件SIMATIC Energy 示例项目下载
WinCC V7.5 连接 S7-1500R
1 <概述> <西门子全新 SIMATIC S7-1500R/H 系列冗余控制系统凭借其高可用性,能够有效 防止数据丢失,可以尽可能地降低工厂出现故障或意外停机的可能性,以提高工厂 效率。 SIMATIC S7-1500R/H 支持系统 IP。当其它设备需要和其通信时,可以把 S7- 1500R/H 看作一个 CPU,且通过系统 IP 自动连接到主 CPU。 HMI(包括 WinCC)可以通过系统 IP 和 S7-1500R/H 通信。但是这种通信方式无法 处理 HMI 和 S7-1500R/H 之间网络出现故障(例如,网线断开)的问题。针对这种 情况,WinCC 从 V7.5 SP1 版本开始支持通过 WinCC 系统变量进行 S7-1500R/H 连 接参数的切换。 本文以 WinCC V7.5 SP1 和 S7-1515R 为例,介绍 WinCC 和 S7-1500R 通信的组态 过程及注意事项。 > 1.1 <系统结构> <本例系统结构如图 1 所示:
科控物联
2022/03/29
4.6K0
WinCC V7.5  连接 S7-1500R
TIA V15 SP1 + STEP7 V5.6 + WINCC V7.X安装步骤
因TIA V15/V15 SP1 WinccPro与经典版的WINCC V7.X不兼容,即使卸载博途自带的WINCC也无法解决,而且经典版的WINCC即使安装上去,运行时也会出问题,运行画面为空白页。因此需要安装TIA V15/V15 SP1 WinccAdv才能再安装WINCC V7.X
剑指工控
2021/11/09
3.8K0
TIA V15 SP1 + STEP7 V5.6 + WINCC V7.X安装步骤
西门子 TIA v16 于2019年12月3日发布
借助新的 TIA V16(完全集成自动化),西门子扩展了其工程框架,为从规划、工程到调试的各个阶段提供了实用的新功能。创新集中在开发过程的持续整合上。其中包括标准化、跨团队的集成工程和集成功能测试。这使用户能够提高软件的质量,缩短调试时间,降低工程成本。 在开发过程中,重点是分布式的工作理念和团队合作。在 TIA Portal 项目服务器上,用户现在可以通过新的专用工程功能独占访问服务器项目,这些功能包括项目修订和更改协议以及自动报告和存档等功能。这意味着在设备、对象或面向功能的基础上组织自动化任务时没有功能限制。使用专用工程不需要特殊许可证。为了使项目能够由团队委托,TIA portal V16 以"异步调试"模式进行了扩展,通过后台运行的第二个 TIA portal实例,对 Simatic S7-1500 控制器进行加载。可以立即再次操作在前台运行的 TIA portal实例,从而大大缩短加载时间。
剑指工控
2021/11/09
8100
TIA Portal 测试套件介绍
为确保编程规范统一,可以在 TIA Portal 项目中定义规则集和编程规范指南,并定期检查程序是否与其相符。
剑指工控
2022/04/14
1.3K0
TIA Portal 测试套件介绍
博途V17-轴功能与优化
借助PLC中集成的运动控制功能,可以轻松高效地控制单轴和多轴驱动系统。SIMATIC 控制器和工艺模块,辅以 SINAMICS 驱动系统,提供了完美协调的产品组合。如果驱动器通过PLC的工艺对象进行定位调速工作,则它们被称为单轴。针对单轴运动控制来说,其运动需要具有高动态和重复精度高的需求,西门子的工艺对象特别适用于这样的运动过程。典型的单轴是速度轴和定位轴,例如传送带和提升定位。用户可以对机器中多个单轴的动作进行编程,以在机器中实现所需的运动。
科控物联
2022/03/29
6.1K0
博途V17-轴功能与优化
测量S7-1200/1500 CPU中完整程序、单个块或命令序列的运行时间
在STEP 7(TIA Portal)中,可以使用"RUNTIME"指令来测量S7-1200/1500 CPU中完整程序、单个块或命令序列的运行时间。使用"RT_INFO"指令,可以读取S7-1500 CPU中特定组织块、通信或用户程序运行时的统计信息。"RUNTIME"指令在"基本指令>程序控制指令>运行时控制"菜单下,"RT_INFO"指令在"扩展指令>诊断"菜单下,如下图1所示。
科控物联
2022/03/29
2.3K0
测量S7-1200/1500 CPU中完整程序、单个块或命令序列的运行时间
TIA通用函数库LGF
TIA Portal STEP 7 已经含有大量的 PLC 编程指令(数学函数、时间、计数器等)。但自动化项目经常还需要其它一些实用的基本函数。
剑指工控
2021/11/10
2K1
谈谈TIA 博途 V17加密方式的升级
1:S7-1500 PLC之间、PLC与PC使用TCP (TLS V1.2)通信,通信双方使用公钥与私钥异步加密双方的通信会话密钥,得到密钥后进行同步加密通信,通信双方需要使用CA生成数字证书。这里的CA为PLC的编程软件TIA 博途,如图所示。
剑指工控
2021/11/08
2.5K0
谈谈TIA 博途 V17加密方式的升级
【工控技术】S7-1500与SIMATIC NET OPC Server通讯要点
在TIA Portal V12插入S7-1500及PC站点,配置网络把站点挂在同一子网中,在Network View中配置S7连接,如下图示:
剑指工控
2021/11/09
3.7K0
TIA V15悄悄的来了
西门子的全球技术网站2017年12月21日悄悄的发布了一条消息,那就是TIA V15上线了,首先我们先来看一下,TIA V15版本更新了那些东西?
剑指工控
2021/11/09
9440
聊聊西门子TIA V17 的CFC编程究竟怎么样
西门子发布了TIA V17,其中STEP7软件编程语言增加了CEM和CFC引得工程师们兴致勃勃,其中对CFC的讨论最为激烈,今天专门为大家来解读TIA V17的一些CFC功能。
剑指工控
2021/11/05
2.2K0
西门子PLC又添新成员
近日,SIMATIC ET 200SP分布式I/O系统的新增了两款CPU扩展——CPU 1514SP T-2 PN和CPU 1514TP TF-2 PN,它们不仅具有扩展的运动控制功能,而且,以SIMATIC S7-1500控制器的创新固件版本V3.0为基础。目前两款CPU现已发布并可交付。
剑指工控
2023/08/31
2750
西门子PLC又添新成员
相关推荐
西门子的PLC真的也要弃“硬”从“软”?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验