JSP基础语法
1.1、注释:
JSP中的注释有两大类:
(1)、显式型注释:HTML风格的注释
(2)、隐式型注释:
①、JA VA型的注释:单行注释://......;多行注释:/*......*/。
②、JSP自身的注释:<%-......-%>
1.2、Script
Scriptlet(脚本小程序):
①:<%......%>可定义变量,编写语句;
②:<%!......%>定义全局变量,编写方法和类,但是一般是不在JSP中定义类的
③:<%=......%>这是一个输出语句,他与out.print()相比,使用<%=%>进行输出
会更好(这点请看下面的代码),在JSP开发中最好不要使用out.print()语句输出。scriptletdemo01.jsp
<%
out.println("
"+(i*j)+" | ");
%>
代码运行效果如下:
查看源代码如下:
我们可以看到,使用out.print()进行输出时的源代码是凌乱的,不方便查看,而且此时不能够直接通过网页编辑器打开jsp文件进行特效的编辑。
scriptletdemo02.jsp
<%=i*j%> |
运行效果如下:
查看源代码:
使用<%=%>进行输出时,我们可以看到,现在的源代码错落有致,很方便查看,而且此时很方便直接打开使用网页编辑工具进行效果的编辑。
1.3、动态的打印表格
.html
printable.html
printable
function validate(f){
if(!(/^\d+$/.test(f.rows.value))){
alert("行数必须是数字!");
f.rows.focus();
return false;
}
if(!(/^\d+$/.test(f.cols.value))){
alert("列数必须是数字!");
f.cols.focus();
return false;
}
return true;
}
.jsp
printable.jsp
printable
<%
int row=0;
int col=0;
try{
row=Integer.parseInt(request.getParameter("rows"));
col=Integer.parseInt(request.getParameter("cols"));
}catch(Exception e){}
%>
<%=k%> | |
<%=i+1%> | <%=i*j%> |
在网页中的运行效果如下:
以上的网页可以动态的打印所需要的表格数,而且当我们输入的行数和列数有误的时候,即不完全是数字的时候就会出现相应的错误的提示,相应的列数也如此,效果如下:
1.4、page
page表示当前一个JSP页面,即把一个JSP页面当成一个对象来使用。
page指令:
page指令的主要功能:
a、设置MIME类型
b、导包指令
c、其他指令:错误页、禁止session、网页的缓冲等等
1.4.1、设置MIME类型
在IE浏览器中一般的默认编码格式是“西欧(ISO)”,所以在中文情况下编译出来的是乱码,需要对其进行MIME类型的设置。下面看一下设置前后的效果对比:设置前代码和效果:
设置后代码和效果:
<%@page contentType="text/html;charset=GBK"%>
以上只是设置MIME类型的一个例子而已,.htm和.html的页面处理方式是完全一致的,这是因为其内部的MIME处理方式是完全一样的。其相关的配置在Tomcat安装目录下的conf下的web.xml文件下进行查看。
下面看一个范例,将页面显示成word文档:
<%@page contentType="application/msword"%>
<%=i*j%> |
效果如下:
1.4.2、导入指令
import指令是JSP中唯一可以使用多次的指令。导入形式为:
<%@page import="java.sql"%>
<%@page import="java.util*,java.io.*"%>
导入java.sql包了,如果需要连接数据库的话,那么就需要把相应的驱动程序包考入到Tomcat安装目录下的lib文件夹下,下面将oracle安装目录下的驱动jar包拷贝过去。
然后启动Oracle的相关服务,打开SQLPlus登录程序emp表如下:
下面编写一个连接数据库的网页程序:
<%@page contentType="text/html;charset=GBK"%>
<%@page import="java.sql.*"%>
<%!
public static final String DBDRIVER="oracle.jdbc.driver.OracleDriver";
public static final String DBURL="jdbc:oracle:thin:@localhost:1521:MYORACLE";
public static final String DBUSER="scott";
public static final String DBPASS="tiger";
%>
<%
Connection conn=null;//数据库的连接
PreparedStatement pstmt=null;//数据库的操作
ResultSet rs=null;//查询结果集
%>
<%
Class.forName(DBDRIVER);//加载驱动程序
conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);//连接初始化String sql="SELECT empno,ename,job,hiredate,sal,comm,deptno FROM emp";
pstmt=conn.prepareStatement(sql);
rs=pstmt.executeQuery();
%>
雇员编号 | 雇员姓名 | 雇员工作 | 雇佣日期 | 雇员工资 | 雇员奖金 | 部门编号 |
---|---|---|---|---|---|---|
<%=empno%> | <%=ename%> | <%=job%> | <%=hiredate%> | <%=sal%> | <%=comm%> | <%=deptno%> |
程序运行效果如下:
1.5、include
include表示包含,在JSP中有以下两个形式的包含命令:
a、<%@include%>指令(属于静态包含)
b、
1.5.1、<%@include%>
content.txt
inc
content.
content.inc
htm
content.
content.htm
includedemo01.jsp
<%@include file="content.txt"%>
<%@include file="content.inc"%>
<%@include file="content.htm"%>
运行效果:
1.5.2、
该包含是属于动态包含,如果包含的是*.jsp文件,则先处理之后再将结果包含进来,而当包含的是非*.jsp文件的时候,就把文件直接静态的包含进来,此时功能和<%@include%>的类似。此种包含方式有两种语法:
语法形式一:
语法形式二:
使用语法形式一完成:
建立一个includedemo03.jsp页面:
运行效果如下:
使用语法形式二完成:
先建立一个content.jsp页面,该页面可以接受参数:
includedemo044.jsp页面:
建立一个includedemo0
运行效果如下:
当然也可以在当前的页面中传递参数:
建立includedemo05.jsp页面
<%!
String str="HELLO WORLD!";
%>
运行效果:
注意:传递参数的时候必须使用<%=%>的形式进行输出才行。
以上两种语法方式中要注意的是第一种在
1.5.3、<%@include%>与
<%@include%>属于静态包含,是先包含后处理,而
范例1:
建立一个demo01.jsp页面
<%@page contentType="text/html;charset=GBK"%>
<%!
int i=10;
%>
再建立一个includedemo06.jsp页面
<%@page contentType="text/html;charset=GBK"%>
<%!
int i=1000;
%>
运行效果
范例2:
修改includedemo06.jsp页面的内容如下
<%@page contentType="text/html;charset=GBK"%>
<%!
int i=1000;
%>
运行效果:
通过以上两个范例的对比,我们可以知道,使用动态包含比使用静态包含要方便,而且可以在被包含的页面中进行传递参数。
注意:包含指令属于标签指令形式,此指令在使用的时候必须完结,即加上斜杠。1.6、forward
使用forward可以进行页面的跳转操作。
下面来看看实现一个页面的跳转操作范例:
建立forwarddemo01.jsp页面
<%@page contentType="text/html;charset=GBK"%>
再建立forwarddemo02.jsp页面
<%@page contentType="text/html;charset=GBK"%>
运行效果
运行效果中可以看出,页面发生了跳转,但是地址栏却没有发生改变,这是因为页面跳转操作在此处是在服务器端进行的跳转。只要是在服务器端跳转,那么地址栏就永远不会发生变化。
同样forward指令也有两种语法格式:
格式一:
格式二:
……
下面来看一个使用格式二进行跳转的实现,同时向页面中传递参数,使用
request.getParameter()进行接收:
建立forwarddemo03.jsp页面
<%@page contentType="text/html;charset=GBK"%>
再建立forwarddemo04.jsp页面
<%@page contentType="text/html;charset=GBK"%>
运行效果:
开发实例:
案例要求:本实例是编写一个登录页面,当登录成功时进入相应的操作页面,当登录失败的时候有相应提示,并且回答登录页面重新登录!除此之外,还要求使用数据库!
案例分析:根据案例的要求,我们需要建立一个数据登录表(tuser),建立一个Login.html 文件做登录,check.jsp文件进行数据库的相关操作,success.jsp文件在登录成功之后作为跳转页面,failure.jsp文件在登录失败的时候作为跳转页面,有了简单的思路之后,可以写成下面的相应代码来实现本案例。
首先是创建tuser表:
//删除表
DROP TABLE tuser;
//创建表
CREATE TABLE tuser(
userid VARCHAR2(50)PRIMARY KEY NOT NULL,
name VARCHAR(30)NOT NULL,
password VARCHAR2(40)NOT NULL
);
//插入测试数据
INSERT INTO tuser(userid,name,password)VALUES('admin','管理员','admin');
INSERT INTO tuser(userid,name,password)VALUES('guest','来访者','guest');
//提交事物
commit;
然后创建Login.html文件:
function validate(f){
if(!(/^\w{5,20}$/.test(https://www.doczj.com/doc/a45254887.html,erid.value))){
alert("用户ID必须是5~20位!");
https://www.doczj.com/doc/a45254887.html,erid.focus();
return false;
}
if(!(/^\w{5,20}$/.test(f.password.value))){
alert("用户密码必须是5~20位!");
f.password.focus();
return false;
}
return true;
}
再创建check.jsp文件:
<%@page import="java.sql.*"%>
<%!
public static final String DBDRIVER="oracle.jdbc.driver.OracleDriver";
public static final String DBURL="jdbc:oracle:thin:@localhost:1521:MYORACLE";
public static final String DBUSER="scott";
public static final String DBPASS="tiger";
%>
<%
Connection conn=null;//数据库连接
PreparedStatement pstmt=null;//数据库操作
ResultSet rs=null;//查询结果集
boolean flag=false;//表示登录成功与否的标志
%>
<%
String userid=request.getParameter("userid");//接收输入的用户ID
String password=request.getParameter("password");//接收输入的用户密码
try{
Class.forName(DBDRIVER);
conn=DriverManager.getConnection(DBURL,DBUSER,DBPASS);
String sql="SELECT userid,name FROM tuser WHERE userid=?AND password=?";
pstmt=conn.prepareStatement(sql);
pstmt.setString(1,userid);
pstmt.setString(2,password);
rs=pstmt.executeQuery();
if(rs.next()){//如果查询到相应的内容,表示可以登录
flag=true;
}
}catch(Exception e){
}finally{
conn.close();//连接关闭则所有的都关闭
}
%>
<%
if(flag){//登录成功,应该跳转到success.jsp页面
%>
<%
}else{//登录失败,跳转到failure.jsp页面
%>
<%
}
%>
然后是创建success.jsp文件:
<%@page contentType="text/html;charset=GBK"%>
接着是failure.jsp文件:
<%@page contentType="text/html;charset=GBK"%>
运行效果:
1.6、九个内置对象和四个属性范围1.6.1、九个内置对象
1.6.2、四个属性范围:
(1)、page的属性范围
范例:pageContextDemo01.jsp
<%@page contentType="text/html;charset=GBK"%>
<%@page import="java.util.*"%>
<%
//此时通过page设置属性
pageContext.setAttribute("name","张三");
pageContext.setAttribute("date",new Date());
%>
<%
//此时通过page获得属性值
String name=(String)pageContext.getAttribute("name");//因为获得的值是一个Object对象,必须进行向下转型
Date date=(Date)pageContext.getAttribute("date");//因为获得的值是一个Object对象,必须进行向下转型
%>
运行效果:
以上范例是在同一个一面中进行的属性值的设置和获得操作,是通过page设置的,下面看一下跳转到其他页面之后的效果。
范例:pageContextDemo02.jsp
<%@page contentType="text/html;charset=GBK"%>
<%@page import="java.util.*"%>
<%
//此时通过page设置属性
pageContext.setAttribute("name","张三");
pageContext.setAttribute("date",new Date());
%>
范例:pageContextDemo03.jsp
<%@page contentType="text/html;charset=GBK"%>
<%@page import="java.util.*"%>
<%
//此时通过page获得属性值
String name=(String)pageContext.getAttribute("name");//因为获得的值是一个Object对象,必须进行向下转型
Date date=(Date)pageContext.getAttribute("date");//因为获得的值是一个Object对象,必须进行向下转型
%>
运行效果:
由运行效果可以看出,当页面发生跳转是,所跳转的页面中并不能通过page属性获得设置值,为了能够在跳转的页面中获得设置的值,下面来看一下request对属性的设置。
(2)、request的属性范围
范例:requestDemo01.jsp
<%@page contentType="text/html;charset=GBK"%>
<%@page import="java.util.*"%>
<%
//此时通过request设置属性
request.setAttribute("name","张三");
request.setAttribute("date",new Date());
%>
范例:requestDemo02.jsp
<%@page contentType="text/html;charset=GBK"%>
<%@page import="java.util.*"%>
<%
//此时通过request获得属性值
String name=(String)request.getAttribute("name");//因为获得的值是一个Object对