JSP

Java Server Page

JSP脚本

三者有很严格的区分

expression: <%... %>:内容会直接放到_jspService()方法里

scriptlet:<%=... %>:内容会放到out.print()中,作为out.print()的参数

declaration: <%!... %>:内容会放到_jspService()方法之外,被类直接包含

directives: <%@ ... %>:用来导包等,主要写import方法

为什么使用 JSP

允许静态的HTML网页受Servlet控制下的动态修改

JSP的优势

JSP其实是Servlet

index.jsp => index.jsp.java => index.jsp.class (Servlet)

JSP如何创造Servlet

JSP中的html部分以及java部分代码都会放到void _jspService()方法中

例如:

JSP 更改方法

三个方法:

  • jspInit()
  • _jspService()
  • jspDestroy()

JSP语法

三种主要的构念类型:

  • Scripting element: 让您指定将成为结果servlet的一部分的代码
  • directives: 控制全局servlet的结构
  • actions: 允许您指定应该使用的现有组件,或者控制JSP引擎的行为

直接输出的 Expression:<%= expression %>

放在方法体内的 Scriptlets:<% code%>

声明变量用的 Declaration:<%! code%>

expressions

<%= expression %> 会直接输出

expression的内容会被转换为String并且插入页面中

  • 在run-time时转换
  • 可以使用与预先定义的变量指示Object,例如request, response, session, out

scriptlets

<% code%>

用来插入Java代码,可以访问到之前定义过的变量。

  • code会被直接插入_jspService方法中

例如:

可以用来:

  • 设置response的header以及状态码
  • 写日志或者更新数据库
  • 反正就是走后台的都用这个

例如:

条件性生成html文件

Scriptlets会被按照书写的方式插入,静态的HTML文件插入out.println()中。

条件性生成不同html的代码可以用JSP写成:

转换到_jspService()中会是:

declarations

放在<%! code%>中的代码会放在_jspService()方法外

这些代码会被不同的request使用

例如:

如果想在scriptlet或者declaration中打%>要使用\%\>转义确保有符号出来

预先定义好的变量

也称为隐式对象,它们用于简化JSP expressionscriptlets不可以在 declarations 中使用

  • request
  • response
  • out
  • session
  • config
  • page
  • application
  • pageContext

例子:打印Request的信息

JSP指令

语法:

必须使用单引号或者双引号来赋值

有三种指令:page, include, taglib

  • page: 用来导包
  • include:用来插入其他的文件
  • taglib:基本不用

导包

<%@ page import = "..." > 实现,包名用**双引号包裹**

设置response header的content type

<%@ page contentType = "..." > 实现

设置 session

<%@ page session = "..." > 实现

  • 创建新会话,将赋值设为true

其余

JavaBean

JavaBeans是书写java类的一种标准

  • 要在packet中书写,就是第一行要有packet ...
  • 全部涉及到直接引用变量的方法都是以get或者set开头的
  • 应该实现Serializable接口(其内无方法)
  • main方法
  • 有无参构造器
  • 全部的变量都应该是private
  • 对于非boolean的变量,都必须有getXxx()setXxx()方法。对于boolean变量,有isXxx()setXxx()方法

如何书写JavaBean

  1. 写一个类,并implements Serializable接口
  2. 添加accessormutator(就是getter和setter)
  3. 编译并把其打包为JAR file

JSP中使用JavaBean

jsp:useBean 来在JSP中加载一个bean

意义为:实例化class指定的类的一个对象,并将其绑定到id指定的名称的变量

等价于:

访问JavaBean对象的属性

<jsp:useBean> </jsp:useBean> 标签主体中使用 <jsp:getProperty /> 标签来调用 getter 方法,使用 <jsp:setProperty /> 标签来调用 setter 方法,语法格式如下

<jsp:useBean id="id" class="bean 编译的类" scope="bean 作用域"><jsp:setProperty name="bean 的 id" property="属性名"  value="value"/><jsp:getProperty name="bean 的 id" property="属性名"/>...........
</jsp:useBean>

name属性指的是Bean的id属性。property属性指的是想要调用的getter或setter方法。

在JSP中使用一个JavaBean

语法注意点:

  • 属性的名是大小写敏感的
  • 全部的变量要用双引号包裹
  • 要用/>结尾

使用方法:

  1. 使用<jsp:useBean> 来定义一个新的 javabean,标记其idclass
  2. <jsp:setProperty>property属性的值为等会赋的值

例子:

有两种访问变量的方式

  • <% bmi.getXxx %>或者 <% bmi.setXxx %>
  • 使用 JSP 指令

在JSP中使用javaBean例子

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<html>
<head>
<title>get 和 set 属性实例</title>
</head>
<body><jsp:useBean id="students" class="com.runoob.StudentsBean"> <jsp:setProperty name="students" property="firstName"value="小强"/><jsp:setProperty name="students" property="lastName" value="王"/><jsp:setProperty name="students" property="age"value="10"/>
</jsp:useBean><p>学生名字: <jsp:getProperty name="students" property="firstName"/>
</p>
<p>学生姓氏: <jsp:getProperty name="students" property="lastName"/>
</p>
<p>学生年龄: <jsp:getProperty name="students" property="age"/>
</p></body>
</html>

输出结果:

学生名字: 小强学生姓氏: 王学生年龄: 10

<jsp:setProperty>

用来设置已经实例化的Bean对象的属性

第一种形式

<jps:setProperty name = "JavaBean实例名" property = "*"/>

该形式是设置Bean 属性的快捷方式。在Bean 中属性的名字,类型必须和request对象中的参数名称相匹配。由于表单中传过来的数据类型都是String 类型的,Jsp内在机制会把这些参数转化成Bean属性对应的类型。

property = "*" 表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。

第二种形式

<jsp:setProperty name = "JavaBean实例名" property = "JavaBean属性名" />

使用request对象中的一个参数值来指定Bean中的一个属性值

在这个语法中,property指定Bean 的属性名,而且Bean 属性名和request参数的名字应相同。也就是说,如果在Bean 中有setUserName(String userName)方法,那么,propertyName的值就是"userName"。这种形式灵活性较强,可以有选择的对Bean中的属性赋值。

第三种形式

<jsp:setProperty name = "JavaBean实例名" property = "JavaBean属性名" value = "BeanValue"/>

value用来指定Bean属性的值。字符串数据会在目标类中通过标准的valueOf方法自动转换成数字、boolean、Boolean、byte、Byte、char、Character。

第四种形式

<jsp:setProperty name = "JavaBean实例名" property = "propertyName" param = "request对象中的参数名"
/>

param指定用哪个请求参数作为Bean属性的值。

Bean 属性和request参数的名字可以不同。如果当前请求没有参数,则什么事情也不做,系统不会把null传递给Bean属性的set方法。因此,你可以让Bean自己提供默认属性值,只有当请求参数明确指定了新值时才修改默认属性值。

例如,下面的代码片断表示:如果存在numItems请求参数的话,把numberOfItems属性的值设置为请求参数numItems的值;否则什么也不做。

<jsp:setProperty name="orderBean" property="numberOfItems" param="numItems" />

Bean的范围

jsp.useBean创造了新的一个bean对象

  • 实际上,这声明了一个bean的范围

    <jsp:useBean id=“bean1” class=“BMIBean” scope=“page” />
    

如果在指定的范围内已经存在同名的bean,则该变量将被绑定到现有的bean上;否则将创建一个新的

错误处理

JSP中使用Error pages

用 error page 来处理除法中除了0的情况

  • 出现错误之后会导向Error Page

HTML

导向error page

没有错误的原JSP

  • 要设置<%@ page errorPage="BMIError.jsp" %>

JavaBean 假设Setter缺失

设置某页面为error page

Error Page

  • 设置<%@ page isErrorPage=“true” %>


结果: 会导向Error Page


造成这样的原因:

  • 缺失了setHeight()方法时,height不会在request中设置

JSP中引入文件

有两种方法引用其他文件

  • 使用include指令

    • 可以在Translation时引入其他 JSP 文件
    • 如果被引用的文件变了,全部的JSP文件都要变
  • 使用jsp:include action
    • 在 request 时包含静态的HTML文件或其他类型的文件
    • 引用的文件可以被更改而不用从translating JSP
    • 比较常用

使用include: ContactSection.jsp

使用 jsp:include action

<BODY><CENTER><TABLE BORDER=5><TR><TH CLASS="TITLE">What's New at JspNews.com</TABLE></CENTER><P>Here is a summary of our four most recent news stories:<OL><LI> <jsp:include page="news/Item1.htm" flush="true" /><LI> <jsp:include page="news/Item2.htm" flush="true" /><LI> <jsp:include page="news/Item3.htm" flush="true" /><LI> <jsp:include page="news/Item4.htm" flush="true" /></OL>
</BODY>

效果:

Redirecting & Forwarding

Forwarding requests from JSPs

JSPs 和 Servlets 都可以将request导向到其他的 JSPs或者Servlet

  • JSP:使用 <jsp:forward page="url" />

    • 三种方式

使用 forward 的 JSP 页面不能有任何的输出

  • Servlet:创造一个RequestDispatcher 对象
  1. d = request.getRequestDispatcher("some path in server");
  2. d.forward(request, response);

回顾RequestDispatcher

MVC Model View Controller

  • the servlet handles the HTTP protocol and coordination of which other servlets and auxiliary class method to call (controller)

  • Java classes/ JavaBeans handle the business logic (model)

  • Java Server Pages handle presentation logic (view)

M: Model, 业务模型,处理业务

V: View, 视图,界面展示

C: Controller, 控制器,处理请求,调用模型和视图

将servlet用于流程密集型任务,JSP用于表示,而JavaBeans对数据的逻辑行为进行建模。

三层架构

MVC优势与劣势

优势:

  • 对大型的应用来说,允许重复使用软件component,容易维护

劣势:

  • 如果controller的代码改了,需要重写编译和部署(recompile its code and redeploy)

JSP 与 JavaBean 在其中的用处

JSP for presentation

JavaBean model the logical behaviour of data

MVC 基本

用Servlet回复初始响应

  • 调用提取或创建用户数据并将数据放入javabean中的代码

Servlet存储 JavaBean

  • 基于请求的共享 —— 在Request对象中存储JavaBean
  • 基于Session的共享 —— 在Session对象中存储JavaBean
  • 基于应用的共享 —— 在ServletContext对象中存储JavaBean

Servlet forward request到新的JSP页面

  • 展示结果,JSP页面从JavaBean中调取数据

JSPs 不会set数据,只会get

  • It uses jsp:getProperty but not jsp:setProperty

导入 JavaBean

<%@ page import='chain.model.DataBean' %>

import后要带**单引号*

【高编 6】 北邮 高级网络程序设计 6. JSPJavaBean相关推荐

  1. 【高编 1】 北邮 高级网络程序设计 1.多线程

    其中线程池是博主写大创时自学的,考试不考.问题不大 Thread Sum 实现多线程 什么是线程:线程是进程中的单个顺序控制流,是一条执行路径 单线程:一个进程如果只有一条执行路径,则称为单线程程序 ...

  2. 计算机网络protocol,北邮高级计算机网络课件1-protocol.pdf

    北邮高级计算机网络课件1-protocol,北邮通信原理课件,北邮信号与系统课件,北邮帅天平课件,通信电子电路北邮课件,北邮计算机学院,北邮计算机,北邮计算机学院主页,北邮计算机学院官网,北邮计算机考 ...

  3. 高级计算机网络技术北邮考试,北邮高级计算机网络技术-英文课件-马严7-IPv6-17.pdf...

    北邮高级计算机网络技术-英文课件-马严7-IPv6-17 Agenda n Background IPv6 q Why IPv6? q IPv6 Intro. q IPv6 related stand ...

  4. 北邮JAVA高级语言程序设计(选修课)设计模式大作业

    北邮JAVA高级语言程序设计(选修课)设计模式大作业 题目描述: 设计模式一(单子.工厂.策略模式)练习 1. 假设现在要设计一个贩卖各类书籍的电子商务网站的购物车系统.对所有的教材类图书 实行每本一 ...

  5. 北邮OJ-269. 网络传输-14网研上机D

    算法分析: 分析题目得,应当得到k个结点的dist数组,从这k个数组中可以得知,k个结点中的某个结点A到另一个结点B的路径长度(这条路径中间可能经过k个结点中的第三个结点,我们不去关心他,只抽象为一条 ...

  6. 2014期同学参观北邮宽带网络监控教研中心

    大家参观了Hadoop机房,听张燕申.凌艳.常月.尹劲松同学分别讲解了Hadoop技术在网络流量分析中的应用.CDH的管理软件与HUE环境.HUE环境下的pig应用及自主开发的Hadoop集群管理系统 ...

  7. 北邮高级语言设计基于java期末_北邮《高级语言程序设计》第三次阶段作业带答案...

    一.单项选择题(共20道小题,共100.0分) 1. 下面哪个修饰符修饰的变量是所有同一个类生成的对象共享的?____ A. public B. private C. static D. final知 ...

  8. 北邮自考《C++程序设计》实践考试,你猜监考小姐姐说了什么?

    5月份参加了自考北邮的C++程序设计实践上机考试.做了下实践环节考核指导上的三个程序题, 比较基础,现记录一下. 这三个题,我没有写太多的文字提示,有需要的可以自己加上. 再分享下我的考试,我是5月1 ...

  9. 2020北邮网安803考研经验

    2020北邮网安803考研经验 基本情况介绍 本人本科是医学类专业,本科期间学业成绩也非常一般,属于经常逃课的那类同学.不过大学多多少少接触了一些计算机方面的课程,对计算机方向非常感兴趣,于是考研就打 ...

最新文章

  1. 【Smooth】非线性优化
  2. tensorflow.python.framework.errors_impl.InvalidArgumentError: 2 root error(s) found.
  3. windows mysql dump_mysql在Windows下使用mysqldump命令手动备份数据库和自动备份数据库...
  4. python语法基础知识-python基础必学的语法知识
  5. 华为云服务器linux切换账号,华为云Windows服务器如何切换为Linux系统?
  6. Tricentis的测试工具评测
  7. 机器学习特征构建_使用Streamlit构建您的基础机器学习Web应用
  8. 浅谈“==”、equals和hashcode,以及map的遍历方法(可用作上一篇k-means博文参考)
  9. linux下 如何用信号signal 终止或者暂停子线程,linux下实现线程暂停
  10. 根据百度地图的api自动获取地理位置
  11. Unity容器中AOP应用示例程序
  12. 141种各类工业常用软件
  13. UOJ#211. 【UER #6】逃跑 (Dynamic Programming)
  14. 数电第二版 潘松 陈龙 第一章 答案
  15. 静态HTML网页作业模板 华为企业网站设计作品 静态学生网页设计作业简单网页制作
  16. 苹果电脑上好用的五个文档文本编辑工具
  17. html5广告的版式设计,25张以文字排版为主的海报设计
  18. Idea设置全白色 背景
  19. 分布式tensorflow
  20. 【基础框架-SSM】MyBatisPlus入门

热门文章

  1. 网页播放器与播放器定制
  2. 【随机过程】18 - 连续时间马氏链与排队论
  3. Php禁止外部盗链nginx,Nginx防止盗链
  4. Aras入门教程4_工作流管理
  5. 合肥师范学院计算机学院李,计算机学院滨湖校区迎新工作顺利完成
  6. 经济与社会发展研究杂志社经济与社会发展研究编辑部2023年第20期目录
  7. JavaXml教程(三)使用DOM方式修改XML文件内容
  8. 使用Response对象实现数据传输
  9. java float的精度_java中的float和double的精度问题
  10. 宝塔定时任务执行php源码任务_PHP定时执行计划任务