JavaWeb(一)JSP原理,组成
JSP(Java sever pages):一种用于开发动态web页面(资源)的技术。
jsp页面是在服务器上运行的一个页面,一个jsp页面就是一个类。写jsp就像在写html,jsp允许在页面中编写java代码,并允许开发人员在页面中获取request,response等web常用开发对象,实现与浏览器的交互。
JSP原理:
JSP 的执行过程:
(1) 客户端发出Request (请求); (2) JSP Container 将JSP 翻译成Servlet 的源代码; (3) 将产生的Servlet 的源代码经过编译后,加载到内存执行; (4) 把结果Response (响应)发送至客户端。
JSP和Servlet的执行效率相差不大,只是第一次执行JSP页面时需要进行编译。 一般人都会以为JSP 的执行性能会和Servlet 相差很多,其实执行性能上的差别只在第一次的执行。因为JSP 在执行第一次后,会被编译成Servlet 的类文件,即为XXX.class,当再重复调用执行时,就直接执行第一次所产生的Servlet,而不用再重新把JSP编译成Servlet。因此,除了第一次的编译会花较久的时间之外,之后JSP 和Servlet 的执行速度就几乎相同了。 在执行JSP 网页时,通常可分为两个时期:转译时期(Translation Time)和请求时期(Request Time) 。
1. JSP文件先要被服务器翻译成Java文件(Servlet),在tomcat中翻译后的Java文件在tomcat下的 work/Catalina /localhost 中相应名字的应用目录里。 2. 编译成Java(Servlet)文件 3. 运行.class文件 Tomcat的全局配置文件$CATALINA_HOME/conf/web.xml 在Tomcat下的conf目录中的web.xml是服务器全局的配置文件,其中要想关闭列表显示叫要把 <init-param> <param-name>listings</param-name> <param-value>false</param-value> </init-param> 修改为true
JSP的组成元素:
1, 指令 page指令
<%@ page ..........%>
include指令静态引入,引入其他的网页,相当于将两个页面合成一个。公用一个request对象。
页面跳转可以直接在页面后面加?变量名=值(test.jsp?name=admin) 的方式传参数,这种静态包含不可以。 taglib指令---标准标签库(JSTL),Taglib指令用于在JSP页面中导入标签库
errorPage---定义当当前页面出错时跳转的页面--如果当前页面出错则跳转到该页面,注意,需要在出现错误的提醒界面有 isErrorPage="true"
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" errorPage="error.jsp"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>出现错误的提醒页面</h1>
<h3><%=exception.getMessage() %></h3>
</body>
</html>
2, 表达式 <%=变量名%>
<%=sum %>
3, 脚本 <% 代码内容 %>
<%
for(int i=1;i<=5;i++){
sum=sum*i;
}
%>
单个脚本片段的Java语句可以是不完整的,但是整个页面中组合的Java语句必须是完整的。
4, 声明 <%! 代码声明 %>
可用于定义jsp页面转换成servlet程序的静态代码块,成员方法和变量。可以单独定义在一个声明中,也可以定义到同一个声明中。声明中不能使用九大内置对象。
<%!int sum=1;
%>
5, 注释
JSP注释:<%-- … --%>,转化阶段消失,只能被开发人员看到
JAVA注释://、/**/、/***/,编译阶段消失
HTML注释:<!-- … -->, 不会消失,在页面中也能看到
6, 一些静态内容
jsp中html内容称为模板元素,jsp模板元素定义了网页基本骨架,即定义了页面结构和外观。
- 使用Donut Caching和Donut Hole Caching在ASP.NET MVC应用中缓存页面何时使用Donut CachingDonut Caching 的Nuget 包Donut Ho
- 有趣的算法(九) ——蛇形数组
- 有趣的算法(十一) ——分治法:快速求最值
- ASP.NET AJAX(3)__UpdatePanel
- 正则表达式学习笔记
- PHP10个实用函数
- ASP.NET AJAX(2)__ASP.NET 2.0 AJAX Extensions
- Android利用V4包中的SwipeRefreshLayout实现上拉加载
- 在Scala项目中使用Spring Cloud
- Scala的面向对象与函数编程
- ASP.NET AJAX(1)__Microsoft AJAX LibraryASP.NET AJAX(1)__Microsoft AJAX Library
- 大数据流处理平台的技术选型参考
- PHP预定义变量数组种类概览
- PHP网络技术(二)——模拟网络灌水攻防
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Jenkins部署异常:报错 TomcatManagerException: FAIL - Unable to delete
- Spring Boot打包的jar运行的时候提示:没有主清单属性
- 主流消息队列选型技术比较
- 深入浅出-网络七层模型
- 【警惕】K8S下Telnet失效陷阱
- nginx优化之keepalive
- 血泪教训,线程池引发的内存泄露
- RestTemplate设置转换类型
- 详解PROTOCOL BUFFERS
- Spring boot常用注解收集
- Go依赖模块版本之Module避坑使用详解
- 【tcl学习】vivado write_edif
- K8s中优雅停机和零宕机部署
- Python读取.edf格式脑电数据文件
- Kotlin修炼指南(三)——奇技淫巧