Struts實質上就是在JSP Model 2的基礎上實現的一個MVC框架。由一組相互協作的類、Servlet以及JSP TagLib組成。Struts的核心組件主要包括:ActionServlet 、Action、 ActionMapping 、ActionForward、 ActionForm 、ActionError 及Struts標簽庫組成。
Struts 對于一個出學者來說,確實有一點困難,感覺是無形的,抓不住各個組件之間的邏輯,本實例主要是運用Myeclipse開發Struts的用戶登錄程序,把無形的Struts變成有形的。
本應用程序主要由以下5個文件組成:login.jsp 登錄頁面,success.jsp提交成功后的頁面,如果提交失敗,在次返回登錄頁面;LoginForm.java(ActionForm,存放用戶提交信息),LoginAction.java(Action,簡單的處理用戶登錄事件);及數據庫連接文件DBConnect.java。
下面我們又要開始了。。。
S1。 新建J2EE工程的web Project工程,工程名為:LoginStrutsDemo
然后給這個項目添加Struts框架必要的文件.在我們項目名上點擊右鍵,選擇MyEclipes --> Add Struts Capabilities...彈出對話框如下:

其中Struts config path就是我們的struts配置文件,URL pattern我們選擇*.do,Default application resource為我們默認的資源文件地方,你可以選擇它的存儲位置,我們在這里保持默認。點擊Finish后,項目結構如下圖:
然后雙擊打開/WEB-INF/web.xml文件,為其添加標簽庫。可以在Design界面或Source界面下添寫一個jsp-config標簽,如下圖:

然后,右擊OutLine框的jsp-config標簽,添加三個taglib子標簽,添好之后如下頁面:
或直接在Web.xml文件的Source 中將下面代碼添加至 </webapp> 上面:
<jsp-config>
<taglib>
<taglib-uri>/tags/struts-html</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/tags/struts-bean</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/tags/struts-logic</taglib-uri>
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>
</jsp-config>
S2。打開struts-config.xml文件,點擊這個界面左下角的Design進入可視化設計界面。我們先建立success.jsp文件如下:
把JSP托到面版中,彈出如下對話框:

File Name :successs.jsp
完成后,struts-config.xml文件自動被更新,可視化界在上也出現了剛新建的JSP模塊。新建的jsp文件也打開了。覆蓋所有的<%@ taglib ...... ,用我們開始在/WEB-INF/web.xml中定義的:
然后在<body></body>中添加:
Hello ,<bean:write name="userName" scope="request" /> .
這里將request中的屬性userName輸出在頁面上,所以等下我們在loginAction中,登錄成功后要設置一個相關屬性。
S3。下面來開始我們最后三個文件的設計吧。在Struts-config.xml的Design模式中,在畫版的空白區域點右鍵,選擇New --> New Form, Action and JSP 彈出ActionForm的選項面板,我們按圖上輸入相關值,如下:
因為我們這只是簡單的演示一個登錄片段,所以不用驗證用戶信息是否合法,所以將 Option Details的method選項卡的新建方法去掉,如圖:
接下來選擇 Optional Details的JSP選項卡,我們選中Create JSP form? 這一步myeclipse將為我們創建一個簡單的與用戶交互的登錄頁面:
點Next,進入Action選項面板.將Option Details的Form選項卡中Validate Form取消選擇,如圖:

在添加兩個全局Forward,如下:
點擊Finish完成。在Struts-config.xml的Design中,可以看到圖所示:
最后,簡單的修改一下login.jsp,將所有<%@ taglib ...%>替換為:
<%@ taglib uri="/tags/struts-html" prefix="html"%>
<%@ taglib uri="/tags/struts-bean" prefix="bean"%>
S4。運用MySQL建立數據庫腳本如下:
Create database strutsuser;
User strutsuser;
Create table users(
Username varchar(10) primary key,
Password varchar(10)
);
Insert into users values(‘chen’,’123456’);

然后,添加數據庫驅動。右鍵點擊工程名LoginStrutsDemo,選擇PropertiesàJava Build PathàLiberariesàAdd External JARs…
點擊OK之后,在把MySQL數據庫驅動文件拷貝到/WEB-INF/lib路徑下面,F5刷新。
S5。建立數據庫連接文件:DBConnection.java
代碼如下:
package com.chen.struts.action;
import java.sql.*;

public class DBConnection {
String sDBDriver = "com.mysql.jdbc.Driver";
String sConnstr = "jdbc:mysql://192.168.1.103:3306/strutsUser?useUnicode=true&characterEncoding=GBK";
Connection connect = null;
ResultSet rs = null;
Statement stmt = null;
public DBConnection()
{
try
{
Class.forName(sDBDriver);
}
catch(ClassNotFoundException ex)
{
System.err.println(ex.getMessage());
}
}

public ResultSet executeQuery(String sql)
{
try
{
this.connect = DriverManager.getConnection(sConnstr,"root","");
this.stmt = this.connect.createStatement();
rs = stmt.executeQuery(sql);
}
catch(SQLException ex)
{
System.err.println(ex.getMessage());
}
return rs;
}

public int executeUpdate(String sql)
{
int result = 0;
try
{
this.connect = DriverManager.getConnection(sConnstr,"root","");
this.stmt = this.connect.createStatement();
result = stmt.executeUpdate(sql);
}
catch(SQLException ex)
{
System.err.println(ex.getMessage());
}
return result;
}
}



修改LoginAction 如下所示:
package com.chen.struts.action;


import java.sql.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.chen.struts.form.LoginForm;


/**//**
* MyEclipse Struts
* Creation date: 04-25-2007
*
* XDoclet definition:
* @struts.action path="/login" name="loginForm" input="/login.jsp" scope="request"
* @struts.action-forward name="failture" path="/login.jsp"
* @struts.action-forward name="success" path="/success.jsp"
*/


public class LoginAction extends Action {

/**//*
* Generated Methods
*/

/**//**
* 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;
String name =loginForm.getUserName();
String password =loginForm.getPassword();
DBConnection myDb=new DBConnection();
ResultSet rs=null;
int result=0;

//String sql="select count(*) as count from users where username = '"+name+"' and password = '"+password+"'";
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");
}
}



最后,部署MyEclipse J2EE Project 到服務器上,在啟動MyEcplisp服務器,打開內置瀏覽器,輸入:http://localhost:8080/LoginStrutsDemo/login.jsp,好了,就可以了 呵呵,終于完成了。
posted on 2008-07-25 21:14
胖胖泡泡 閱讀(437)
評論(0) 編輯 收藏