天天看點

myeclipse開發struts應用程式小示例

今天看了下Struts架構的概述,就用myeclispe試着動手開發了一個簡單的使用者登入程式。應用程式包括2個jsp檔案、一個ActionForm、一個Action以及其它。是:login.jsp(使用者登入及錯誤提示頁面),loginSuccess.jsp(提示登入成功頁面),LoginForm.java(ActionForm,存放使用者送出資訊),LoginAction.java(Action,簡單的處理使用者登入事件)。

      下面開始動手吧。。。

      首先我們先建立一個j2ee的web project

6-26-1.GIF

然後給這個項目添加Struts架構必要的檔案.在我們項目名上點選右鍵,選擇MyEclipes --> Add Struts Capabilities...彈出對話框圖2:

6-26-2.GIF

其中Struts config path就是我們的struts配置檔案,URL pattern我們選擇*.do,Default application resource為我們預設的資源檔案地方,你可以選擇它的存儲位置,我們在這裡保持預設。點選Finish後,項目結構類似于圖3:

6-26-3.GIF

然後修改/WEB-INF/web.xml檔案,為其添加标簽庫。将下面代碼添加至 </webapp> 上面:

    <jsp-config>

   <taglib>

    <taglib-uri>/tags/struts-html</taglib-uri>

    <taglib-location>/WEB-INF/struts-html.tld</taglib-location>

   </taglib>

    <taglib-uri>/tags/struts-bean</taglib-uri>

    <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>

    <taglib-uri>/tags/struts-logic</taglib-uri>

    <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>

  </jsp-config>

完成後,打開struts-config.xml檔案,點選這個界面左下角的Design進入可視化設計界面。我們先建立loginSuccess.jsp檔案.點選Palette面版上的建立JSP檔案圖示,彈出建立JSP檔案面闆。圖4:

  

6-26-11.GIF

 完成後,struts-config.xml檔案自動被更新,可視化界在上也出現了剛建立的JSP子產品。建立的jsp檔案也打開了。覆寫所有的<%@ taglib ...... 為我們開始在/WEB-INF/web.xml中定義的:

  <%@ taglib uri="/tags/struts-html" prefix="html"%>

  <%@ taglib uri="/tags/struts-bean" prefix="bean"%>

  <%@ taglib uri="/tags/struts-logic" prefix="logic"%>

  然後在<body></body>中添加:

  Hello <bean:write name="userName" scope="request" /> .

  這裡将request中的屬性userName輸出在頁面上,是以等下我們在loginAction中,登入成功後要設定一個相關屬性。

   下面來開始我們最後三個檔案的設計吧。在Struts-config.xml的Design模式中,在畫版的空白區域點右鍵,選擇New --> New Form, Action and JSP 彈出ActionForm的選項面闆,我們按圖上輸入相關值,圖5:

6-26-5.GIF

 

因為我們這隻是簡單的示範一個登入片段,是以不用驗證使用者資訊是否合法,是以将 Option Details的method頁籤的建立方法去掉,如圖:

6-26-6.GIF

接下來選擇 Optional Details的JSP頁籤,我們選中Create JSP form? 這一步myeclipse将為我們建立一個簡單的與使用者互動的登入頁面:

6-26-7.GIF

點Next,進入Action選項面闆.将Option Details的Form頁籤中Validate Form取消選擇,如圖:

6-26-8.GIF

6-26-9.GIF

點選Finish完成。在Struts-config.xml的Design中,可以看到圖所示:

6-26-10.GIF

  最後,簡單的修改一下login.jsp,将所有<%@ taglib ...%>替換為:

修改LoginAction如下所示:

    /** 

     * Method execute

     * @param mapping

     * @param form

     * @param request

     * @param response

     * @return ActionForward

     */

    public ActionForward execute(

        ActionMapping mapping,

        ActionForm form,

        HttpServletRequest request,

        HttpServletResponse response)

    {

        LoginForm loginForm = (LoginForm) form;

        // TODO Auto-generated method stub

        String name = loginForm.getUserName();

        String password = loginForm.getPassword();

        DBbase myDb = new DBbase();

        ResultSet rs = null;

        int result = 0;

        String sql = "select count(*) as count from users where username = '"+name+"' and password = '"+password+"'";

        try

        {

             rs = myDb.executeQuery(sql);

             if(rs.next())

            {

                result = rs.getInt("count");

            }

        }

        catch(SQLException ex)

            ex.printStackTrace();

        if(result>0)

            request.setAttribute("userName",name);

            return mapping.findForward("success");

        return mapping.findForward("failure");

    }

加入一個資料通路javaBean:

package com.vitamin.DataAccess;

import java.sql.*;

public class DBbase {

        String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";

        String sConnstr = "jdbc:odbc:myDB";

        Connection connect = null;

        Statement stmt = null;

        public DBbase()

                try

                {

                        Class.forName(sDBDriver);

                }

                catch(ClassNotFoundException ex)

                        System.err.println(ex.getMessage());

        public ResultSet executeQuery(String sql)

                        this.connect = DriverManager.getConnection(sConnstr);

                        this.stmt = this.connect.createStatement();

                        rs = stmt.executeQuery(sql);

                catch(SQLException ex)

                return rs;

        public int executeUpdate(String sql)

                int result = 0;

                        result = stmt.executeUpdate(sql);

                return result;

}

好了,完成!!用浏覽器上打開:http://localhost:8080/HelloStruts/login.jsp,就可以了

哦,出了問題了,中文輸入不支援,呵呵,想點辦法來讓個一勞永逸吧。。

Servlet2.3開始增加了事件監聽和過濾器,管道和過濾器是為處理資料流的系統而提供的一種模式,它由管道和過濾器組成,每個處理步驟都封裝在一個過濾器元件中,資料通過相鄰過濾器之間的管道進行傳輸,每個過濾器可以單獨修改,功能單一,并且順序可以進行配置。

在Web.xml中修改如下:

 <filter>

   <filter-name>EncodingFilter</filter-name>

   <filter-class>com.vitamin.util.EncodingFilter</filter-class>

   <init-param>

    <param-name>encoding</param-name>

    <param-value>GB2312</param-value>

   </init-param>

  </filter>

  <filter-mapping>

   <url-pattern>/*</url-pattern>

  </filter-mapping>

新加一個類EncodingFilter:

package com.vitamin.util;

import javax.servlet.Filter;

import javax.servlet.FilterConfig;

import javax.servlet.FilterChain;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import java.io.IOException;

public class EncodingFilter implements Filter

{

    private FilterConfig config = null;

    private String targetEncoding = "GBK";

    public EncodingFilter() 

        super();

        // TODO 自動生成構造函數存根

    public void init(FilterConfig config) throws ServletException

        // TODO 自動生成方法存根

        this.config = config;

        this.targetEncoding = config.getInitParameter("encoding");//從配置中讀取初始化參數

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException 

        System.out.println("目标編碼:"+this.targetEncoding);

        request.setCharacterEncoding(this.targetEncoding);

        response.setCharacterEncoding(this.targetEncoding);

        chain.doFilter(request,response);

    public void destroy() 

        this.config = null;

        this.targetEncoding = null;

這樣就可以很好地解決中文亂碼的問題了。。。

本文轉自Phinecos(洞庭散人)部落格園部落格,原文連結:http://www.cnblogs.com/phinecos/archive/2006/06/26/436355.html,如需轉載請自行聯系原作者