JSP基础语法.docx
- 文档编号:30392408
- 上传时间:2023-08-14
- 格式:DOCX
- 页数:36
- 大小:45.05KB
JSP基础语法.docx
《JSP基础语法.docx》由会员分享,可在线阅读,更多相关《JSP基础语法.docx(36页珍藏版)》请在冰豆网上搜索。
JSP基础语法
1、课程名称:
JSP基础语法
2、知识点
2.1、上次课程的主要知识点
1、JavaScript的基本语法与Java是一样的,所以重点掌握事件及函数的互操作;
2、最后讲解的表单的验证程序,包括日期组件的显示、表格的简单的美工设计;
3、动态WEB的执行流程、Tomcat安装及配置、JSP程序在Tomcat中的执行流程、request.getParameter(String参数)。
2.2、本次预计讲解的知识点
1、JSP中的基本语法的使用;
2、注释及Scriptlet代码的操作;
3、page指令的使用;
4、包含指令的使用;
5、跳转指令的使用;
6、完成一个简单的用户登陆程序,并分析此程序的漏洞问题;
7、完成分页程序的算法。
3、具体内容(重点)
3.1、注释
JSP实际上是一种在HTML语言中嵌入Java代码的开发程序,所以在JSP之中有两种风格的注释:
·显式注释:
使用了HTML风格(
--…-->)的注释;
·隐式注释:
使用java风格的注释(//、/*…*/)、JSP风格的注释(<%--…--%>)
范例:
观察注释的操作
--此注释会在客户端上进行显示-->
<%
//此注释不会显示
/*
此注释不会显示
*/
%>
<%--
此注释为JSP提供的注释语法,也不会显示
--%>
3.2、Scriptlet
JSP是在HTML语法之中嵌入了Java代码,而所有的Java代码要编写的话就必须在Scriptlet之中编写,根据功能的不同,Scriptlet一共分为三种类型:
<%%>、<%!
%>、<%=%>。
3.2.1、第一种风格的Scriptlet:
<%%>
可以将使用“<%%>”中的代码理解为一个方法中定义的内容,主要的功能是可以用于定义局部变量、编写语句。
范例:
观察程序
<%
intx=10;//局部变量
out.println("
"+x+++"
");%>
之后执行程序,可以发现,不管页面如何的刷新,x最终输出的内容都是10,那么就可以得出结论,x是一个局部变量,每次页面刷新的时候会重复的定义,并重复的为其赋值,而out.println()是程序的语句,所以在这之中定义的操作就等同于一个方法中定义的操作。
3.2.2、第二种风格的Scriptlet:
<%!
%>
可以将此类Scriptlet理解为一个类中定义的内容,例如:
一个类中可以定义内部类、属性、方法,所以在此种Scriptlet之中可以定义全局变量、全局常量、类、方法,但是从一个好的开发角度而言,很少有在JSP中直接定义类或方法的情况出现。
范例:
编写代码
<%!
//属于全局变量,声明一次
intx=10;//局部变量
%>
<%
out.println("
"+x+++"
");%>
现在的x属于全局变量,每次只声明一次,还可以定义常量、方法、类。
<%!
publicstaticfinalStringINFO="MLDN";//全局常量
publicintadd(intx,inty){//定义方法
returnx+y;
}
classPerson{
privateStringname;
privateintage;
publicPerson(Stringname,intage){
this.name=name;
this.age=age;
}
publicStringtoString(){
returnthis.name+"-->"+this.age;
}
}
%>
<%
out.println("
"+INFO+"
");out.println("
"+add(10,20)+"
");out.println("
"+newPerson("SMITH",30)+"
");%>
从实际上来讲,使用<%!
%>定义全局常量是一个比较常用的功能。
3.2.3、第三种风格的Scriptlet:
<%=%>
此类Scriptlet的主要功能是用于输出的,所以又称为“表达式输出”,可以输出一个常量或者是一个变量的内容。
<%!
publicstaticfinalStringINFO="MLDN";//全局常量
%>
<%=INFO%>
<%="HELLOWORLD!
!
!
"%>
使用此方式可以替代掉out.println()操作。
3.2.4、out.println()与<%=%>选择
可以发现out.println()的功能主要是输出,而且<%=%>也是输出,那么这两种操作到底该使用那一种更好呢?
为了验证此类操作,下面举一个比较极端的例子,输出表格。
范例:
使用out.println()完成表格的输出
<%
out.println("
for(intx=0;x<10;x++){
out.println("
for(inty=0;y<10;y++){
out.println("
}
out.println("
}
out.println("");
%>
此时代码编写完成,下面运行也可以显示出要输出的表格,但是此类输出有以下几个问题:
·美工修改不方便,因为从实际上来讲,美工修改代码基本上都使用工具;
·所有的java程序和HTML代码都混合在一起输出了;
·生成的HTML代码的风格不好,没有缩进。
范例:
使用<%=%>的形式完成表格的输出
<%
for(intx=0;x<10;x++){
%>
<%
for(inty=0;y<10;y++){
%>
<%
}
%>
<%
}
%>
以上的代码之中可以发现最头疼的就是Scriptlet代码太多了,看起来不方便,但是却有如下的特点;
·生成的HTML代码的结构比较有规律;
·可以非常方便的进行美工的修饰;
·可以达到很好的JAVA程序和HTML程序相分离的目的。
所以,由上可以得出结论,以后只要是牵扯到页面的输出功能,永远不要再使用out.println(),只能使用<%=%>。
3.3、思考题
现在要求完成以下一个功能,要求用户可以输入要打印表格的行数和列数,之后的JSP可以根据用户输入的内容动态的打印出表格,但是前台的表单必须要经过JavaScript的验证。
范例:
编写前台表单,同时加入验证
functionvalidate(){
varrow=document.getElementById("row");
varcol=document.getElementById("col");
if(!
(/^\d+$/.test(row.value))){
alert("表格的行数必须是数字!
");
row.focus();
row.select();
returnfalse;
}
if(!
(/^\d+$/.test(col.value))){
alert("表格的列数必须是数字!
");
col.focus();
col.select();
returnfalse;
}
returntrue;
}
范例:
编写JSP,接收内容,并打印
<%
introws=0;
intcols=0;
try{
rows=Integer.parseInt(request.getParameter("row"));
cols=Integer.parseInt(request.getParameter("col"));
}catch(Exceptione){}
%>
<%
for(intx=0;x %> <% for(inty=0;y %> <% } %> <% } %> 以后在进行程序开发的时候一定要考虑到,request.getParameter()可能返回的内容是null的情况。 3.4、page指令 每一个JSP的文件实际上都可以通过page指令指定其操作的属性,此指令有如下几个常用功能: 设置MIME类型、解决编码问题、导包操作。 3.4.1、编码问题 在最早的Tomcat之中,如果一个JSP页面没有指定合理的属性,那么页面中的中文将显示成乱码。<%=x*y%> 啊,美丽的祖国,我亲爱的祖国!
如果现在一个JSP中的中文显示的是乱码的话,可以使用以下两种方式解决:
·直接指定pageEncoding属性,将其编码设置为GBK。
<%@pagepageEncoding="GBK"%>
啊,美丽的祖国,我亲爱的祖国!
·直接使用contentType这个MIME类型指定编码。
<%@pagecontentType="text/html;charset=GBK"%>
啊,美丽的祖国,我亲爱的祖国!
以后使用更多的是pageEncoding属性。
3.4.2、设置MIME类型
MIME类型指的是一个页面的显示风格,例如,如果说现在一个页面是html的风格,使用:
text/html指定,如果要想知道其他风格的话,则就必须观察conf/web.xml文件中的定义了。
例如:
网页文件的后缀即可以是html也可以是htm,主要的原因是mime类型指定的:
范例:
现在希望让一个页面显示成word的形式
·word的MIME类型:
·显示成word风格
<%@pagecontentType="application/msword"pageEncoding="GBK"%>
啊,美丽的祖国,我亲爱的祖国!
<%
for(intx=0;x<3;x++){
%>
<%
for(inty=0;y<3;y++){
%>
<%
}
%>
<%
}
%>
页面运行之后出现了如下的一个下载提示框:
表示由于此处指定的是word的风格显示,所以询问是否直接打开,此处选择保存。
如果MIME类型指定错误的话,也会出现下载框,但是这种是错误的,而且造成此类问题的根源永远在于MIME类型错误,以后出现此类问题解决。
但是必须注意的是,以上的两种属性只能设置一次,但是这也分两种情况:
·Tomcat6.0之前,如果设置的page属性出现了多次,则程序出现错误。
<%@pagecontentType="text/html"pageEncoding="GBK"%>
<%@pagecontentType="text/html"pageEncoding="GBK"%>
·Tomcat6.0之后,可以设置相同的多次,但是如果出现了不一致,也会出现错误。
<%@pagecontentType="text/html"pageEncoding="GBK"%>
<%@pagecontentType="text/html"pageEncoding="UTF-8"%>
3.4.3、导包操作
如果现在一个JSP页面之中,需要导入其他系统包的话,那么就可以使用import属性完成,此属性是唯一一个可以多次设置的参数。
范例:
导包操作
<%@pagecontentType="text/html"pageEncoding="GBK"%>
<%@pageimport="java.util.*,java.io.*"%>
<%@pageimport="java.text.*"%>
<%=newDate()%>
现在既然可以导包了,那么就意味着可以导入JDBC操作了,但是如果现在要是想连接Oracle数据库需要以下几个先决的条件:
·监听服务和数据库服务必须打开;
·配置好驱动程序。
如果要想连接数据库,则需要将驱动程序拷贝到Tomcat/lib目录下,这样就表示将驱动程序配置到了Tomcat中的classpath之中,但是此时必须要将Tomcat重新启动,否则新的驱动程序无法加入进来。
范例:
将Oracle中scott.emp表的数据直接显示在页面之中
<%@pagecontentType="text/html"pageEncoding="GBK"%>
<%@pageimport="java.util.*"%>
<%@pageimport="java.sql.*"%>
<%!
publicstaticfinalStringDBDRIVER="oracle.jdbc.driver.OracleDriver";
publicstaticfinalStringDBURL="jdbc:
oracle:
thin:
@localhost:
1521:
MLDN";
publicstaticfinalStringDBUSER="scott";
publicstaticfinalStringDBPASSWORD="tiger";
%>
<%
Connectionconn;
PreparedStatementpstmt;
ResultSetrs;
%>
<%
Class.forName(DBDRIVER);
conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
Stringsql="SELECTempno,ename,job,hiredate,sal,commFROMemp";
pstmt=conn.prepareStatement(sql);
rs=pstmt.executeQuery();
%>
雇员列表
<%
while(rs.next()){
intempno=rs.getInt
(1);
Stringename=rs.getString
(2);
Stringjob=rs.getString(3);
java.util.Datehiredate=rs.getDate(4);
doublesal=rs.getDouble(5);
doublecomm=rs.getDouble(6);
%>
<%
}
%>
<%
rs.close();
pstmt.close();
conn.close();
%>
可以在此代码中加入美工的设计,以达到好的显示效果。
3.5、包含语法
从一般的站点中,可以发现其基本的组成结构如下:
工
具
栏
一些固定的头部信息
中间的内容是会被改变的
一些固定的尾部信息
那么对于这样的结构,现在就有两种实现形式:
·实现一:
将这些工具栏、头部、尾部的代码重复在每一个页面中编写;
·实现二:
将这些工具栏、头部、尾部的代码分别定义成一个个独立的文件,用的时候直接导入。
很明显使用第二种方式更加方便维护,而且代码也不会重复,而要想实现这种包含的操作,在JSP之中可以有两种实现形式:
静态包含、动态包含。
3.5.1、静态包含:
<%@include%>
静态包含是指可以包含任何文件的文件内容,其语法如下:
<%@includefile="包含路径"%>
那么,下面为了观察清楚,定义三个文件:
content.inc:
content.htm:
content.jsp:
content.inc
content.htm
content.jsp
范例:
包含以上的三个页面
<%@pagecontentType="text/html"pageEncoding="GBK"%>
自己页面定义的内容
<%@includefile="content.inc"%>
<%@includefile="content.htm"%>
<%@includefile="content.jsp"%>
此时,三个包含语句,分别包含了三个文件的内容,此时程序运行的时候,可以发现将文件中的内容全部包含进来。
3.5.2、动态包含:
include> 动态包含的功能与静态包含类似,有以下两种使用的情况; ·如果现在包含的是一些普通的静态文件,则与静态包含的处理效果完全一样; ·如果现在包含的是动态文件(*.jsp),则将采用动态的处理方式执行。 动态包含的语法如下: 语法一: 不传参数 includepage="包含的路径"/> 语法二: 传递参数 includepage="包含的路径"> paramname="参数名称"value="参数内容"/> paramname="参数名称"value="参数内容"/> ... include> 由于这种包含的语句属于标签指令形式: 所以,这种语句操作的最后必须完结。 范例: 完成与静态包含类似的操作 <%@pagecontentType="text/html"pageEncoding="GBK"%> includepage="content.inc"/> includepage="content.htm"/> includepage="content.jsp"/> 此时程序的运行效果与第一个程序没有任何的区别,但是如果说现在被包含的页面是动态页面的话,那么可以使用 param>向页面中传递参数,而参数的接收使用的是request.getParaemter()完成。 范例: 定义接收参数的页面——param.jsp <%@pagecontentType="text/html"pageEncoding="GBK"%> <%=request.getParameter("ref1")%> <%=request.getParameter("ref2")%> 范例: 向被包含页面传递参数 <%@pagecontentType="text/html"pageEnco自己页面定义的内容
接收参数并显示!
参数一:
参数二:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JSP 基础 语法