JSP基本语法
Hello wrold
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!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>
<%out.print("hello world"); %>
</body>
</html>
页面组成元素
page指令
`<%@page contentType="text/html; charset=UTF-8"%>`
注释
`<%--不发送到客户端,不会在浏览器查看源代码时显示--%>
<%/*多行注释*/%>
<%//单行注释%>`
声明
`<%!这是一个声明%>`
---------------------------------------------以下为详解部分---------------------------------------------
脚本元素
隐藏注释
1.该注释不发送到客户端,存在JSP文件中
2.增加程序可读性同时兼顾安全,web浏览器看不到该注释
<%-- 注释 --%>
HTML注释
1.显式注释,用户可以看到内容
2.该注释是在JSP中的
3.注释可以带参数
<!-- 注释 <%JSP语句%>-->
声明
定义变量、多个变量和方法
<%!声明[声明;]%>
<%!声明全局变量%>
<%声明局部变量%>
1.声明必须;结尾,表达式不能以;结尾
2.<%@page%>包含的变量和方法不用重新声明
3.声明不会有任何输出
4.访问为本页面,多页面使用写成单独文件。<%@inclue%>或<jsp:include> 引入进来
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<% int a = 5; %>
<%! int b = 6; %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>wealcome</title>
</head>
<body>
<%a++;b++; %>
<%= "a=" + a %> //刷新网页后a一直为6
<%= "b=" + b %> //每次刷新网页b+1
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<% int a = 5; %>
<%! int b = 6; %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>园面积计算</title>
</head>
<body>
<p>输入半径</p>
<form action="test.jsp" method="get" name="form"> <!--action链接到jsp文件-->
<input type="text" name="radius"> <!-- 文本框 -->
<input type="submit" name="submit" value="开始计算"> <!-- 按钮 -->
</form>
<!-- 以下为test.jsp内容 -->
<%!
double area(double r) { //声明函数area
return Math.PI*r*r;
}
double perimeter(double r){ //声明函数perimeter
return Math.PI*2*r;
}
%>
<%
String str=request.getParameter("radius"); //获取name=radius文本框内的内容
if(str!=null){
try{ //try开始
double r;
r=Double.parseDouble(str);
%>
<!-- html内容,创建两个文本用来显示结果,同时进行函数调用 -->
<p>面积:<%=area(r) %></p>
<p>周长<%=perimeter(r) %></p>
<%
}catch(Exception e){ //try结束
out.print(e.getMessage());
}
}
%>
</body>
</html>
结果:
脚本代码
<%代码%>
可以包含多个JSP语句,方法,变量,表达式
可以使用任何隐含对象和jsp:usebean声明过的对象
段内不能定义方法,会造成嵌套定义 p58
代码可以影响块外html的执行,示例如下
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>time</title>
</head>
<body>
<%
if(true){
%>
html块1 //当为true时,运行此块
<%
}else{
%>
html块2 //当为false时,运行此块
<%
}
%>
</body>
</html>
表达式
<%=表达式%>
不用加分号
顺序是从左到右
实际上是转换成了out.print
<%="hello world"%>就相当于<%out.print("hello world");%>
指令元素
描述了JSP页面转换成JSP容器所能实现的JAVA代码的控制信息
<%指令名 属性1=值1 属性2=值2%>
page指令
定义JSP页面全局属性,可以放在开头或其他地方
包含整个JSP页面,包括静态的包含文件,不包括动态的包含文件
可以有多个page,但是其中的属性只能用一次(import例外)
<%@ page %>
指定值
language="java"表示脚本语法必须符合java语法规则,默认javaextends="packg.class"指定JSP页面生成的Servlet类应该继承自指定的类。使用不当会限制JSP编译能力import={"package.class|package.*"},....导入JSP页面中将要使用的Java类,可以导入一个或多个
默认导入类
java.land.*
javax.servlet.*
javax.servlet.jsp.*
javax.servlet.http.*
buffer="none|8kb|sizekb"设置缓冲区大小,默认8kbautoFlush="true|flase"buffer溢出时是否强制输出,当buffer=none时,该选项必须为trueisThreadSafe="true|flase"是否开启多线程info="text"该文本在执行JSP时会逐字加入JSP,使用Servler.getServletInfo取回errorPage="realtiveURL"处理异常事件的JSP文件isErrorPage="true|flase"设置此页面是否为错误处理页面,默认flase。为true时可以获取exception并传出。contentType="mineType[;charset=characterSet]"|"text/html"指定返回页面的类型,可以有
text/plain 纯文本页面
text/html 纯HEML页面
text/xml XML页面
applcation/x-msexcel Ecxel文件
application/msword Word文件
charser=gbk 指定页面使用的字符编码
等等
include指令
包含一个静态文件,文件中的代码会被复制到当前页面中
<%@include file="relative url"%>
- 插入的是静态的,指的是file不能是一个变量,也不可以在file后添加任何参数
- 加载的外部文件内容将成为网页的一部分,jsp语法也会被执行
- 只能加载指定的外部文件,且不能进行传递参数操作
- 可以将一个复杂网页分成多个简单小网页
示例
test.html内容
<html>
<head>
<title>dd</title>
</head>
this is html
</html>
test.jsp内容
<%@page contentType="text/html;charset=UTF-8" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>include test</title>
</head>
<body>
<p><%@include file="test.html" %></p>
</body>
</html>
运行结果为 this is html,标题是include test
taglib指令
用来定义一个标签库以及其自定义标签前缀
<%@ taglib uri="tagLibraryURI" prefix="tagPrefx"%>
- URI统一资源标识符用来唯一确定标签库的路径,并确定如何处理指定标签库中标签
- prefix定义一个指示使用此标签库的前缀
- 不能使用jsp、jspx、javax、servlet、sun、sunw前缀,这些前缀是保留的
示例
<%@page contentType="text/html;charset=UTF-8" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>taglib test</title>
</head>
<body>
<%@taglib uri="https://www.jspcentral.com/tags" perfix="public" %>
<public:loop> </public:loop>
</body>
</html>
JSP动作元素
动态执行,是一种特殊的标签,通过XML语法格式的标记来实现和控制Servlet引擎行为的
JSP预设Action Element标签
| 分类 | 项目 | 功能说明 |
|---|---|---|
| JavaBean | <jsp:useBean> | 使用JavaBean |
| <jsp:setPropert> | 设置JavaBean属性 | |
| <jsp:getPropert> | 获取JavaBean属性 | |
| <jsp:param> | 设置传送函数 | |
| 一般元素 | <jsp:plugin> | 载入JavaBean或Java applet |
| <jsp:forward> | 网页重定向 | |
| <jsp:include> | 载入HTML或JSP文件 | |
| XML | <jsp:attribute> | 设置标签属性 |
| <jsp:body> | 动态设置XML标签主体 | |
| <jsp:element> | 动态设置XML标签 |
<jsp:include>
可以用来包含静态和动态页面
可以有编译时包含和运行时包含两种方式。编译是静态,速度快。
<jsp:include page="relative URL" flush="true|false"> \\不带参数
<jsp:include page="relative URL" flush="true|false">
<jsp:param name="attributeName" value="attribute Value">
<jsp:param...
</jsp:include>
//带参数
flush是缓冲区
param用于在包含文件时传递一些参数
<jsp:include>(include动作)和<%@include%>(include指令)区别
include指令:把其他页面源码加入进来,相当于复制源码和本页合并后编译,后续改动不理会
include动作:两个页面运行完后,将包含页面的结果页面加入到本页面的结果页面,运行时包含,还可以传递参数给被包含的页面
| 语法|状态 |对象 |描述|
| ------------ | ------------ | ------------ ||
| <%@include file="relative url"%> | 编译时包含 | 静态 |jsp引擎对包含页面进行语法分析|
| <jsp:include page="relative URL"> | 运行时包含 | 静态和动态 |jsp引擎不对包含页面进行语法分析|
动态文件 aciton.jsp
<%@page contentType="text/html;charset=UTF-8" %>
<br>
this is name=
<%=request.getParameter("a1")%>
</br>
<br>
this is password=
<%=request.getParameter("a2")%>
</br>
静态文件 static.html
<html>
<body>
<form method=post action="test.jsp">
<table>
<tr>
<td><input type=text name=name1></td>
</tr>
<tr>
<td><input type=text name=password></td>
</tr>
<tr>
<td><input type=submit value=login></td>
</tr>
</table>
</body>
</html>
主程序
<%@page contentType="text/html;charset=UTF-8" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>include test</title>
</head>
<body>
<!-- 静态方式包含进来 -->
<%@include file="static.html" %>
<a href="action.jsp">continue</a>
<!-- 动态方式包含进来 -->
<jsp:include page="action.jsp" flush="true">
<jsp:param name="a1" value='<%=request.getParameter("name1") %>' />
<jsp:param value='<%=request.getParameter("password")%>' name="a2"/>
</jsp:include>
</body>
</html>
输入值点击login后,name和password更新。点击continue时,值依然为null,因为调用时没有传入参数
<jsp:forword>
将页面重定向到其他页面
不带参数
<jsp:forword page="pageURL">
带参数
<jsp:forword page="pageURL">
<jsp:param name="sttributename" value="attribute Value">
</jsp:forword>
采用来做登录界面
示例
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
</head>
<body>
<form method=get action=checklogin.jsp>
<table>
<tr>
<td>输入用户名:</td>
<td><input type=text name=name value=<%=request.getParameter("user")%>></td>
</tr>
<tr>
<td>输入密码:</td>
<td><input type=password name=password></td>
</tr>
<tr colspan=2>
<td><input type=submit value=login></td>
</tr>
</table>
</body>
</html>
checklogin.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
</head>
<body>
<%
String name= request.getParameter("name");
String password=request.getParameter("password");
if(name != null && password != null && name.equals("hellking") && password.equals("12345"))
{
%>
<jsp:forward page="success.jsp">
<jsp:param name="user" value="<%=name%>"/>
</jsp:forward>
<%
}
else{
%>
<jsp:forward page="login.jsp">
<jsp:param name="user" value="<%=name%>"/>
</jsp:forward>
<%}%>
</body>
</html>
success.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
欢迎<%=request.getParameter("user") %>
</body>
</html>
/jsp:param
传递参数给jsp,上面有使用过
<jsp:param name="" value=''/>
name值为必须设置的,value设置值
使用时配合其他元素使用
<jsp:useBean>、<jsp:setProperty>、<jsp:getProperty>
<jsp:useBean>
<jsp:useBean id="" class=""/>
| 属性 | 用法 |
|---|---|
| id | 命名引用该bean的变量(new一个实例的名称),通过id和scope找到bean就使用,找不到就创建一个bean |
| class | 指定Bean完整包名 |
| scope | 指定Bean范围。 1.page(默认值)只在当前页面可用,存储在PageContext中。 2.request在当前用户请求内都有效,保存在ServletRequest中 3.session在当前HttpsSession内所有页面都有效 4.applicationd对具有相同ServletConntext页面都有效 |
| type | 引用该对象的变量属性,必须是Bean类的名字、超类名字、该类所实现的接口名字之一 |
| beanName | 指定Bean名字。如果有type和beanName则可以省略class(不可同时使用) |
<jsp:setProperty>
设置bean的属性
1.写在外部
<jsp:usebean id="t">
<jsp:setproperty name="t" property="" ...
2.写在usebean内
<jsp:usebean id=t""><jsp:serproperty name="t" property></jsp:usebean>
| 属性 | 用法 |
|---|---|
| name | 必须,指定要设置的bean |
| value | 必须,表示设置那个属性 |
| param | 可选,指定用哪个请求参数作为bean属性的值。没参数则不干活,不传null |
setproperty的值会相互覆盖,如果执行了两次设置属性,则最后一次更新的是最终结果
<jsp:getProperty>
获取属性值
<jsp:setProperty id=" property="">
id指代bean实例名
property代表属性名
结果返回属性的值
如果为空产生 NullPointerException错误,并返回null
如果有一个javabean叫 test,存储在cho3文件夹中
<jsp:usebean id=testone scope="page" class="ch03.test"/>
那么使用
<%=testone.geta()%>
<jsp:gerproperty name="testone" property="a">
效果相同
<jsp:plugin>
从JSP网页中加载Java Applet 或 JavaBean组件程序
<jsp:plugin
type="bean | applet"
code="classFileName"
codebase="classFileDirectoryName"
name="instanceName"
align="left | right | top I middle | bottom"
width="width"
height-"height"
hspace="horizontalSpace"
vspace="verticalSpace"
archive="archiveURL,..."
>
<jsp: params>
<jsp:param name="propertyName" value="propertyValue"></jsp:params>
<jsp: fallback>text message</jsp:fallback>
</jsp:plugin>
本文来自博客园,作者:奇怪的知识增加了,转载请注明原文链接:https://www.cnblogs.com/fyall/p/18655679

浙公网安备 33010602011771号