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不能訪問服務器端資源,比如數據庫、目錄信息等等。

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文件、p_w_picpath文件拷貝到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>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章