`

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>
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics