基於Tomcat、Log4j及SQL Server2000的JSP執行環境的搭建

jianghe_03發表於2008-04-11
基於Tomcat、Log4j及SQL Server2000的JSP執行環境的搭建
JDBC資料庫連線  
  系統配置:windows2000+sp4/本地sqlserver2000+SP3/JDK5.0/TOMCAT5.58/sqlserver2000 driver for JDBC
  第一步:----安裝J2SDK:
  到SUN官方站點(http://java.sun.com/j2se,英文網站)下載J2SDK的安裝檔案。目前的最高版本是JDK 5.0 Update 2。(具體地址http://java.sun.com/j2se/1.5.0/download.jsp)
  安裝時有兩個選擇安裝路徑的頁面,第一個安裝路徑可以隨便選我們就放在C:\JDK5.0下好了。第二個就用預設路徑,別動它。
  安裝完畢後,要設定環境變數
  我的電腦---屬性---高階---環境變數;
  在下面的框框---系統變數(S)裡新建兩個系統變數。
  一個JAVA_HOME
  在變數名中輸入:JAVA_HOME(注意大寫),在變數值中輸入:C:\JDK5.0
  在變數名中輸入:CLASSPATH(注意大寫),在變數值中輸入:D:\JDK5.0\bin;.;D:\JDK5.0\lib;D:\JDK5.0\lib\dt.jar;D:\JDK5.0\lib\tools.jar;
  新建兩個系統變數後,還要在原來就有的一個系統變數PATH的變數值最前面加C:\JDK5.0\bin;
  這樣JDK就安裝好了,我們可以新建個D:\下新建個記事本,在裡面敲入下面這段程式碼用來檢驗JDK是否安裝成功。
  public class test{
   public static void main(String args[]){
    System.out.println("this is a test program.");
   }
  }
  敲完儲存,更改檔名為test.java
  注意1:最好自己敲下鍵盤,在網頁上直接複製可能會出現語法錯誤。
  注意2:第一句中public class test的test要跟java檔案的檔名一摸一樣,大小寫也要相同,否則錯誤。
  開始——執行 輸入cmd進入DOS命令提示符視窗
  在視窗中輸入“D:”回車
  輸入“javac test.java”回車
  輸入“java test”回車
如果顯示出“this is a test program.”則表示JDK安裝成功。
  第二步:----安裝Tomcat:
  到tomcat官方站點http://jakarta.apache.org/site/downloads/index.html,點Tomcat Downloads裡的Tomcat5,目前最新版本是5.5.9(http://tomcat.apache.org/download-55.cgi)。
  安裝在C:\Tomcat5.5下
  TOMCAT5.5以上版本在JDK1.5以上版本安裝成功的前提下,無需在系統變數裡做任何更改。
  安裝完畢後,你可以在系統欄裡看到一個TOMCAT的伺服器。
  用IE開啟Tomcat Downloads裡的Tomcat5,http://localhost:8080頁面,若能看到tomcat的預設JSP頁面,則說明TOMCAT安裝成功!
建立自己的web釋出目錄:在webapp下建立一目錄test,在該目錄下建立資料夾WEB-INF,其下建立一個檔案web.xml,test即可成為自己的釋出目錄,你的jsp檔案my.jsp就放在這個目錄下面。
執行http://localhost:8080/test/my.jsp即可.
  第三步:----安裝JSP訪問SQL Server 2000的驅動程式JDBC:
注意:有些sqlserver2000版本低,需要打補丁mssqlserver_sp4.exe(下載查詢:檔名:SQL2000-KB884525-SP4-x86-CHS.EXE),打完補丁後,在企業管理器中又單擊(local)(Windows NT),在SQL Server屬性中選擇安全性,身份驗證為 SQL Server和Windows,確定。增加使用者,給予許可權,已改使用者登入SQL SERVER(資料庫連線中用該使用者)。沒有上述步驟,下面程式碼出現無法連線埠錯誤JDBC下載在微軟的官方頁(http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=86212D54-8488-481D-B46B-AF29BB18E1E5)下載。
  下載安裝後的預設路徑是C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC
  其核心的三個檔案是C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib路徑下的三個.JAR壓縮檔案
  第一步我們在環境變數中新建的系統變數CLASS_PATH的變數值中追加
  C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib\msbase.jar;C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib\mssqlserver.jar;C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib\msutil.jar;
  接著將msbase.jar、mssqlserver.jar、msutil.jar拷至C:\Tomcat 5.5\common\lib
  然後重新啟動TOMCAT伺服器!
  用一段程式碼來測試資料庫連線成功與否。
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=pubs"; //pubs為SQLSERVER2000的預設資料庫
String user="sa";
//把sa替換成你的SQLSERVER2000使用者名稱
String password="sa";
//把sa替換成你的SQLSERVER2000密碼
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from titles";
//titles為SQLSERVER2000的預設資料庫pubs中的預設表
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一個欄位內容為:<%=rs.getString(1)%>
您的第二個欄位內容為:<%=rs.getString(2)%><br>
<%}%>
<%out.print("資料庫連線池操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
  注:網上有的程式碼“<%=rs.getString(2)%> ”中有分號,正確程式碼的應該去掉分號。
Tomcat資料緩衝池連線
第三步:----配置Tomcat
  在Tomcat 5.5\conf\server.xml的<GlobalNamingResources>中新增:
  <Resource name="JDBC for MySQL" type="javax.sql.DataSource" password="sa" driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver" maxIdle="2" maxWait="5000" username="sa" url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=pubs" maxActive="4"/>
  或通過Tomcat Administration登陸其管理介面,並由Resources->Data Sources->Create New Data Source建立新的資料來源。
Property Value
JNDI Name: JDBC for MySQL
Data Source URL: jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=pubs
JDBC Driver Class: com.microsoft.jdbc.sqlserver.SQLServerDriver
User Name: sa
Password: sa
Max. Active Connections: 4
Max. Idle Connections: 2
Max. Wait for Connection: 5000
Validation Query:  
  接著單擊Save按鈕儲存,並單擊Commit Changes將更改更新至Tomcat伺服器。
  在Tomcat 5.5\webapps\[專案名稱]\WEB-INF\web.xml或Tomcat 5.5\conf\web.xml的<web-app>中新增:
<resource-ref>
<description>MySQL Connection Pool</description>
<res-ref-name>JDBC for MySQL</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
  在Tomcat 5.5\conf\context.xml的<Context>或Tomcat 5.5\webapps\[專案名稱]\META-INF\context.xml中新增:
  <ResourceLink name="JDBC for MySQL" global="JDBC for MySQL" type="javax.sql.DataSource"/>
  第四步:----測試
  重啟Tomcat伺服器,寫一個test.jsp:
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<%@ page session="false" %>
<%@page contentType="text/html;charset=gb2312"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Test of SQL Server connection pool</title>
</head>
<body>
<%
try{
Context initCtx = new InitialContext();
Context ctx = (Context) initCtx.lookup("java:comp/env");
Object obj = (Object) ctx.lookup("JDBC for MySQL");
javax.sql.DataSource ds = (javax.sql.DataSource)obj;
Connection conn = ds.getConnection();
out.print("SQL Server connection pool runs perfectly!");%>
<%
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from titles";
//titles為SQLSERVER2000的預設資料庫pubs中的預設表
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一個欄位內容為:<%=rs.getString(1)%>
您的第二個欄位內容為:<%=rs.getString(2)%><BR>
<%}%>
<%out.print("資料庫操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
}
catch(Exception ex){
out.print(ex.getMessage());
ex.printStackTrace();
}
%>
</body>
</html>
Log4j日誌管理
1、首先將log4j-1.2.9.jar包含入類路徑中。
2、Log4J必須在應用的其它程式碼執行前完成初始化。其初始化內容如下:
import java.io.*;
import javax.servlet.*;
import org.apache.log4j.*;
public class Log4JInit extends HttpServlet {
public void init() throws ServletException {
String prefix = getServletContext().getInitParameter("SERVLET_ROOT_PATH");
String file = getServletConfig().getInitParameter("LOG4J_FILE");
// 從Servlet引數讀取log4j的配置檔案
if (file != null) {
PropertyConfigurator.configure(prefix + file);
}
}
public void doGet(HttpServletRequest request,HttpServletResponse response)throws
IOException, ServletException {}
public void doPost(HttpServletRequest request,HttpServletResponse response)throws
IOException, ServletException {}
}
3、web.xml內容配置如下:具體的檔案放在 路徑:\webapps\[專案名稱]\WEB-INF\web.xml或Tomcat 5.5\conf\web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>globalparameter</servlet-name>
<servlet-class>edu.common.GlobalParameter</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>globalparameter</servlet-name>
<url-pattern>/globalparameter</url-pattern>
</servlet-mapping>
<context-param>
<param-name>SERVLET_ROOT_PATH</param-name>
<param-value>C:/Java/Tomcat 5.5/webapps/ROOT/WEB-INF/classes</param-value>
</context-param>
<context-param>
<param-name>LOG4J_FILE</param-name>
<param-value>/log4j.properties</param-value>
</context-param>
........
</web-app>
注意:上面的load-on-startup應設為1,以便在Web容器啟動時即裝入該Servlet。log4j.properties檔案放在根的properties子目錄中,也可以把它放在其它目錄中。應該把.properties檔案集中存放,這樣方便管理。
4、log4j.properties的配置,具體的路徑在\webapps\專案名稱\WEB-INF\log4j.properties
在配置檔案中即log4j.properties中這樣設定:
# 其中,Log4j提供的appender有以下幾種:
# org.apache.log4j.ConsoleAppender(控制檯),
# org.apache.log4j.FileAppender(檔案),
# org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌檔案),
# org.apache.log4j.RollingFileAppender(檔案大小到達指定尺寸的時候產生一個新的檔案),
# org.apache.log4j.WriterAppender(將日誌資訊以流格式傳送到任意指定的地方)
# 配置日誌資訊的格式(佈局),其語法為:
# log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
# log4j.appender.appenderName.layout.option1 = value1
# log4j.appender.appenderName.layout.option = valueN
# 其中,Log4j提供的layout有以下幾種:
# org.apache.log4j.HTMLLayout(以HTML表格形式佈局),
# org.apache.log4j.PatternLayout(可以靈活地指定佈局模式),
# org.apache.log4j.SimpleLayout(包含日誌資訊的級別和資訊字串),
# org.apache.log4j.TTCCLayout(包含日誌產生的時間、執行緒、類別等等資訊)
#設定成根目錄,所有包括debug以上級別的資訊都列印出來到日誌檔案中
log4j.rootLogger=debug, stdout
#設定為debug,表示只能列印出debug級別的資訊
log4j.logger.debug=debug, R
#設定成info,表示只能列印出info級別的資訊
log4j.logger.info=info,s
#設定成error,表示只能列印出error級別的資訊
log4j.logger.error = error,k
#輸出debug級別以上的資訊到控制檯
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=(%F:%L) - %m%d%n
#列印debug級別的資訊到debug.log
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=c:/debug.log
log4j.appender.R.Append = true
log4j.appender.R.DatePattern='.'yyyy-MM-dd'.txt'
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d [%F:%L] - %m \r\n
#列印info級別的資訊到info.log
log4j.appender.s=org.apache.log4j.RollingFileAppender
log4j.appender.s.File= c:/info.log
log4j.appender.s.Append = true
# Control the maximum log file size
log4j.appender.s.MaxFileSize=100KB
# Archive log files (one backup file here)
log4j.appender.s.MaxBackupIndex=1
log4j.appender.s.layout=org.apache.log4j.PatternLayout
log4j.appender.s.layout.ConversionPattern=%p %t %c - %m%d%n
#列印error級別的資訊到error.log中
log4j.appender.k=org.apache.log4j.DailyRollingFileAppender
log4j.appender.k.File=C:/error.log
log4j.appender.k.Append = true
log4j.appender.k.DatePattern='.'yyyy-MM-dd'.txt'
log4j.appender.k.layout=org.apache.log4j.PatternLayout
log4j.appender.k.layout.ConversionPattern=%d [%F:%L] - %m \r\n

5、在class類中的的設定如下:
static Logger debugLog=Logger.getLogger("debug")
static Logger infoLog=Logger.getLogger("info")
static Logger errorLog=Logger.getLogger("error")
這樣不同級別的log資訊就可以打在不同的log檔案中例如:
debugLog.debug("就列印到上面的debuginfo中");
InfoLog.info("就列印到上面的infoLog中");
遮蔽tomcat目錄列表功能
預設情況下,如果你訪問tomcat下的一個web應用,那麼如果你輸入的是一個目錄名,而且該目錄下沒有一個可用的welcome檔案,那麼tomcat會將該目錄下的所有檔案列出來,如果你想遮蔽這個預設行為,那麼可以修改conf/web.xml檔案,將其中的:
<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>
修改為:
<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>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

相關文章