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>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值