1.驗證用戶登錄
<sql:query var="query" dataSource="${bookdev}">
select * from user where userName='${param.userName}' and userPwd='${param.userPwd}'
</sql:query>
<c:if test="${empty query.rows}">
<!--驗證沒有通過,返回登錄界面-->
<font color="red">用戶名或密碼錯誤</font>
<a href="index.jsp">重新登錄</a>
</c:if>
<c:if test="${!empty query.rows}">
<!--驗證通過,保存用戶信息到session中-->
<c:forEach var="row" items="${query.rows}">
<c:set var="userName" value="${row.userName}" scope="session" />
<c:set var="userLevel" value="${row.userLevel}" scope="session" />
</c:forEach>
<c:set var="isLog" value="1" scope="session" />
<!--頁面發送到主頁面-->
<c:redirect url="main.jsp" />
</c:if>
2.session控制
<c:if test="${empty sessionScope.isLog}">
你沒有登錄或登錄超時
<a href="index.jsp">重新登錄</a>
</c:if>
數據庫驅動程序和URL
數據庫名 |
驅動程序 |
URL |
MS SQL Server2000 |
com.microsoft.jdbc.sqlserver.SQLServerDriver |
jdbc:microsoft:sqlserver://[ip]:[port];user=[user];passwoerd=[password] |
JDBC-ODBC |
sun.jdbc.odbc.JdbcOdbcDriver |
jdbc:odbc:[odbcsource] |
Oracle oci8 |
oracle.jdbc.driver.OracleDriver |
jdbc:oracle:oci8:@[sid] |
Oracle thin Driver |
oracle.jdbc.driver.OracleDriver |
jdbc:oracle:thin:@[ip]:[port]:[sid] |
Cloudscape |
COM.cloudscape.core.JDBCDriver |
Jdbc:cloudscape:database |
MySQL |
org.git.mm.mysql.Driver |
jdbc:mysql://ip/database?user=?&password=? |
相關鏈接:java連接數據庫方法http://blog.java-cn.com/more.asp?name=johnnyhg&id=341
文件的建立與刪除
顯示目錄中的文件
讀取文件中的字符
將數據寫入文件
CreateDelete.jsp
<%@ page contentType="text/html; charset=GB2312"%> <%@ page import="java.io.*" %> <%@ page language="java" %> <HTML> <HEAD> <TITLE>文件的建立與刪除</TITLE> </HEAD> <BODY> <CENTER> <FONT SIZE = 5 COLOR = blue>文件的建立與刪除</FONT> </CENTER> <BR> <HR> <BR> <% //建立代表目前目錄位置中File.txt檔的File變量, 并由fileName變量變數引用 String path = request.getRealPath("/jsphosting/wenjian"); File fileName = new File(path, "File.txt"); //檢查File.txt是否存在 if(fileName.exists()) { //刪除File.txt檔 fileName.delete(); //輸出目前所在的目錄路徑 out.println(path + "\\File.txt"); %> <FONT SIZE = 4 COLOR = red>存在</FONT>, 已完成 <FONT SIZE = 4 COLOR = red>刪除</FONT> <% } else { //在目前的目錄下建立一個名為File.txt的文字檔 fileName.createNewFile(); //輸出目前所在的目錄路徑 out.println(path + "\\File.txt"); %> <FONT SIZE = 4 COLOR = red>不存在</FONT>, 已完成 <FONT SIZE = 4 COLOR = red>建立</FONT> <% } %> </BODY> </HTML> |
顯示目錄中的文件
首先建立要顯示的目錄的FILE對象,然后調用LISTFILES方法,該方法返回一個FILE對象數組,顯示數組中的所有元素即可。
ListFile.jsp
<%@ page contentType="text/html; charset=GB2312"%> <%@ page language="java" %> <%@ page import="java.io.*" %> <HTML> <HEAD> <TITLE>取得目錄中的文件</TITLE> </HEAD> <BODY> <CENTER> <FONT SIZE = 5 COLOR = blue>取得目錄中的文件</FONT> </CENTER> <BR> <HR> <BR> <% //取得目前目錄的磁盤目錄 String path = request.getRealPath("/jsphosting/wenjian"); //建立代表目前目錄位置的d變量 File d = new File(path); //取得代表目錄中所有文件 File list[] = d.listFiles(); %> 在<Font color = red><%= path%></Font>目錄下的文件有(每個文件有其相應的功能)<BR> <Font color = blue> <ul> <% for(int i=0; i < list.length; i++) { %> <li><%= list[i].getName() %><BR> <% } %> </ul> </Font> </BODY> </HTML> |
讀取文件中的字符
直接調用FILEREADER對象的READ()方法讀取所要顯示的字符
ReadAll.jsp
<%@ page contentType="text/html; charset=GB2312" %> <%@ page language="java" %> <%@ page import="java.io.*" %> <HTML> <HEAD> <TITLE>讀取文件內容</TITLE> </HEAD> <BODY> <CENTER> <FONT SIZE = 5 COLOR = blue>讀取文件內容</FONT> </CENTER> <BR> <HR> <BR> <% String path = request.getRealPath("/jsphosting/wenjian"); //取得目前目錄在伺服端的實際位置 FileReader fr = new FileReader(path + "\\File.txt"); //建立FileReader變量,并設定由fr變量變數引用 int c = fr.read(); //從文件中讀取一個字節 while(c != -1) //判斷是否已讀到文件的結尾 { out.print((char)c); //輸出讀取到的數據 c = fr.read(); //從文件中讀取數據 if(c == 13) //判斷是否為斷行字節 { out.print("<BR>"); //輸出分行標簽 fr.skip(1); //略過一個字節 c = fr.read(); //讀取一個字節 } } //關閉文件 fr.close(); %> </BODY> </HTML> |
將數據寫入文件
通過調用FILEWRITER對象的WRITE()方法向文件中寫入數據
Write.jsp
<%@ page contentType="text/html; charset=GB2312"%> <%@ page language="java" %> <%@ page import="java.io.*" %> <HTML> <HEAD> <TITLE>將數據寫入文件</TITLE> </HEAD> <BODY> <CENTER> <FONT SIZE = 5 COLOR = blue>將數據寫入文件</FONT> </CENTER> <BR> <HR> <BR> <% String path = request.getRealPath("/jsphosting/wenjian"); //取得目前目錄在伺服端的實際位置 FileWriter fw = new FileWriter(path + "\\File.txt"); //建立FileWrite對象,并設定由fw對象變量引用 //將字串寫入文件 fw.write("大家好!"); fw.write("祝大家學習jsp愉快!"); fw.write("希望大家能夠深入了解jsp技術!"); fw.close(); //關閉文件 %> <P>寫入文件內容為</P> <FONT SIZE = 4 COLOR = red> <% FileReader fr = new FileReader(path + "\\File.txt"); //建立FileReader對象,并設定由fr對象變量引用 BufferedReader br = new BufferedReader(fr); //建立BufferedReader對象,并設定由br對象變量引用 String Line = br.readLine(); //讀取一行數據 out.println(Line + "<BR>"); //輸出讀取得的數據 br.close(); //關閉BufferedReader對象 fr.close(); //關閉文件 %> </FONT> </BODY> </HTML> |
打開tomcat/conf/servel.xml
修改(黑體字為修改部分)
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" URIEncoding="GBK"/>
在web頁上把含有中文的url用java.net.URLEncoder.encode("中文")處理
例子:
鏈接傳遞中文參數例子
jspsmartupload組件下載中文例子:
數據庫需求分析:
class(一級欄目信息):classId(自動編號),className(欄目名稱)
Nclass(二級欄目信息):NclassId(自動編號),NclassName(欄目名稱),parentId(一級欄目id,與class表中的classId關聯)
<%@ page contentType="text/html; charset=GB2312" language="java" errorPage="../error.jsp" %>
<%@ include file="../conn.jsp"%>
<%@ include file="../ds.jsp"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%request.setCharacterEncoding("gb2312"); %>
<HTML><HEAD>
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
<TITLE>級聯菜單</TITLE>
<LINK rel="stylesheet" type="text/css" href="style.css">
</HEAD>
<!--從數據庫中得到二級欄目信息-->
<%String sql="select * from Nclass order by NclassId asc";
ResultSet rs=stmt.executeQuery(sql);
%>
<!--將二級欄目信息保存到數組subcat中-->
<script type="text/javascript">
var onecount;
onecount=0;
subcat = new Array();
<%
int count = 0;
while(rs.next()){
%>
subcat[<%=count%>] = new Array("<%=rs.getString("NclassName")%>","<%=rs.getString("NclassId")%>","<%=rs.getString("parentId")%>");
<%
count++;
}
rs.close();
%>
onecount=<%=count%>;
<!--決定select顯示的函數-->
function changelocation(locationid)
{
document.myform.NclassId.length = 0;
var locationid=locationid;
var i;
for (i=0;i < onecount; i++)
{
if (subcat[i][2] == locationid)
{
document.myform.NclassId.options[document.myform.NclassId.length] = new Option(subcat[i][0], subcat[i][1]);
}
}
}
</script>
<FORM method="POST" name="myform" action="adminsave.jsp?action=add">
<TABLE>
<TR>
<TD>一級分類</TD>
<TD>
<SELECT name="classId" onChange="changelocation(document.myform.classId.options[document.myform.classId.selectedIndex].value)" size="1">
<OPTION selected value>==請選一級分類==</OPTION>
<sql:query var="query" dataSource="${bookdev}">
SELECT * FROM class
</sql:query>
<c:forEach var="row" items="${query.rows}">
<option value="${row.classId}">${row.className}</option>
</c:forEach>
</select>
</TD>
<TD>選擇二級分類</TD>
<TD>
<SELECT name="NclassId">
<OPTION selected value>==請選二級分類==</OPTION>
</SELECT>
</TD>
</TR>
</TABLE>
</FORM>
</BODY>
</HTML>
在新的 Tomcat 安裝,預設目錄檢視是啟用的,這可以是一個很有用的測試工具,如果像我一樣,您有時會忘記在某個網頁應用程式使用了甚麼 servlets,可以簡單地輸入網頁應用程式的 URL ,就能取得完整的列表。
但在生產的用途上,您可能想將它關掉。如果沒有其他東西,它不鼓勵使用者在他們不應該逗留的地方閒逛。要關掉這個選項基本上兩個方法:
第一個選項頗為簡單,因此我們只研究第二個選項。
開啟 web.xml 檔案,這檔案在 $CATALINA_HOME/conf/ 內,是整體的web.xml檔案,即是這裡有任何改變都會影響該 Tomcat 所有網頁應用程式。如果您想要更精細的控制,例如某些應用程式關掉,但某些則開啟,就需要以第一個選項來做,建立 index.html檔案。
找出以下部分:
<servlet> <servlet-name>default</servlet-name> <servlet-class> org.apache.catalina.servlets.DefaultServlet </servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>true</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> |
這是 web.xml 的第一部分,我們關注的選項是:
<init-param> <param-name>listings</param-name> <param-value>true</param-value> </init-param> |
將 <param-value> 改為 false,便可關掉目錄檢視,就是那麼簡單。
Tomcat使用的慣例與Apache網頁伺服器相同,index.html 是任何目錄的預設或首頁。有時您可能想改變為 page1.html 或是 JSP 頁面,如以下一樣 now_see_this.jsp:
要做到這樣,只需開啟網頁程式的 web.xml ,加上以下這些:
<welcome-file-list> <welcome-file>now_see_this.jsp</welcome-file> <welcome-file>page1.html</welcome-file> <welcome-file>index.htm</welcome-file> </welcome-file-list> |
要令整個系統改變,可在 $CATALINA_HOME/conf 下修改整體的 web.xml,並將 <welcome-file> 改變指向您所選的檔案。