后台开发学习——Jsp学习
1、jsp语法的三种类型:
答:(1)编译器指令(directive)
①编译器指令包括“包含指令”,“页指令”和“taglib指令”
②它们包含在<%@ %>卷标里
③常用的指令是page(页指令)和include(包含指令)
④page指令用来定义JSP文件中的全局属性。一个JSP页面可以包含多个page指令,除了import属性外,其它属性只能出现一次。
作用范围:无论page指令放在jsp文件的哪个地方它都作用于整个JSP页面。
page指令的常用属性:
A)language:定义要使用的脚本语言,目前只能是“java”, 即language="java"。
B)import: 和一般的Java import意义一样,用于引入要使用的类,只是用逗号“,”隔开包或者类列表。默认省略,即不引入其他类或者包。例如,import="java.io.*,java.util.Hashtable"。
下面的包在jsp编译时就已经导入了,所以就不需要再指明了:
java.lang.*
Javax.servlet.*
Javax.servlet.jsp
Javax.servlet.http.*
C)session:指定所在页面是否参与HTTP会话。默认值为true,session="true"。
D)contentType:定义JSP字符编码和页面响应的MIME类型。TYPE=MIME TYPE;charset=CHARSET。默认为contentType=text/html,charset=iso8859-1。例如contentType="text/html;charset=utf-8"
E)pageEncoding:JSP页面的字符编码 ,默认值为pageEncoding="iso-8859-1",例如pageEncoding="gb2312"。
F)buffer:指定到客户输出流的缓冲模式。如果为none,则不缓冲;如果指定数值,那么输出就用不小于这个值的缓冲区进行缓冲。与autoFlash一起使用。默认不小于8KB,根据不同的服务器可设置。例如,buffer="64kb"。
G)autoFlash:如果为true缓冲区满时,到客户端输出被刷新;如果为false缓冲区满时,出现运行异常,表示缓冲区溢出。默认为true,例如autoFlash="true"。
Eg. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
⑤include包含指令:向当前页中插入一个静态文件的内容。
<% include file=”relativeURL” %>或<% include file=”相对位置” %>
⑥taglib指令:用于引入定制标签库
<%@ taglib URL=”URLToTagLibrary” prefix=”tagPrefix” %>(prefix:前缀,tag:标签)
(2)脚本语法(scripting)
①HTML注释:<!--注释部分-->
<!-- 注释 [ <%= 表达式 %> ] -->:这种注释发送到客户端,但不直接显示,在源代码中可以查看到。
②JSP隐藏注释:<%--注释部分--%>
不发送到客户端
③声明:<%! 声明; [声明;] … %>:当服务器将JSP转换为Servlet时,会将JSP中的声明转换为类的成员变量,而将脚本段转换为方法中的局部变量,servlet是单实例的,这样成员变量的值就只有一个,每个用户都会访问到它,而脚本段中的值则是局部变量,每个用户访问时互不影响。
④表达式:<%= 表达式 %>
⑤脚本段
(3)动作语法(action)
①<jsp:forward page = ”relativeURL 或者 <%= 表达式 %> ”>,用于转向页面,在该指令后面的所有代码都没有机会执行,因为页面的流程已经转向到了另外一个页面。
属性:<jsp:param name = ”参数名” value = ”参数值”>
②<jsp:getProperty>,
③<jsp:include page = “relativeURL 或者 <%= 表达式 %> ”>:用于包含某个页面,
A)<jsp:forward>代码测试:
①NewFile1.jsp(要转向的页面)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>forward测试</title>
</head>
<body>
<jsp:forward page="NewFile.jsp">
<jsp:param name="userName" value="Remoa" />
</jsp:forward>
</body>
</html>
②NewFile.jsp(转向后的页面)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>forward测试</title>
</head>
<body>
<%
String userName = request.getParameter("userName");
String outStr = "Welcome, ";
out.println(outStr + userName);
%>
</body>
</html>
③运行结果:
B)<jsp:include>代码测试:
①NewFile2.jsp(被包含的页面)
<%@ page language="java" contentType="text/html; charset=UTF-8" import="java.util.*"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>include测试</title>
</head>
<body>
<%
String userName = request.getParameter("user");
String date = new Date().toLocaleString();
out.println("欢迎您," + userName + " !现在是" + date);
%>
</body>
</html>
②NewFile3.jsp(包含NewFile2.jsp页面的显示给用户的页面)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>include测试</title>
</head>
<body>
<jsp:include page="NewFile2.jsp">
<jsp:param name="user" value="Remoa" />
</jsp:include>
<%
out.println("<br/>未来的你,会感谢今天拼命努力的自己!<br/>");
out.println("加油!");
%>
</body>
</html>
③运行结果:
2、小练习:
(1)题目要求:
①一共两个jsp
第一个jsp:两个文本框 用户分别输入一个数字 点击提交按钮 就会转向下一个jsp页面
第二个jsp:会显示一个多少行多少列的Table 表格居中 宽度占50% 表格里面加一些连续的数字
(2)代码示例:
①User.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户界面</title>
</head>
<body>
<form method="post" action="Table.jsp">
行数:<input type="text" name="row" placeholder="请输入行数" /><br />
列数:<input type="text" name="colomn" placeholder="请输入列数" /><br />
<button type="submit" value="submit">提交</button>
</form>
</body>
</html>
②Table.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>表格页面</title>
</head>
<body>
<%
int number = 1;
int row = 0, colomn = 0;
try{
row = Integer.parseInt(request.getParameter("row"));
colomn = Integer.parseInt(request.getParameter("colomn"));
}catch(Exception e){
out.println("请输入一个正整数");
return;
}
%>
<div style="text-align:center">
<table border="2px" style="width:50%; margin:auto;">
<%
for(int i = 0; i < row; i++){
%>
<tr>
<%
for(int j = 0; j < colomn; j++){
%>
<td><%= number++ %></td>
<% } %>
</tr>
<% } %>
</table>
</div>
</body>
</html>
(3)运行结果:
①当输入正确时,显示如下二图:
②当输入不正确时,显示如下二图:
3、jsp最终都会转换为servlet去执行。