1.什么是JSP
JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。
2.JSP的特点
能以模板化的方式简单、高效地添加动态网页内容。
1.可利用JavaBean和标签库技术复用常用的功能代码(设计好的组件容易实现重复利用,减少重复劳动)。标签库不仅带有通用的内置标签(JSTL),而且支持可扩展功能的自定义标签。
2.有良好的工具支持。
3.继承了Java语言的相对易用性。
4.继承了Java的跨平台优势,实现“一次编写,处处运行”。因为支持Java及其相关技术的开发平台多,网站开发人员可以选择在最适合自己的系统平台上进行JSP开发;不同环境下开发的JSP项目,在所有客户端上都能顺利访问。
5.页面中的动(控制变动内容的部分)/静(内容不需变动的部分)区域以分散但又有序的形式组合在一起,能使人更直观地看出页面代码的整体结构,也使得设计页面效果和程序逻辑这2部分工作容易分离(外观视图与逻辑分离)。从而方便分配人员并发挥各自长处,实现高效地分工合作。
6.可与其它企业级Java技术相互配合。JSP可以只专门负责页面中的数据呈现,实现分层开发。
3.JSP的工作原理
首先JSP分为两类,
(1)静态部分:标准的HTML标签、静态的页面内容,这些内容与静态HTML页面相同.
(2)动态部分:Java程序控制的内容,这些内容由Java程序来动态生成。
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<html>
<head>
<title>欢迎</title>
</head>
<body>
你好Java JSP!现在时间是:<%out.println(new java.util.Date());%>
</body>
</html>
在<% %>之间的就是可以把Java代码嵌入HTML页面中,这就变成了动态的JSP页面。从表面上来分析,JSP页面已经不再需要Java类,似乎感觉完全脱离了Java面向对象的特征了,但是,实际上JSP是Servlet的一种特殊的形式,每一个JSP的页面就是一个Servlet的实例。
其次他的工作原理如下:
(1)当用户访问一个JSP页面时,回想一个Servlet容器(Tomcat)发出请求;
(2)如果是第一次请求页面,或页面有所改动,则servlet容器首先要把JSP页面(假设为test.jsp)转化为Servlet代码(test.java),再将其转化为(test.class文件);因为这个过程(编译)会耗费一定时间,所以第一次访问或jsp文件有改动时,访问时间有些长;
(3)JSP容器负责调用从JSP转换来的servlet,这些servlet负责提供服务相应用户请求(比如客户端发送表单,要求servlet:formprocessor.java来处理,则容器会建立一个线程,调用formprocessor.java来处理该请求);如果用户有多个请求,则容器会建立多个线程处理多个请求;
(4)容器执行字节码文件(包括调用的servlet:formprocessor.java字节吗),并将其结果返回到客户端;(返回的最终方式是有servlet输出html格式的文件流)
注释:
JSP页面必须要在JSP服务器内运行,如tomcat weblogic,jboss等等
JSP页面的访问者无须安装任何客户端,甚至不需要可以运行Java的运行环境,因为JSP页面输送到客户端的是标准HTML页面。
4.常用语法
1.指令标识
指令标识主要用于设定整个JSP页面范围内都有效的相关信息,它是被服务器解释并执行的,不会产生任何内容输出到页面中。也就是说,指令标识对于客户端浏览器是不可见的。
JSP指令标识的语法格式如下:
<%@ 指令名 属性1=“属性值1” 属性2=“属性值2” %>
指令名:用于指定指令名称。在JSP中包括:Page、include、taglib这3条指令。
属性:用于指定属性名称,不同的指令包含不同的属性。在一个指令中可以设置多个属性,各属性之间用逗号或空格分隔。
page指令:<%@ page ... %> 用于定义整个JSP页面的相关属性。
例如,在应用Eclipse创建JSP文件时,在文件的最顶端会默认添加一条指令,用于指定JSP所使用的语言、编码方式等。这条指令的具体代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
include指令:<%@ include ... %> 通过该指令可以在一个JSP页面中包含另一个JSP页面。
不过该指令是静态包含,也就是说被包含文件中所有内容会被原样包含到该JSP页面中,即使被包含文件中有JSP代码,在包含时也不会被编译执行。使用include指令,最终将生成一个文件,所以在被包含和包含的文件中,不能有相同名称的变量。
代码如下
<%@ include file="path" %>
taglib指令:<%@ taglib ... %> 通过该命令声明该页面中所使用的标签库,同时引用标签库,并指定标签的前缀。
语法格式如下
<%@ taglib prefix="tagPrefix" uri="tagURI" %>
注意:
prefix:用于指定标签的前缀。该前缀不能命名为jsp、jspx、java、javax、sun、servlet和sunw。
uri:用于指定标签库文件的存放位置。
举个例子
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
5.脚本标识
JSP表达式
格式如下
<%= 表达式%>
举个例子
<% String manager="pan_junbiao的博客"; %> <!-- 定义保存管理员名称变量 -->
管理员:<%= manager %><br/> <!-- 输出结果为:管理员:pan_junbiao的博客 -->
<%= "管理员:" + manager %><br/> <!-- 输出结果为:管理员:pan_junbiao的博客 -->
<%= 3*6 %><br/> <!-- 输出结果为:18 -->
<% String url="https://blog.csdn.net/pan_junbiao"; %> <!-- 定义保存文件名称变量 -->
<a target="_blank" href="<%= url %>">pan_junbiao的博客连接</a> <!-- 输出结果为:pan_junbiao的博客连接 是一个链接-->
声明标识
声明标识用于在JSP页面中定义全局的变量或方法。通过声明标识定义的变量和方法可以被整个JSP页面访问,所以通常使用该标识定义整个JSP页面都需要引用的变量或方法。声明标识的语法格式如下:
<%! 声明变量或方法的代码 %>
例子
<%!
int number=0; //声明全局变量
int count(){ //声明全局方法
number=number%4; //number与4的取余
return number; //返回number的值
}
%>
取余的结果为:
<%= count() %>
代码片段
所谓代码片段就是在JSP页面中嵌入的Java代码或是脚本代码。代码片段将在页面请求的处理期间被执行,通过Java代码可以定义变量或是流程控制语句等;而通过脚本代码可以应用JSP的内置对象在页面输出内容、处理请求和响应、访问session会话等。代码片段的语法格式如下:
<% Java代码或是脚本代码 %>
举例
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>九九乘法表</title>
</head>
<body>
<%
String str = ""; //声明保存九九乘法表的字符串变量
//连接生成九九乘法表的字符串
for (int i = 1; i <= 9; i++) { // 外循环
for (int j = 1; j <= i; j++) { // 内循环
str += j + "*" + i + "=" + j * i;
str += " "; //加入空格符
}
str += "<br>"; // 加入换行符
}
%>
<table width="440" height="85" border="1" cellpadding="0" cellspacing="0" style="font:9pt;"
bordercolordark="#666666" bordercolorlight="#FFFFFF" bordercolor="#FFFFFF">
<tr>
<td height="30" align="center">九九乘法表</td>
</tr>
<tr>
<td style="padding:3pt">
<%=str%> <!-- 输出九九乘法表 -->
</td>
</tr>
</table>
</body>
</html>
标签:Java,简介,代码,指令,JSP,标签,页面
From: https://www.cnblogs.com/yzx-sir/p/17342650.html