html添加java代码_在HTML中插入JSP代码
JSP 文件可以只包含 HTML,也可以插入 JSP 代码,客户端发起请求后,HTML和插入的 JSP 脚本都会被翻译成 Servlet 程序,然后再编译并运行。
小脚本格式(scriptlet)
小脚本格式是指可以在 之间插入 JSP 代码:
// JSP Code
%>
JSP代码可以包含任意的Java语句、变量、方法或表达式,只要它们是有效的。
你也可以使用类似 XML 的格式插入:
// JSP Code
文本、HTML标签等都必须写在 JSP 的外边,例如:
演示页面
1+2+3+...+99+100 =
int result = 0;
for(int i=1; i<=100; i++){
result += i;
}
out.print(result);
%>
将上面的代码保存到 demo.jsp 并放到站点根目录,假设你为当前虚拟主机分配了 www.jspdemo.com 域名,访问 www.jspdemo.com:8080/demo.jsp,就可以看到输出内容。
图1 演示页面
打开 $CATALINA_HOME\\work\Catalina\www.jspdemo.com\_\org\apache\jsp 目录,你会看到由 JSP 翻译生成的 Servlet 程序 demo_jsp.java,部分代码如下所示:
package org.apache.jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
// demo.jsp 页面的内容被转换为 demo_jsp 类
public final class demo_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {
public void _jspInit() {
// 初始化
}
public void _jspDestroy() {
// 销毁
}
// 处理 http 请求,生成 html 代码
public void _jspService(final javax.servlet.http.HttpServletRequest request,
final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException {
out.write("\r\n");
out.write("\r\n");
out.write("
\r\n");
out.write(" \r\n");
out.write("
演示页面\r\n");
out.write("\r\n");
out.write("
\r\n");
out.write("
\r\n");
out.write(" 1+2+3+...+99+100 = \r\n");
out.write(" ");
int result = 0;
for(int i=1; i<=100; i++){
result += i;
}
out.print(result);
out.write("\r\n");
out.write("
\r\n");
out.write("\r\n");
out.write("");
}
}
可以很清楚的看到 JSP 页面翻译生成的 Java 代码,在之间的代码都被放到了 _jspService() 方法内部,包括声明的变量,也是局部变量。
声明格式(declaration)
声明格式是指可以在 之间声明变量、方法和类。与小脚本格式不同的是:
声明的是局部变量,会被放到 _jspService() 方法内部。
不能声明方法,因为Java规定方法不能嵌套声明。
之间声明的是成员变量,由多线程共享。
注意: 只能用来声明变量、方法和类,不能包含表达式。
也可以使用类似 XML 的格式插入:
// JSP Code
示例代码:
演示页面
int click = 0;
%>
1+2+3+...+99+100 =
int result = 0;
for(int i=1; i<=100; i++){
result += i;
}
out.print(result);
click++;
%>
你是第位访客
生成的 demo_jsp.java 部分代码如下:
package org.apache.jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
public final class demo_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {
int click = 0;
public void _jspInit() {
// 初始化
}
public void _jspDestroy() {
// 销毁
}
public void _jspService(final javax.servlet.http.HttpServletRequest request,
final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException {
out.write("\r\n");
out.write("\r\n");
out.write("
\r\n");
out.write(" \r\n");
out.write("
演示页面\r\n");
out.write("\r\n");
out.write("
\r\n");
out.write("\r\n");
out.write("
\r\n");
out.write(" 1+2+3+...+99+100 = \r\n");
out.write(" ");
int result = 0;
for(int i=1; i<=100; i++){
result += i;
}
out.print(result);
click++;
out.write("\r\n");
out.write("
\r\n");
out.write("
你是第");
out.print( click );
out.write("位访客
\r\n");
out.write("\r\n");
out.write("");
}
}
可以看到在 之间声明的 click 变量被翻译成了一个成员变量,与在 之间声明的变量作用域不同,访问权限也不同, 之间声明的变量在整个 JSP 页面内都有效。
重复访问该页面,会发现每次访客数量都会增加。
这是因为 Servlet 是单实例多线程的,成员变量在堆区分配内存,并一直存在,由多个线程共享,直到服务器关闭或JSP文件更新。而方法内的局部变量在栈区分配内存,线程结束后将被回收。
也就是说,当多个用户请求一个JSP 页面时,JSP 容器会为每个用户启动一个线程,这些线程由JSP容器来管理,这些线程共享 JSP 页面的成员变量,因此任何一个用户对 JSP 页面成员变量操作的结果,都会影响到其他用户。
demo_jsp 类只会在首次访问时被实例化,以后一直存在,新用户访问页面会启动一个线程,并使用该实例的数据,所以每次刷新页面 click 变量都会加1。
Servlet 单实例多线程的特性提高了程序的执行效率,启动一个线程的代价很小,在高并发量方面有很大的优势。但是它也有副作用,带来了线程安全问题,一个线程对数据的操作会影响到下一个线程。所以我建议,除非有必要,否则不要再 之间声明变量。
表达式格式(expression)
前面的JSP代码,输出IP地址时用到了 out.print() 语句:
其实还有一种简写,更加方便:
示例代码:
演示页面
你的IP地址是:
也可以使用类似 XML 的格式:
// JSP Code
可以认为是 out.print() 语句的简写,用来输出一个变量或表达式的值,注意结尾不能有分号(;)。
提示:
html添加java代码_在HTML中插入JSP代码相关推荐
- latex附录中放python代码_在Latex中插入Python代码
这里指的插入是指最终能在生成的pdf中显示高亮的Python代码. 在Latex中插入Python代码,需要一个第三发的宏包pythonhighlight: https://github.com/ol ...
- iframe视频代码_在Excel中创建IFRAME代码
iframe视频代码 If you want to embed a YouTube video on your website, YouTube will create some IFRAME cod ...
- 在Latex中插入Python代码
这里指的插入是指最终能在生成的pdf中显示高亮的Python代码. 在Latex中插入Python代码,需要一个第三发的宏包pythonhighlight: https://github.com/ol ...
- 太实用了!在Java的Word 文档中插入或读取艺术字
太实用了!在Java的Word 文档中插入或读取艺术字 简直不能太实用! 扫码关注<Java学研大本营>,加入读者群,分享更多精彩 艺术字是一组文本样式,允许您向文本添加设计元素,例如填充 ...
- PPT 中插入域代码公式的方法
PPT 中插入域代码公式的方法 插入对象,选择 Word * Document,或 OpenDocument 都可以: 在新打开的页面中,选择 插入 文档部件,再选择 域代码: 在域代码选项中, ...
- 如何在html中定义字段文字,如何在自定义字段中插入html代码和标签|动易Cms
如何在自定义字段中插入html代码和标签 在自定义字段里面直接插入html代码还有标签是解析不出来的. 但是我们可以通过以下的方法来实现. 1. 添加一个自定义字段.命名为MY_zdy 修 改 字 段 ...
- Java程序向MySql数据库中插入的中文数据变成了问号
找到mysql的安装目录,修改my.ini文件 (1)如何找到my.ini文件 如果my.ini文件不在MySQL的安装目录下,可能放在隐藏目录,要先去找到ProgramData,(这里要先打开显示隐 ...
- MarkDown中插入的代码块无法自动识别换行
MarkDown中插入的代码块无法自动识别换行 1.插入代码块的两种方式 单行的代码,就一个 ` 多行的代码块就三个```补充说明,可根据自己编写代码块的语言,设定对应的标签(比如Java-java, ...
- 新浪博客中插入高亮代码
在ie浏览器里可以用,但是不知道mac有没有这个插件 原文地址:新浪博客中插入高亮代码作者:木子超-同学 一. Sublime text 3是一个强大的代码编辑软件,强烈推荐 ...
- 用Java向SQL Server数据库中插入float数据报错An error occurred while converting the Float value to JDBC data type
作者:翁松秀 用Java向SQL Server数据库中插入float数据报错 用Java向SQL Server数据库中插入float数据报错 报错信息: 报错原因: 解决方案: 报错信息: An er ...
最新文章
- 算力“竞速”,企业AI落地的当务之急
- WSRP调用中的一些问题
- 梯度下降法求多元线性回归及Java实现
- 读《c#与算法--快速排序》随笔
- PowerShell变量——PowerShell三分钟(七)
- java7 文件_Java SE 7新特性之文件操作(9) - 遍历目录树
- 排序算法 -- 待增加
- easy-ui实现左右滚动条
- 数据库事务的一致性和原子性浅析
- 东莞潇洒培训学校分享知识点:UG编程加工参数设置,新手看过来
- E1630加工散热孔:中兴路由器wifi6千兆E1630电信商企版Wi-Fi6路由器3000M全千兆
- hard link soft link
- ceph pg peering和恢复 (1)
- C++银行账户管理程序2
- StatsD,collected,fluentd和其他守护程序
- 短信发送显示服务器失败,手机短信发不出去怎么办 手机故障解决方法【方法步骤】...
- 高端知识星球正式开放了
- 【转】羽毛球教学 专家把脉 01
- 如何选择第三方鉴定机构?
- 50岁程序员还奋战在一线,软件测试能干到多少岁?有年龄限制吗?