返回列表 發帖

tomcat 6 配置 Struts 2

本帖最後由 hanmin888 於 2010-9-29 14:00 編輯

在經過一番折騰之後
終於把基本的JNDI與struts2設定完成
另外我還抄了網路上的log4j 的設定.是為了要看struts2的錯誤,
在這邊先不分享,因為我還沒搞清楚log4j的設定與用法.

我先分享一下設定 tomcat6 的 connetion連接池 設定
我的資料庫是 ibm as400 裡的 db2/400
環境如下
  1. Tomcat 6.0.29  
  2. jdk 官網最新版  
  3. struts 2.2.1 目前apache網站上最新版  
設定JNDI如下
1. 先準備好 jdbc 的jar , 各種資料庫都有各自的jdbc jar, as400的話, 請用ibm出的 jt400.jar
    可以到http://findjar.com/index.x 去找到
2.把 jt400.jar 放在 tomcat\lib 下
3.設定web.xml如下 , 在適當的位置放入
  1. <description>AS400/db2</description>  
  2.     <resource-ref>  
  3.       <description>DB2Connection</description>  
  4.       <res-ref-name>jdbc/ty400</res-ref-name>  
  5.       <res-type>javax.sql.DataSource</res-type>  
  6.       <res-auth>Container</res-auth>  
  7. </resource-ref>  
4. <res-ref-name> 是你要抓connection的參數 , 到時會用到 , 先自己取一個容易記的名稱
5.設定 context.xml:
   (1)在tomcat6, 不必在你的目錄下創建 META-INF , 因為你設定了context.xml 在META-INF時
        tomcat6會在 Tomcat\conf\Catalina\localhost\  產生一個 "網站名.xml"
        裡面的內容就是你在META-INF\context.xml 的內容.
        當你把tomcat關掉重開之後, 就會出現
       [警告] 該目錄已經被佈屬, 將會略過 ....  的訊息
        原因就是那個"網站名.xml"在亂.
   (2) 在這裡, 我是直接設定 Tomcat\conf\context.xml  , mysql資料庫的部分大家可以參考一下
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <Context path="/tycons" reloadable="true"   
  4.  docBase="D:\Tomcat\webapps\tycons"   
  5.  workDir="D:\Tomcat\webapps\tycons\WEB-INF\work"  
  6.  antiResourceLocking="false" privileged="true" >  
  7.     
  8.   <!-- mysql  JNDI -->  
  9.   <!--  
  10.   <Resource name="jdbc/db" auth="Container" type="javax.sql.DataSource"  
  11.                maxActive="200" maxIdle="30" maxWait="10000"  
  12.                username="帳號" password="密碼" driverClassName="com.mysql.jdbc.Driver"  
  13.                url="jdbc:mysql://localhost:3306/db?autoReconnect=true" />  
  14.   -->               
  15.      
  16.  <!-- as400 db2 JNDI -->     
  17.      
  18.  <Resource name="jdbc/ty400" auth="Container" type="javax.sql.DataSource"  
  19.         maxActive="300" maxIdle="30" maxWait="10000"  
  20.         username="帳號" password="密碼" driverClassName="com.ibm.as400.access.AS400JDBCDriver"  
  21.        url="jdbc:as400://你的as400主機ip" />    
  22.   
  23. </Context>  
如此一來,就設定完成了
接下來就是測試  ,在你的網站下創一個 jnditest.jsp
  1. <%@ page import="java.sql.*" %>  
  2. <%@ page import="javax.sql.*" %>  
  3. <%@ page import="javax.naming.*" %>  
  4. <%@ page language="java" contentType="text/html;charset=Big5" %>  
  5. <%  
  6. Connection con=null;  
  7. try    
  8.   {      
  9.     Context initContext = new InitialContext();  
  10.                 Context envContext = (Context) initContext.lookup("java:/comp/env");  
  11.                 DataSource ds = (DataSource)envContext.lookup("jdbc/ty400");  
  12.     con = ds.getConnection();   
  13.       
  14.     
  15.     if(!con.isClosed()){  
  16.       out.println("跟db有連線!!\n");  
  17.     }  
  18.       
  19.     
  20.   }    
  21.   catch(Exception e){  
  22.     out.println("e="+e.getMessage());    
  23.     e.printStackTrace();  
  24.   }  
  25.   finally  
  26.   {  
  27.     con=null;  
  28.   
  29.   }  
  30. %>  


接下來, 來設定struts 2
1. 先到apache下載 struts 2.2.1 的jar
2. 到http://findjar.com/index.x 找 javassist-3.7.ga.jar
3. 把圖中的jar 都放到 WEB-INF\lib\


4. 在WEB-INF\ 建立一個 classes 資料夾 , 並且把elipse的輸出資料夾指向 WEB-INF\classes
如圖所示, 最下面有個預設輸出資料夾:


5.在WEB-INF\classes\  創立一個 struts.xml 檔案 , 範例內容如下
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"   "http://struts.apache.org/dtds/struts-2.0.dtd">  
  3. <struts>  
  4.      
  5.     <constant name="struts.devMode" value="false" />  
  6.       
  7.     <!-- Add packages here -->  
  8.      <package name="helloWorld" extends="struts-default">  
  9.         <action name="hello"  class="com.hello">  
  10.             <result name="success">/helloWorld.jsp</result>  
  11.         </action>    
  12.      </package>   
  13. </struts>     
6.在WEB-INF\ 創立一個 web.xml 檔案 , 範例內容如下
  1. <?xml version="1.0" encoding="ISO-8859-1"?>  
  2. <web-app xmlns="http://java.sun.com/xml/ns/javaee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
  5.     version="2.5">  
  6.       
  7. <filter>     
  8.   <filter-name>struts2</filter-name>     
  9.   <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>     
  10. </filter>     
  11. <filter-mapping>     
  12.   
  13. <filter-name>struts2</filter-name>     
  14.   <url-pattern>/*</url-pattern>     
  15. </filter-mapping>     
  16.   
  17. </web-app>  
web.xml裡的<filter-class> , 在struts 2.1版以上, 是用
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
這個class, 所以別設錯了

基本上這樣就設定完成了, 接下來要寫一些程式來測試
在struts.xml 裡 , 我的執行程式是 con.hello
  1. package com;  
  2. import com.opensymphony.xwork2.ActionSupport;  
  3.   
  4. public class hello extends ActionSupport { //需要繼承ActionSupport 類別  
  5.   public static final String MESSAGE = "Struts 2 is up and running ...";  
  6.   private String message;  
  7.   
  8.   private String name; //從from送過來的  
  9.   private String msg;   //從from送過來的  
  10.   public String execute() throws Exception { //覆寫 ActionSupport的 execute方法  
  11.     setMessage(MESSAGE);  
  12.     return SUCCESS; //回傳 ActionSupport的 變數,會對應到struts.xml裡的 <result name="success">  
  13.   }  
  14.   
  15.   public void setMessage(String message) {  
  16.     this.message = message;  
  17.   }  
  18.   public String getMessage() {  
  19.     return message;  
  20.   }  
  21.   public String getName() {  
  22.     return name;  
  23.   }  
  24.   
  25.   public void setName(String name) {  
  26.     this.name = name;  
  27.   }  
  28.   
  29.   public String getMsg() {  
  30.     return msg;  
  31.   }  
  32.   
  33.   public void setMsg(String msg) {  
  34.     this.msg = msg;  
  35.   }  
  36. }  
  37.     
送出的jsp , 這裡注意到 action='hello' 這是對應 strust.xml 裡的 <action name="hello"  class="com.hello"> 意思就是遇到action='hello'時, 就呼叫 con.hello 這隻class來處裡.
你也可以指定要執行的method, 這個後面再說
  1. <%@ page language="java" contentType="text/html; charset=BIG5" pageEncoding="BIG5"%>  
  2. <html>  
  3.   <form name='helloWorld' action='hello'>  
  4.     名字:<input type='text' name='name'/><br>  
  5.     要說的話:<input type='text' name='msg'/><br>  
  6.     <input type='submit' value='送出'/>  
  7.     </form>  
  8. </html>  
接收結果的helloWorld.jsp , taglib這個部分先不講, 因為我也還在研究
  1. <%@ page language="java" pageEncoding="BIG5"%>  
  2. <%@ taglib prefix="s" uri="/struts-tags" %>  
  3. <html>  
  4.     <head>  
  5.         <title>Hello World!</title>  
  6.     </head>  
  7.     <body>  
  8.         <h2><s:property value="message" /></h2><br>  
  9.         你的名字是:<s:property value="name" /><br>  
  10.         你說的話是:<s:property value="msg" />  
  11.     </body>  
  12. </html>  
測試結果如下

返回列表 回復 發帖