当前位置:文档之家› JSP学习笔记

JSP学习笔记

JSP基础语法

1.1、注释:

JSP中的注释有两大类:

(1)、显式型注释:HTML风格的注释

(2)、隐式型注释:

①、JA VA型的注释:单行注释://......;多行注释:/*......*/。

②、JSP自身的注释:<%-......-%>

1.2、Script

Scriptlet(脚本小程序):

①:<%......%>可定义变量,编写语句;

②:<%!......%>定义全局变量,编写方法和类,但是一般是不在JSP中定义类的

③:<%=......%>这是一个输出语句,他与out.print()相比,使用<%=%>进行输出

会更好(这点请看下面的代码),在JSP开发中最好不要使用out.print()语句输出。scriptletdemo01.jsp

<%

out.println("

");

for(int i=0;i<100;i++){

out.println("

");

for(int j=0;j<100;j++){

out.print("

");

}

out.println("

");

}

out.println("

"+(i*j)+"
");

%>

代码运行效果如下:

查看源代码如下:

我们可以看到,使用out.print()进行输出时的源代码是凌乱的,不方便查看,而且此时不能够直接通过网页编辑器打开jsp文件进行特效的编辑。

scriptletdemo02.jsp

<%

for(int i=0;i<100;i++){

%>

<%

for(int j=0;j<100;j++){

%>

<%

}

%>

<%

}

%>

<%=i*j%>

运行效果如下:

查看源代码:

使用<%=%>进行输出时,我们可以看到,现在的源代码错落有致,很方便查看,而且此时很方便直接打开使用网页编辑工具进行效果的编辑。

1.3、动态的打印表格

.html

printable.html

printable

打印表格
输入打印表格的行数:
输入打印表格的列数:

.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){}

%>

<%

for(int k=0;k<=col;k++){

%>

<%

}

%>

<%

for(int i=0;i

%>

<%

for(int j=0;j

%>

<%

}

%>

<%

}

%>

<%=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"%>

<%

for(int i=0;i<50;i++){

%>

<%

for(int j=0;j<50;j++){

%>

<%

}

%>

<%

}

%>

<%=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();

%>

<%

while(rs.next()){

int empno=rs.getInt(1);

String ename=rs.getString(2);

String job=rs.getString(3);

java.util.Date hiredate=rs.getDate(4);

float sal=rs.getFloat(5);

float comm=rs.getFloat(6);

int deptno=rs.getInt(7);

%>

<%

}

%>

<%

rs.close();

pstmt.close();

conn.close();

%>

雇员信息表
雇员编号雇员姓名雇员工作雇佣日期雇员工资雇员奖金部门编号
<%=empno%><%=ename%><%=job%><%=hiredate%><%=sal%><%=comm%><%=deptno%>

程序运行效果如下:

1.5、include

include表示包含,在JSP中有以下两个形式的包含命令:

a、<%@include%>指令(属于静态包含)

b、指令(属于动态包含)

1.5.1、<%@include%>

content.txt

content.txt

inc

content.

content.inc

content.inc

htm

content.

content.htm

content.htm

includedemo01.jsp

<%@include file="content.txt"%>

<%@include file="content.inc"%>

<%@include file="content.htm"%>

运行效果:

1.5.2、

该包含是属于动态包含,如果包含的是*.jsp文件,则先处理之后再将结果包含进来,而当包含的是非*.jsp文件的时候,就把文件直接静态的包含进来,此时功能和<%@include%>的类似。此种包含方式有两种语法:

语法形式一:

//注意:后面的/不能少

语法形式二:

//注意:后面的/不能少

使用语法形式一完成:

建立一个includedemo03.jsp页面:

includedemo03.jsp

运行效果如下:

使用语法形式二完成:

先建立一个content.jsp页面,该页面可以接受参数:

<%=resquest.getParameter("ref1")%>

<%=resquest.getParameter("ref2")%>

includedemo044.jsp页面:

建立一个includedemo0

includedemo04.jsp

运行效果如下:

当然也可以在当前的页面中传递参数:

建立includedemo05.jsp页面

includedemo05.jsp

<%!

String str="HELLO WORLD!";

%>

运行效果:

注意:传递参数的时候必须使用<%=%>的形式进行输出才行。

以上两种语法方式中要注意的是第一种在处必须加上斜杠,而方式二中则不能在此处加斜杠,需在加上斜杠。以上在后面加上斜杠是表示完结。

1.5.3、<%@include%>与的区别:

<%@include%>属于静态包含,是先包含后处理,而属于动态包含,是先处理后包含。可以从下面的两个例子中看出来

范例1:

建立一个demo01.jsp页面

<%@page contentType="text/html;charset=GBK"%>

demo.jsp

<%!

int i=10;

%>

在demo.jsp页面中的i的值为:<%=i%>

再建立一个includedemo06.jsp页面

<%@page contentType="text/html;charset=GBK"%>

includedemo06.jsp

<%!

int i=1000;

%>

在includedemo06.jsp页面中的i的值为:<%=i%>

<%@include file="demo.jsp"%>

运行效果

范例2:

修改includedemo06.jsp页面的内容如下

<%@page contentType="text/html;charset=GBK"%>

includedemo06.jsp

<%!

int i=1000;

%>

在includedemo06.jsp页面中的i的值为:<%=i%>

运行效果:

通过以上两个范例的对比,我们可以知道,使用动态包含比使用静态包含要方便,而且可以在被包含的页面中进行传递参数。

注意:包含指令属于标签指令形式,此指令在使用的时候必须完结,即加上斜杠。1.6、forward

使用forward可以进行页面的跳转操作。

下面来看看实现一个页面的跳转操作范例:

建立forwarddemo01.jsp页面

<%@page contentType="text/html;charset=GBK"%>

再建立forwarddemo02.jsp页面

<%@page contentType="text/html;charset=GBK"%>

跳转之后的页面

forwarddemo02.jsp

运行效果

运行效果中可以看出,页面发生了跳转,但是地址栏却没有发生改变,这是因为页面跳转操作在此处是在服务器端进行的跳转。只要是在服务器端跳转,那么地址栏就永远不会发生变化。

同样forward指令也有两种语法格式:

格式一:

格式二:

……

下面来看一个使用格式二进行跳转的实现,同时向页面中传递参数,使用

request.getParameter()进行接收:

建立forwarddemo03.jsp页面

<%@page contentType="text/html;charset=GBK"%>

再建立forwarddemo04.jsp页面

<%@page contentType="text/html;charset=GBK"%>

跳转之后的页面

forwarddemo04.jsp

<%=request.getParameter("for1")%>

<%=request.getParameter("for2")%>

运行效果:

开发实例:

案例要求:本实例是编写一个登录页面,当登录成功时进入相应的操作页面,当登录失败的时候有相应提示,并且回答登录页面重新登录!除此之外,还要求使用数据库!

案例分析:根据案例的要求,我们需要建立一个数据登录表(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文件:

用户登录页面
用户ID:
密  码:

再创建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.*"%>

pageContextDemo01.jsp

<%

//此时通过page设置属性

pageContext.setAttribute("name","张三");

pageContext.setAttribute("date",new Date());

%>

<%

//此时通过page获得属性值

String name=(String)pageContext.getAttribute("name");//因为获得的值是一个Object对象,必须进行向下转型

Date date=(Date)pageContext.getAttribute("date");//因为获得的值是一个Object对象,必须进行向下转型

%>

姓名:<%=name%>

当前日期:<%=date%>

运行效果:

以上范例是在同一个一面中进行的属性值的设置和获得操作,是通过page设置的,下面看一下跳转到其他页面之后的效果。

范例:pageContextDemo02.jsp

<%@page contentType="text/html;charset=GBK"%>

<%@page import="java.util.*"%>

pageContextDemo02.jsp

<%

//此时通过page设置属性

pageContext.setAttribute("name","张三");

pageContext.setAttribute("date",new Date());

%>

范例:pageContextDemo03.jsp

<%@page contentType="text/html;charset=GBK"%>

<%@page import="java.util.*"%>

pageContextDemo03.jsp

<%

//此时通过page获得属性值

String name=(String)pageContext.getAttribute("name");//因为获得的值是一个Object对象,必须进行向下转型

Date date=(Date)pageContext.getAttribute("date");//因为获得的值是一个Object对象,必须进行向下转型

%>

姓名:<%=name%>

当前日期:<%=date%>

运行效果:

由运行效果可以看出,当页面发生跳转是,所跳转的页面中并不能通过page属性获得设置值,为了能够在跳转的页面中获得设置的值,下面来看一下request对属性的设置。

(2)、request的属性范围

范例:requestDemo01.jsp

<%@page contentType="text/html;charset=GBK"%>

<%@page import="java.util.*"%>

requestDemo01.jsp

<%

//此时通过request设置属性

request.setAttribute("name","张三");

request.setAttribute("date",new Date());

%>

范例:requestDemo02.jsp

<%@page contentType="text/html;charset=GBK"%>

<%@page import="java.util.*"%>

requestDemo02.jsp

<%

//此时通过request获得属性值

String name=(String)request.getAttribute("name");//因为获得的值是一个Object对

相关主题
文本预览
相关文档 最新文档