返回列表 發帖

tomcat 6 配置 Struts 2

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

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

我先分享一下設定 tomcat6 的 connetion連接池 設定
我的資料庫是 ibm as400 裡的 db2/400
環境如下
Tomcat 6.0.29
jdk 官網最新版
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如下 , 在適當的位置放入

<description>AS400/db2</description>
    <resource-ref>
      <description>DB2Connection</description>
      <res-ref-name>jdbc/ty400</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
</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資料庫的部分大家可以參考一下
<?xml version="1.0" encoding="UTF-8"?>

<Context path="/tycons" reloadable="true" 
 docBase="D:\Tomcat\webapps\tycons" 
 workDir="D:\Tomcat\webapps\tycons\WEB-INF\work"
 antiResourceLocking="false" privileged="true" >
  
  <!-- mysql  JNDI -->
  <!--
  <Resource name="jdbc/db" auth="Container" type="javax.sql.DataSource"
               maxActive="200" maxIdle="30" maxWait="10000"
               username="帳號" password="密碼" driverClassName="com.mysql.jdbc.Driver"
               url="jdbc:mysql://localhost:3306/db?autoReconnect=true" />
  -->             
   
 <!-- as400 db2 JNDI -->   
   
 <Resource name="jdbc/ty400" auth="Container" type="javax.sql.DataSource"
        maxActive="300" maxIdle="30" maxWait="10000"
        username="帳號" password="密碼" driverClassName="com.ibm.as400.access.AS400JDBCDriver"
       url="jdbc:as400://你的as400主機ip" />  

</Context>

如此一來,就設定完成了
接下來就是測試  ,在你的網站下創一個 jnditest.jsp
<%@ page import="java.sql.*" %>
<%@ page import="javax.sql.*" %>
<%@ page import="javax.naming.*" %>
<%@ page language="java" contentType="text/html;charset=Big5" %>
<%
Connection con=null;
try  
  {    
    Context initContext = new InitialContext();
                Context envContext = (Context) initContext.lookup("java:/comp/env");
                DataSource ds = (DataSource)envContext.lookup("jdbc/ty400");
    con = ds.getConnection(); 
    
  
    if(!con.isClosed()){
      out.println("跟db有連線!!\n");
    }
    
  
  }  
  catch(Exception e){
    out.println("e="+e.getMessage());  
    e.printStackTrace();
  }
  finally
  {
    con=null;

  }
%>


接下來, 來設定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 檔案 , 範例內容如下
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"   "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
   
    <constant name="struts.devMode" value="false" />
    
    <!-- Add packages here -->
     <package name="helloWorld" extends="struts-default">
        <action name="hello"  class="com.hello">
            <result name="success">/helloWorld.jsp</result>
        </action>  
     </package> 
</struts>   
6.在WEB-INF\ 創立一個 web.xml 檔案 , 範例內容如下
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">
    
<filter>   
  <filter-name>struts2</filter-name>   
  <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>   
</filter>   
<filter-mapping>   

<filter-name>struts2</filter-name>   
  <url-pattern>/*</url-pattern>   
</filter-mapping>   

</web-app>
web.xml裡的<filter-class> , 在struts 2.1版以上, 是用
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
這個class, 所以別設錯了

基本上這樣就設定完成了, 接下來要寫一些程式來測試
在struts.xml 裡 , 我的執行程式是 con.hello
package com;
import com.opensymphony.xwork2.ActionSupport;

public class hello extends ActionSupport { //需要繼承ActionSupport 類別
  public static final String MESSAGE = "Struts 2 is up and running ...";
  private String message;

  private String name; //從from送過來的
  private String msg;   //從from送過來的
  public String execute() throws Exception { //覆寫 ActionSupport的 execute方法
    setMessage(MESSAGE);
    return SUCCESS; //回傳 ActionSupport的 變數,會對應到struts.xml裡的 <result name="success">
  }

  public void setMessage(String message) {
    this.message = message;
  }
  public String getMessage() {
    return message;
  }
  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getMsg() {
    return msg;
  }

  public void setMsg(String msg) {
    this.msg = msg;
  }
}
  
送出的jsp , 這裡注意到 action='hello' 這是對應 strust.xml 裡的 <action name="hello"  class="com.hello"> 意思就是遇到action='hello'時, 就呼叫 con.hello 這隻class來處裡.
你也可以指定要執行的method, 這個後面再說
<%@ page language="java" contentType="text/html; charset=BIG5" pageEncoding="BIG5"%>
<html>
  <form name='helloWorld' action='hello'>
    名字:<input type='text' name='name'/><br>
    要說的話:<input type='text' name='msg'/><br>
    <input type='submit' value='送出'/>
    </form>
</html>
接收結果的helloWorld.jsp , taglib這個部分先不講, 因為我也還在研究
<%@ page language="java" pageEncoding="BIG5"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
    <head>
        <title>Hello World!</title>
    </head>
    <body>
        <h2><s:property value="message" /></h2><br>
        你的名字是:<s:property value="name" /><br>
        你說的話是:<s:property value="msg" />
    </body>
</html>
測試結果如下

返回列表 回復 發帖