- 浏览: 34626 次
- 性别:
- 来自: 北京
JSP基本知识学习 实例 总结
一.JSP概述
1.JSP是Java Server Pages的简写。
2.用JSP开发的Web应用是跨平台的.
3.JSP技术是Servlet技术的扩展。Servlet是平台无关的,100%纯Java的Java服务端组件。
4.下面就是一个简单的JSP页面:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD><TITLE>欢迎访问网上商店</TITLE></HEAD>
<BODY>
<H1>欢迎</H1>
<SMALL>欢迎,
<!-- 首次访问的用户名字为"New User" -->
<% out.println(Utils.getUserNameFromCookie(request)); %>
要设置帐号信息,请点击
<A HREF="Account-Settings.html">这里</A></SMALL>
<P>
页面的其余内容。.
</BODY></HTML>
5.下面是JSP 和其他类似或相关技术的一个简单比较:
1).JSP和Active Server Pages(ASP)相比
Microsoft的ASP是一种和JSP类似的技术。JSP和ASP相比具有两方面的优点。首先,动态部分用Java编写,而不是VB Script或其他Microsoft语言,不仅功能更强大而且更易于使用。第二,JSP应用可以移植到其他操作系统和非Microsoft的Web服务器上。
2).JSP和纯Servlet相比
JSP并没有增加任何本质上不能用Servlet实现的功能。但是,在JSP中编写静态HTML更加方便,不必再用 println语句来输出每一行HTML代码。更重要的是,借助内容和外观的分离,页面制作中不同性质的任务可以方便地分开:比如,由页面设计专家进行HTML设计,同时留出供Servlet程序员插入动态内容的空间。
3).JSP和服务器端包含(Server-Side Include,SSI)相比
SSI是一种受到广泛支持的在静态HTML中引入外部代码的技术。JSP在这方面的支持更为完善,因为它可以用Servlet而不是独立的程序来生成动态内容。另外,SSI实际上只用于简单的包含,而不是面向那些能够处理表单数据、访问数据库的“真正的”程序。
4).JSP和JavaScript相比
JavaScript能够在客户端动态地生成HTML。虽然JavaScript很有用,但它只能处理以客户端环境为基础的动态信息。除了Cookie之外,HTTP状态和表单提交数据对JavaScript来说都是不可用的。另外,由于是在客户端运行,JavaScript不能访问服务器端资源,比如数据库、目录信息等等。
二.使用Tomcat运行JSP文件
有些网友不知道怎么才能运行自己的JSP文件,我在这里简单介绍一下,给大家提供一点参考:
1. 下载并安装tomcat。下载地址:http://jakarta.apache.org/tomcat
2. 编写自己的JSP网页和Java对象。
3. 配置自己的Web应用。配置方法:
在TOMCAT_HOME/conf/server.xml文件中加入一行:
<Content path="/appName" docBase="webapps/appName" debug="0" reloadable="true"/>
其中,TOMCAT_HOME是tomcat的主目录,appName是你的Web应用的名称。
4. 将你的jsp文件、html文件、image文件拷贝到TOMCAT_HOME/webapps/appName目录下。
5. 编译你的java文件。
6. 将编译好的class文件拷贝到TOMCAT_HOME/webapps/WEB-INF/classes目录下。也可将class文件打包成jar文件放到TOMCAT_HOME/webapps/WEB-INF/lib目录下。
7. ALL IS OK! 你可以在你的浏览器上看到你的成果了:
http://localhost:8080/appName/youjsp.jsp
其中,appName是你配的Web应用名称,youjsp.jsp是你编写的jsp文件名。
三.使用JSP处理用户注册和登陆
1. 这是一个JSP实例,由四个JSP页面组成,处理用户的注册和登陆信息
2. 首先是login.jsp,代码如下:
<html>
<center>
<form method=get action="http://127.0.0.1:8000/jsp/test.jsp">
username<input type=text name=username>
<br><br>
password<input type=password name=pass>
<br><br>
<input type=submit value="注册">
</form>
<form method=get action="http://127.0.0.1:8000/jsp/test3.jsp">
username<input type=text name=username>
<br><br>
password<input type=password name=pass>
<br><br>
<input type=submit value="登陆">
</form>
<br>
</center>
</html>
3. test.jsp代码如下:(主要处理用户注册,将注册信息插入数据库)
<html>
<%@ page language="java" import="java.sql.*"%>
your username is:<%=request.getParameter("username")%>
<br><br>
your password is:<%=request.getParameter("pass")%>
<br><br>
<%
String name=request.getParameter("username");
String pass=request.getParameter("pass");
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection dbcon=DriverManager.getConnection("jdbc:odbc:test","sa","");
PreparedStatement stat=dbcon.prepareStatement(
"insert login values(?,?)");
stat.setString(1,name);
stat.setString(2,pass);
stat.executeUpdate();
out.println("<br><br><B>insert successful</B>");
}
catch(Exception e)
{
out.println(e);
}
%>
<b>Click here to view all people</b>
<form method=get action="http://127.0.0.1:8000/jsp/test2.jsp">
<input type=submit value="--->">
</form>
</html>
4. test2.jsp,代码如下:(处理当用户注册成功之后可以查看所有的注册用户名单)
<html>
<%@ page language="java" import="java.sql.*"%>
<% try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection dbcon=DriverManager.getConnection("jdbc:odbc:test","sa","");
PreparedStatement stat=dbcon.prepareStatement(
"select * from login");
ResultSet result=stat.executeQuery();
%>
<table border=2>
<%
while(result.next())
{
%>
<tr><td><%=result.getString(1)%><td></tr>
<%
}
%>
</table>
<%
}
catch(Exception e)
{
out.println(e);
}
%>
</html>
5. test3.jsp代码如下:(处理用户登录信息)
<html>
your username is:<%=request.getParameter("username")%>
<br><br>
your password is:<%=request.getParameter("pass")%>
<br><br>
<%@ page language="java" import="java.sql.*"%>
<%
String name=request.getParameter("username");
String pass=request.getParameter("pass");
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection dbcon=DriverManager.getConnection("jdbc:odbc:test","sa","");
PreparedStatement stat=dbcon.prepareStatement(
"select * from login where username=? and password=?");
stat.setString(1,name);
stat.setString(2,pass);
ResultSet result=stat.executeQuery();
if(result.next())
{
out.println("Login Successful");
}
else
{
out.println("Login Error");
}
}
catch(Exception e)
{
out.println(e);
}
%>
6.此外还需要一个名为login的数据库,只需要两个列username,password就可以了
四.JSP动作的使用
1. 该实例主要告诉我们怎么样在JSP代码中使用JSP动作,例如<jsp:forward >
2. 该实例需要四个文件:login.jsp,test.jsp,ok.htm,no.htm
3. 首先看一下login.jsp
<html>
<center>
<form method=get action="http://127.0.0.1:8000/test.jsp">
username<input type=text name=username>
<br><br>
password<input type=password name=password>
<br><br>
<input type=submit value="确定">
</form>
</center>
</html>
4. test.jsp代码如下:
<html>
<%
String username=request.getParameter("username");
if(username.trim().equals("abc"))
{%>
<jsp:forward page="ok.html" />
<%}
else
{%>
<jsp:forward page="no.html" />
<%}
%>
</html>
5. ok.htm和no.htm非常简单,随便写写:
<html>ok</html>
<html>no</html>
6. 最后进行配置,非常简单:
把login.jsp,test.jsp,ok.htm,no.htm放在j2ee的public_html中就可以了,不需要启动J2EE部署器了,这是一个简单方法
7. 运行效果是当你输入用户名为abc时,页面会自动跳转到ok.htm页面,否则跳到no.htm页面
五.JSP中使用JavaBean
1. 该实例主要告诉我们怎么样在JSP代码中调用JavaBean构件
2. 使用JavaBean的优点是简化了JSP代码,界面代码和逻辑代码互相分离,便于程序员查看和调试
3. 该实例需要五个文件:login.jsp,test.jsp, userbean.class
4. 首先看一下login.jsp
<html>
<center>
<form method=post action="http://127.0.0.1:8000/test.jsp">
username<input type=text name=username>
<br><br>
password<input type=password name=password>
<br><br>
<input type=submit value="注册">
</form>
</center>
</html>
5. test.jsp代码如下:
<html>
<jsp:useBean id="hello" class="userbean" scope="session" />
<jsp:setProperty name="hello" property="*" />
your username is:<jsp:getProperty name="hello" property="username"/>
<br><br>
your password is:<jsp:getProperty name="hello" property="password"/>
<br><br>
<%
out.println(hello.insert());
%>
</html>
6. JavaBean构件userbean.java代码如下:
import java.sql.*;
public class userbean
{
private String username;
private String password;
public void setUsername(String username)
{
this.username=username;
}
public void setPassword(String password)
{
this.password=password;
}
public String getUsername()
{
return username;
}
public String getPassword()
{
return password;
}
public String insert()
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection dbcon=DriverManager.getConnection("jdbc:odbc:test","sa","");
PreparedStatement stat=dbcon.prepareStatement(
"insert login values(?,?)");
stat.setString(1,username);
stat.setString(2,password);
stat.executeUpdate();
return "success";
}
catch(Exception e)
{
System.out.println(e);
return e.toString();
}
}
}
7. 配置方法如下:
login,test放在j2ee的public_html中,userbean.class放在j2ee/lib/classes中
六.在多个JSP页面之间传递参数
1. 怎么在多个JSP页面之间进行参数传递?需要使用JSP的内置作用域对象session。利用它的两个方法setAttribute(),getAttribute()
2. 下面的这个实例实现了把第一个JSP页面的参数传递给第三个页面的功能
3. 代码如下:1.jsp
<html>
<form method=get action=2.jsp>
what's your name<input type=text name=username>
<input type=submit value=submit>
</form>
</html>
4. 2.jsp
<html>
<form method=post action="3.jsp?pass=11">
<%
String name=request.getParameter("username");
session.setAttribute("username",name);
%>
Your name is:<%=request.getParameter("username")%>
<br>what's your hobby<input type=text name=hobby>
<input type=submit value=submit>
</form>
</html>
5. 3.jsp
<html>
your name is:<%=session.getAttribute("username")%>
<br>
your hobby is:<%=request.getParameter("hobby")%>
<br>
your password is:<%=request.getParameter("pass")%>
<br>
</form>
</html>
七 猜数字游戏
1. 这是一个猜数字的游戏,通过使用JSP调用JavaBean
2. 需要两个文件,number.jsp和NumberGuessBean.java
3. 先看number.jsp代码:
<html>
<jsp:useBean id="number" class="NumberGuessBean" scope="session" />
<jsp:setProperty name="number" property="*" />
<%
if(number.getNumGuesses()==0)
{
%>
<B>Welcome to the Number Guess game.</B>
<br>
<B>I'm thinking of a number between 1 and 100.</B>
<br>
<b>What's your guess?</b>
<form method=post>
<input type=text name="guess">
<input type=submit value=submit>
</form>
<%
}
else if(number.getSuccess())
{
%>
Congratulations! You got it. And after just <%=number.getNumGuesses()%> tries.
Care to <a href=number.jsp>try again</a>?
<%
number.reset();
}
else
{
%>
Good guess, but nope. Try <%=number.getHint()%>. You have made <%=number.getNumGuesses()%> guesses.
<br>I'm thinking of a number between 1 and 100.
<br>
What's your guess?
<form method=post><input type=text name="guess">
<input type=submit value=submit>
</form>
<%
}
%>
</html>
4. NumberGuessBean.java代码如下:
import java.util.*;
public class NumberGuessBean {
int answer;
boolean success;
String hint;
int numGuesses;
public NumberGuessBean() {
reset();
}
public void setGuess(String guess) {
numGuesses++;
int g;
try {
g = Integer.parseInt(guess);
}
catch (NumberFormatException e) {
g = -1;
}
if (g == answer) {
success = true;
}
else if (g == -1) {
hint = "a number next time";
}
else if (g < answer) {
hint = "higher";
}
else if (g > answer) {
hint = "lower";
}
}
public boolean getSuccess() {
return success;
}
public String getHint() {
return "" + hint;
}
public int getNumGuesses() {
return numGuesses;
}
public void reset() {
answer = Math.abs(new Random().nextInt() % 100) + 1;
success = false;
numGuesses = 0;
}
}
八 include的运用
1. 向JSP页面中插入指定的页面方法有两种:
JSP命令<%@ include%>
JSP动作<jsp:include />
2. a.jsp代码如下:
<html>huanghui
<%@ include file="b.jsp"%>
<jsp:include page="b.jsp" flush="true"/>
</html>
3. b.jsp代码如下:
<html>hello</html>
九 JSP标签库
1.JSP标签库(也称自定义库)可看成是一套产生基于XML脚本的方法,它经由JavaBeans来支持。在概念上说,标签库是非常简单和可以重用的代码构造。它可以大大简化你在页面中输入各种录入框的代码(诸如此类的代码:<input type="text" name="taxpayerName" value = " ,<select name="collectionItemCode" class="required" style="width:200" ...),并使之结构化。
2.标签库(Tag libraries)提供了建立可重用代码块的简单方式。但是和COM和J2EE不同的是,你不需要掌握任何额外的技能就可以建立标签库:如果你会编写JSP页面,你就会建立标签库。最后,标签库还改进了Web应用程序的维护性。这种对维护性的改进表现在:轻易地在JSP页面上就实现了基于XML的可定制接口。
3.一个简单的标签由下面的元素构成:
⑴ JavaBeans:为了得到Java与生具来的面向对象的好处,可重用的代码应该放到一个独立的代码容器中。这些JavaBeans并不是标签库的一部分。不过它是你的代码库用来执行相关任务的基本代码块。
⑵ 标签处理:这是标签库的真正核心。一个标签处理器将引用它需要的任何资源(你的JavaBeans)和访问你的JSP页面的全部信息(pageContext对象)。JSP页面也会将所有已经被设置的标签属性和JSP页面上的标签体中的内容传送给标签处理器。在标签处理器处理完毕后,它将发回输出到你的JSP页面进行处理。
⑶ 标签库的描述(tld文件):这是一个简单的XML文件,它记录着标签处理器的属性、信息和位置。JSP容器通过这个文件来得知从哪里及如何调用一个标签库。
⑷ 网站的web.xml文件:这是你网站的初始化文件,在这个文件中,你定义了网站中用到的自定义标签,以及哪个tld文件用来描述每个自定义的标签。
⑸ 分发文件(一个WAR或者JAR文件):如果你想重用自定义标签的话,你需要一个方法来将它由一个项目转移到另一个项目中。将标签库打包为一个JAR文件是一个简单而且有效的方式。
⑹ 在你的JSP文件中作标签库声明:很简单,如果要用到该标签的话,只要在页面声明一下就可以,其后,你就可以在该JSP页面的任何地方使用它。
下面是一个实例
1. 先编写标签处理程序,ATMTag.java
//用标签处理程序来定义客户标签的工作
import javax.servlet.jsp.*;
//导入标签类的驱动
import javax.servlet.jsp.tagext.*;
import java.io.*;
import java.sql.*;
import java.math.*;
import java.util.*;
//实现TagSupport或BodyTagSupport接口
public class ATMTag extends TagSupport
{
Connection connect = null;
Statement state = null;
ResultSet result = null;
public ATMTag() throws ClassNotFoundException
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
//抽象类Tag的方法,标签处理程序的初始化
public int doStartTag() throws JspTagException
{
//指导JSP引擎处理标签的体内容
return EVAL_BODY_INCLUDE;
}
//执行标签任务
public int doEndTag() throws JspTagException
{
try
{
//把输出写到JSP页面
JspWriter out=pageContext.getOut();
connect=DriverManager.getConnection("jdbc:odbc:test","sa","");
String strQuery = " Select cCounter_id, cAddress,mCashBalance from Counter where mCashBalance<=10000; " ;
System.out.println("Query: "+strQuery);
state = connect.createStatement();
ResultSet result = state.executeQuery(strQuery);
String sId=null;
String sAddress=null;
String sBalance=null;
Vector v=new Vector();
while(result.next())
{
sId = result.getString(1);
sAddress = result.getString(2);
sBalance = result.getString(3);
v.add(sId);
v.add(sAddress);
v.add(sBalance);
v.add(";");
}
for(int i=0;i<v.size();i++)
{
String str=(String)v.elementAt(i);
pageContext.getOut().write(str);
}
}catch(Exception ioe)
{
System.out.println(" Error in getting results"+ioe.toString());
}
//指出对JSP页面其余部分求值
return EVAL_PAGE;
}
}
2. 编写TLD文件的代码:
//XML验证文档
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
//标签库版本
<tlibversion>1.0</tlibversion>
//标签库依赖的JSP版本
<jspversion>1.1</jspversion>
//标签库名
<shortname>ATMjsp</shortname>
//关于标签库的详细信息
<info>A Tag library</info>
<tag>
//定义标签的名
<name>ATM</name>
//指出标签处理程序类
<tagclass>ATMTag</tagclass>
//此标签体的定义
<body-content>JSP</body-content>
//关于此标签与其功能的附加信息
<info>Outputs of the ATM counter</info>
</tag>
</taglib>
3. 错误页面errorpage.jsp的代码:
<html>
<body>
<%@ page isErrorPage="true" %>
<%=exception.getMessage() %>
</body>
</html>
4. 编写JSP文件:ATM.jsp
<%@ page import="ATMTag" %>
<%@ taglib uri="ATMjsp.tld" prefix="ATMjsp" %>
<%@ page errorPage="errorpage.jsp" %>
<!DocType HTML Public "-//W3C//DTD HTML 4.0 Translational//EN ">
<html>
<h3 align=center>ATM counters that needs Cash</h3>
<table>
<tr><td></td><td><ATMjsp:ATM/></td></tr>
</table>
</html>
1.JSP是Java Server Pages的简写。
2.用JSP开发的Web应用是跨平台的.
3.JSP技术是Servlet技术的扩展。Servlet是平台无关的,100%纯Java的Java服务端组件。
4.下面就是一个简单的JSP页面:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD><TITLE>欢迎访问网上商店</TITLE></HEAD>
<BODY>
<H1>欢迎</H1>
<SMALL>欢迎,
<!-- 首次访问的用户名字为"New User" -->
<% out.println(Utils.getUserNameFromCookie(request)); %>
要设置帐号信息,请点击
<A HREF="Account-Settings.html">这里</A></SMALL>
<P>
页面的其余内容。.
</BODY></HTML>
5.下面是JSP 和其他类似或相关技术的一个简单比较:
1).JSP和Active Server Pages(ASP)相比
Microsoft的ASP是一种和JSP类似的技术。JSP和ASP相比具有两方面的优点。首先,动态部分用Java编写,而不是VB Script或其他Microsoft语言,不仅功能更强大而且更易于使用。第二,JSP应用可以移植到其他操作系统和非Microsoft的Web服务器上。
2).JSP和纯Servlet相比
JSP并没有增加任何本质上不能用Servlet实现的功能。但是,在JSP中编写静态HTML更加方便,不必再用 println语句来输出每一行HTML代码。更重要的是,借助内容和外观的分离,页面制作中不同性质的任务可以方便地分开:比如,由页面设计专家进行HTML设计,同时留出供Servlet程序员插入动态内容的空间。
3).JSP和服务器端包含(Server-Side Include,SSI)相比
SSI是一种受到广泛支持的在静态HTML中引入外部代码的技术。JSP在这方面的支持更为完善,因为它可以用Servlet而不是独立的程序来生成动态内容。另外,SSI实际上只用于简单的包含,而不是面向那些能够处理表单数据、访问数据库的“真正的”程序。
4).JSP和JavaScript相比
JavaScript能够在客户端动态地生成HTML。虽然JavaScript很有用,但它只能处理以客户端环境为基础的动态信息。除了Cookie之外,HTTP状态和表单提交数据对JavaScript来说都是不可用的。另外,由于是在客户端运行,JavaScript不能访问服务器端资源,比如数据库、目录信息等等。
二.使用Tomcat运行JSP文件
有些网友不知道怎么才能运行自己的JSP文件,我在这里简单介绍一下,给大家提供一点参考:
1. 下载并安装tomcat。下载地址:http://jakarta.apache.org/tomcat
2. 编写自己的JSP网页和Java对象。
3. 配置自己的Web应用。配置方法:
在TOMCAT_HOME/conf/server.xml文件中加入一行:
<Content path="/appName" docBase="webapps/appName" debug="0" reloadable="true"/>
其中,TOMCAT_HOME是tomcat的主目录,appName是你的Web应用的名称。
4. 将你的jsp文件、html文件、image文件拷贝到TOMCAT_HOME/webapps/appName目录下。
5. 编译你的java文件。
6. 将编译好的class文件拷贝到TOMCAT_HOME/webapps/WEB-INF/classes目录下。也可将class文件打包成jar文件放到TOMCAT_HOME/webapps/WEB-INF/lib目录下。
7. ALL IS OK! 你可以在你的浏览器上看到你的成果了:
http://localhost:8080/appName/youjsp.jsp
其中,appName是你配的Web应用名称,youjsp.jsp是你编写的jsp文件名。
三.使用JSP处理用户注册和登陆
1. 这是一个JSP实例,由四个JSP页面组成,处理用户的注册和登陆信息
2. 首先是login.jsp,代码如下:
<html>
<center>
<form method=get action="http://127.0.0.1:8000/jsp/test.jsp">
username<input type=text name=username>
<br><br>
password<input type=password name=pass>
<br><br>
<input type=submit value="注册">
</form>
<form method=get action="http://127.0.0.1:8000/jsp/test3.jsp">
username<input type=text name=username>
<br><br>
password<input type=password name=pass>
<br><br>
<input type=submit value="登陆">
</form>
<br>
</center>
</html>
3. test.jsp代码如下:(主要处理用户注册,将注册信息插入数据库)
<html>
<%@ page language="java" import="java.sql.*"%>
your username is:<%=request.getParameter("username")%>
<br><br>
your password is:<%=request.getParameter("pass")%>
<br><br>
<%
String name=request.getParameter("username");
String pass=request.getParameter("pass");
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection dbcon=DriverManager.getConnection("jdbc:odbc:test","sa","");
PreparedStatement stat=dbcon.prepareStatement(
"insert login values(?,?)");
stat.setString(1,name);
stat.setString(2,pass);
stat.executeUpdate();
out.println("<br><br><B>insert successful</B>");
}
catch(Exception e)
{
out.println(e);
}
%>
<b>Click here to view all people</b>
<form method=get action="http://127.0.0.1:8000/jsp/test2.jsp">
<input type=submit value="--->">
</form>
</html>
4. test2.jsp,代码如下:(处理当用户注册成功之后可以查看所有的注册用户名单)
<html>
<%@ page language="java" import="java.sql.*"%>
<% try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection dbcon=DriverManager.getConnection("jdbc:odbc:test","sa","");
PreparedStatement stat=dbcon.prepareStatement(
"select * from login");
ResultSet result=stat.executeQuery();
%>
<table border=2>
<%
while(result.next())
{
%>
<tr><td><%=result.getString(1)%><td></tr>
<%
}
%>
</table>
<%
}
catch(Exception e)
{
out.println(e);
}
%>
</html>
5. test3.jsp代码如下:(处理用户登录信息)
<html>
your username is:<%=request.getParameter("username")%>
<br><br>
your password is:<%=request.getParameter("pass")%>
<br><br>
<%@ page language="java" import="java.sql.*"%>
<%
String name=request.getParameter("username");
String pass=request.getParameter("pass");
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection dbcon=DriverManager.getConnection("jdbc:odbc:test","sa","");
PreparedStatement stat=dbcon.prepareStatement(
"select * from login where username=? and password=?");
stat.setString(1,name);
stat.setString(2,pass);
ResultSet result=stat.executeQuery();
if(result.next())
{
out.println("Login Successful");
}
else
{
out.println("Login Error");
}
}
catch(Exception e)
{
out.println(e);
}
%>
6.此外还需要一个名为login的数据库,只需要两个列username,password就可以了
四.JSP动作的使用
1. 该实例主要告诉我们怎么样在JSP代码中使用JSP动作,例如<jsp:forward >
2. 该实例需要四个文件:login.jsp,test.jsp,ok.htm,no.htm
3. 首先看一下login.jsp
<html>
<center>
<form method=get action="http://127.0.0.1:8000/test.jsp">
username<input type=text name=username>
<br><br>
password<input type=password name=password>
<br><br>
<input type=submit value="确定">
</form>
</center>
</html>
4. test.jsp代码如下:
<html>
<%
String username=request.getParameter("username");
if(username.trim().equals("abc"))
{%>
<jsp:forward page="ok.html" />
<%}
else
{%>
<jsp:forward page="no.html" />
<%}
%>
</html>
5. ok.htm和no.htm非常简单,随便写写:
<html>ok</html>
<html>no</html>
6. 最后进行配置,非常简单:
把login.jsp,test.jsp,ok.htm,no.htm放在j2ee的public_html中就可以了,不需要启动J2EE部署器了,这是一个简单方法
7. 运行效果是当你输入用户名为abc时,页面会自动跳转到ok.htm页面,否则跳到no.htm页面
五.JSP中使用JavaBean
1. 该实例主要告诉我们怎么样在JSP代码中调用JavaBean构件
2. 使用JavaBean的优点是简化了JSP代码,界面代码和逻辑代码互相分离,便于程序员查看和调试
3. 该实例需要五个文件:login.jsp,test.jsp, userbean.class
4. 首先看一下login.jsp
<html>
<center>
<form method=post action="http://127.0.0.1:8000/test.jsp">
username<input type=text name=username>
<br><br>
password<input type=password name=password>
<br><br>
<input type=submit value="注册">
</form>
</center>
</html>
5. test.jsp代码如下:
<html>
<jsp:useBean id="hello" class="userbean" scope="session" />
<jsp:setProperty name="hello" property="*" />
your username is:<jsp:getProperty name="hello" property="username"/>
<br><br>
your password is:<jsp:getProperty name="hello" property="password"/>
<br><br>
<%
out.println(hello.insert());
%>
</html>
6. JavaBean构件userbean.java代码如下:
import java.sql.*;
public class userbean
{
private String username;
private String password;
public void setUsername(String username)
{
this.username=username;
}
public void setPassword(String password)
{
this.password=password;
}
public String getUsername()
{
return username;
}
public String getPassword()
{
return password;
}
public String insert()
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection dbcon=DriverManager.getConnection("jdbc:odbc:test","sa","");
PreparedStatement stat=dbcon.prepareStatement(
"insert login values(?,?)");
stat.setString(1,username);
stat.setString(2,password);
stat.executeUpdate();
return "success";
}
catch(Exception e)
{
System.out.println(e);
return e.toString();
}
}
}
7. 配置方法如下:
login,test放在j2ee的public_html中,userbean.class放在j2ee/lib/classes中
六.在多个JSP页面之间传递参数
1. 怎么在多个JSP页面之间进行参数传递?需要使用JSP的内置作用域对象session。利用它的两个方法setAttribute(),getAttribute()
2. 下面的这个实例实现了把第一个JSP页面的参数传递给第三个页面的功能
3. 代码如下:1.jsp
<html>
<form method=get action=2.jsp>
what's your name<input type=text name=username>
<input type=submit value=submit>
</form>
</html>
4. 2.jsp
<html>
<form method=post action="3.jsp?pass=11">
<%
String name=request.getParameter("username");
session.setAttribute("username",name);
%>
Your name is:<%=request.getParameter("username")%>
<br>what's your hobby<input type=text name=hobby>
<input type=submit value=submit>
</form>
</html>
5. 3.jsp
<html>
your name is:<%=session.getAttribute("username")%>
<br>
your hobby is:<%=request.getParameter("hobby")%>
<br>
your password is:<%=request.getParameter("pass")%>
<br>
</form>
</html>
七 猜数字游戏
1. 这是一个猜数字的游戏,通过使用JSP调用JavaBean
2. 需要两个文件,number.jsp和NumberGuessBean.java
3. 先看number.jsp代码:
<html>
<jsp:useBean id="number" class="NumberGuessBean" scope="session" />
<jsp:setProperty name="number" property="*" />
<%
if(number.getNumGuesses()==0)
{
%>
<B>Welcome to the Number Guess game.</B>
<br>
<B>I'm thinking of a number between 1 and 100.</B>
<br>
<b>What's your guess?</b>
<form method=post>
<input type=text name="guess">
<input type=submit value=submit>
</form>
<%
}
else if(number.getSuccess())
{
%>
Congratulations! You got it. And after just <%=number.getNumGuesses()%> tries.
Care to <a href=number.jsp>try again</a>?
<%
number.reset();
}
else
{
%>
Good guess, but nope. Try <%=number.getHint()%>. You have made <%=number.getNumGuesses()%> guesses.
<br>I'm thinking of a number between 1 and 100.
<br>
What's your guess?
<form method=post><input type=text name="guess">
<input type=submit value=submit>
</form>
<%
}
%>
</html>
4. NumberGuessBean.java代码如下:
import java.util.*;
public class NumberGuessBean {
int answer;
boolean success;
String hint;
int numGuesses;
public NumberGuessBean() {
reset();
}
public void setGuess(String guess) {
numGuesses++;
int g;
try {
g = Integer.parseInt(guess);
}
catch (NumberFormatException e) {
g = -1;
}
if (g == answer) {
success = true;
}
else if (g == -1) {
hint = "a number next time";
}
else if (g < answer) {
hint = "higher";
}
else if (g > answer) {
hint = "lower";
}
}
public boolean getSuccess() {
return success;
}
public String getHint() {
return "" + hint;
}
public int getNumGuesses() {
return numGuesses;
}
public void reset() {
answer = Math.abs(new Random().nextInt() % 100) + 1;
success = false;
numGuesses = 0;
}
}
八 include的运用
1. 向JSP页面中插入指定的页面方法有两种:
JSP命令<%@ include%>
JSP动作<jsp:include />
2. a.jsp代码如下:
<html>huanghui
<%@ include file="b.jsp"%>
<jsp:include page="b.jsp" flush="true"/>
</html>
3. b.jsp代码如下:
<html>hello</html>
九 JSP标签库
1.JSP标签库(也称自定义库)可看成是一套产生基于XML脚本的方法,它经由JavaBeans来支持。在概念上说,标签库是非常简单和可以重用的代码构造。它可以大大简化你在页面中输入各种录入框的代码(诸如此类的代码:<input type="text" name="taxpayerName" value = " ,<select name="collectionItemCode" class="required" style="width:200" ...),并使之结构化。
2.标签库(Tag libraries)提供了建立可重用代码块的简单方式。但是和COM和J2EE不同的是,你不需要掌握任何额外的技能就可以建立标签库:如果你会编写JSP页面,你就会建立标签库。最后,标签库还改进了Web应用程序的维护性。这种对维护性的改进表现在:轻易地在JSP页面上就实现了基于XML的可定制接口。
3.一个简单的标签由下面的元素构成:
⑴ JavaBeans:为了得到Java与生具来的面向对象的好处,可重用的代码应该放到一个独立的代码容器中。这些JavaBeans并不是标签库的一部分。不过它是你的代码库用来执行相关任务的基本代码块。
⑵ 标签处理:这是标签库的真正核心。一个标签处理器将引用它需要的任何资源(你的JavaBeans)和访问你的JSP页面的全部信息(pageContext对象)。JSP页面也会将所有已经被设置的标签属性和JSP页面上的标签体中的内容传送给标签处理器。在标签处理器处理完毕后,它将发回输出到你的JSP页面进行处理。
⑶ 标签库的描述(tld文件):这是一个简单的XML文件,它记录着标签处理器的属性、信息和位置。JSP容器通过这个文件来得知从哪里及如何调用一个标签库。
⑷ 网站的web.xml文件:这是你网站的初始化文件,在这个文件中,你定义了网站中用到的自定义标签,以及哪个tld文件用来描述每个自定义的标签。
⑸ 分发文件(一个WAR或者JAR文件):如果你想重用自定义标签的话,你需要一个方法来将它由一个项目转移到另一个项目中。将标签库打包为一个JAR文件是一个简单而且有效的方式。
⑹ 在你的JSP文件中作标签库声明:很简单,如果要用到该标签的话,只要在页面声明一下就可以,其后,你就可以在该JSP页面的任何地方使用它。
下面是一个实例
1. 先编写标签处理程序,ATMTag.java
//用标签处理程序来定义客户标签的工作
import javax.servlet.jsp.*;
//导入标签类的驱动
import javax.servlet.jsp.tagext.*;
import java.io.*;
import java.sql.*;
import java.math.*;
import java.util.*;
//实现TagSupport或BodyTagSupport接口
public class ATMTag extends TagSupport
{
Connection connect = null;
Statement state = null;
ResultSet result = null;
public ATMTag() throws ClassNotFoundException
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
//抽象类Tag的方法,标签处理程序的初始化
public int doStartTag() throws JspTagException
{
//指导JSP引擎处理标签的体内容
return EVAL_BODY_INCLUDE;
}
//执行标签任务
public int doEndTag() throws JspTagException
{
try
{
//把输出写到JSP页面
JspWriter out=pageContext.getOut();
connect=DriverManager.getConnection("jdbc:odbc:test","sa","");
String strQuery = " Select cCounter_id, cAddress,mCashBalance from Counter where mCashBalance<=10000; " ;
System.out.println("Query: "+strQuery);
state = connect.createStatement();
ResultSet result = state.executeQuery(strQuery);
String sId=null;
String sAddress=null;
String sBalance=null;
Vector v=new Vector();
while(result.next())
{
sId = result.getString(1);
sAddress = result.getString(2);
sBalance = result.getString(3);
v.add(sId);
v.add(sAddress);
v.add(sBalance);
v.add(";");
}
for(int i=0;i<v.size();i++)
{
String str=(String)v.elementAt(i);
pageContext.getOut().write(str);
}
}catch(Exception ioe)
{
System.out.println(" Error in getting results"+ioe.toString());
}
//指出对JSP页面其余部分求值
return EVAL_PAGE;
}
}
2. 编写TLD文件的代码:
//XML验证文档
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN"
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
//标签库版本
<tlibversion>1.0</tlibversion>
//标签库依赖的JSP版本
<jspversion>1.1</jspversion>
//标签库名
<shortname>ATMjsp</shortname>
//关于标签库的详细信息
<info>A Tag library</info>
<tag>
//定义标签的名
<name>ATM</name>
//指出标签处理程序类
<tagclass>ATMTag</tagclass>
//此标签体的定义
<body-content>JSP</body-content>
//关于此标签与其功能的附加信息
<info>Outputs of the ATM counter</info>
</tag>
</taglib>
3. 错误页面errorpage.jsp的代码:
<html>
<body>
<%@ page isErrorPage="true" %>
<%=exception.getMessage() %>
</body>
</html>
4. 编写JSP文件:ATM.jsp
<%@ page import="ATMTag" %>
<%@ taglib uri="ATMjsp.tld" prefix="ATMjsp" %>
<%@ page errorPage="errorpage.jsp" %>
<!DocType HTML Public "-//W3C//DTD HTML 4.0 Translational//EN ">
<html>
<h3 align=center>ATM counters that needs Cash</h3>
<table>
<tr><td></td><td><ATMjsp:ATM/></td></tr>
</table>
</html>
相关推荐
JSP实例代码 JSP实例代码 JSP实例代码 JSP实例代码 JSP实例代码 JSP实例代码JSP实例代码 JSP实例代码 JSP实例代码 JSP实例代码
jsp某些常用学习实例代码jsp实例代码
jsp应用实例JSP应用实例JSP应用实例JSP应用实例JSP应用实例
JSP实例入门 JSP实例入门 JSP实例入门 JSP实例入门 JSP实例入门
JSP学习的很好的入门总结 语法总结 用法总结
html,css,jsp相关知识总结,便于进行html,css,jsp的学习
jsp 知识总结1 静态页面 JSP内容 jsp指令 数据库连接 JavaBean Servlet Smartupload
JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门JSP实例入门...
JSP的一些精彩特效实例,比如时钟,按键,鼠标,菜单等
javaJSP知识详细教程总结;javaJSP知识详细教程总结;
<<JSP网络编程技术与实例>>源代码
有利于初步学习动态网站jsp设计的技巧和实践
Java基于jsp的驾驶知识学习和评测系统的实现.zipJava基于jsp的驾驶知识学习和评测系统的实现.zipJava基于jsp的驾驶知识学习和评测系统的实现.zipJava基于jsp的驾驶知识学习和评测系统的实现.zipJava基于jsp的驾驶...
JSP论坛源代码 jsp项目实例JSP论坛源代码 jsp项目实例
一些jsp实例的代码,帮助快速学习jsp
01文件夹:建立JSP环境,包括1个实例。 02文件夹:指令(Directive)元素,包括16个实例。 03文件夹:动作(Action)元素,包括26个实例。 04文件夹:脚本(Scripting)元素,包括3个实例。 05文件夹:隐式对象...
jsp和servlet知识点总结
jsp简单实例,学习jsp的最基本的开始
jsp&servlet知识点总结
精通JSP网站架构与实例 详细介绍了JSP Servlet JavaBean架构学习