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不能訪問服務器端資源,比如數據庫、目錄信息等等。
JSP學習筆記(二)-----使用Tomcat運行JSP文件
1. 下載並安裝tomcat。下載地址:[url]http://jakarta.apache.org/tomcat[/url]
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! 你可以在你的瀏覽器上看到你的成果了:
[url]http://localhost:8080/appName/youjsp.jsp[/url]
其中,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就可以了
先註冊,用戶名33,密碼33
註冊成功
察看註冊用戶
登陸成功
JSP學習筆記(四)-----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學習筆記(六)-----在多個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;
}
}
JSP學習筆記(八)-----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>