上一篇我們簡單了解了[struts](http://blog.csdn.net/lovesummerforever/article/details/18942381)[原理](http://blog.csdn.net/lovesummerforever/article/details/18942381),學習SSH,第一部是傻瓜式學習法,人家怎么做就跟著怎么做就ok。我們以登錄為例,Struts配置步驟總結如下(如圖2.1):

圖2.2
### 1、jar包拷貝
首先是建立java web項目,之后打開我們我們下載好strtus框架,Struts-1.2.9-bin文件夾和struts-1.2.9.src源文件文件夾。在bin文件夾中的lib文件中拷貝struts的jar包,拷貝到我們自己項目struts_login –>lib文件夾下(如圖2.2)。

圖2.2
### 2、web.xml文件配置
找到Struts-1.2.9-bin中Struts-1.2.9-bin-->webapps下的struts實例struts-blank中的struts-1.2.9-bin\webapps\struts-blank\WEB-INF下的web.xml文件,復制配置對ActionServlet的配置,粘貼到我們的項目struts_login的WEB-INF下的web.xml中,代碼如下所示。主要是對struts自帶的ActionServlet進行配置。
~~~
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>2</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<!--Standard Action Servlet Mapping -->
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
~~~
### 3、在項目中建立自己的ActionForm
在項目中建立自己的ActionForm,繼承struts框架中已經寫好的ActionForm,在ActionForm設置用到的數據,并且要和我們界面上設置的名稱一致。因為我們在提交表單的時候,所有的請求都會放到ActionForm中。建立登錄的ActionForm,LoginActionForm.java代碼如下所示。
~~~
package com.bjpowernode.struts;
import org.apache.struts.action.ActionForm;
/**
* 登錄ActionForm,負責表單收集數據.
* 表單的屬性必須和ActionForm中的get和set的屬性一致.
* @author summer
*
*/
public classLoginActionForm extends ActionForm {
//用戶名。
private Stringusername;
//密碼。
private String password;
//設置密碼。
public voidsetPassword(Stringpassword) {
this.password = password;
}
//得到用戶名。
public StringgetUsername() {
return username;
}
//設置用戶名。
public voidsetUsername(Stringusername) {
this.username = username;
}
//得到密碼。
public StringgetPassword() {
return password;
}
}
~~~
### 4、建立自己的Action
建立自己的Action,同時繼承struts框架中的org.apache.struts.action.Action,重載父類的execute方法。在這里完成取出表單中的數據。通過CalActionFormcalForm= (CalActionForm)(CalActionForm)form;(struts框架中已經幫我們封裝好了,我們去使用就可以了)來取得表單中的值。經過判斷后,進行相應的操作,跳轉到相應的頁面。Action的功能是負責拿到表單數據和調用業務邏輯后進行頁面跳轉。建立登陸的Action類,LoginAction.java類,調用業務邏輯類UserManager的login方法。代碼如下所示。
~~~
packagecom.bjpowernode.struts;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importorg.apache.struts.action.Action;
importorg.apache.struts.action.ActionForm;
importorg.apache.struts.action.ActionForward;
importorg.apache.struts.action.ActionMapping;
/**
*登錄Action
*負責取得表單數據,調用業務邏輯,返回轉向信息.
*
* @author summer
*
*/
public classLoginAction extendsAction {
@Override
public ActionForward execute(ActionMappingmapping,ActionForm form,
HttpServletRequest request, HttpServletResponseresponse)
throws Exception {
LoginActionForm laf = (LoginActionForm)form;
Stringusername = laf.getUsername();
Stringpassword = laf.getPassword();
UserManager userManager = newUserManager();
//傳遞用戶名和密碼
try
{
userManager.login(username, password);
request.setAttribute("username", username);
return mapping.findForward("success");
}catch(UserNotFoundException e)
{
e.printStackTrace();
request.setAttribute("msg","用戶不能找到,用戶名稱=[" +username +"+]");
}catch(PasswordErrorException e)
{
e.printStackTrace();
request.setAttribute("msg","密碼錯誤");
}
return mapping.findForward("error");
}
}
~~~
### 5、建立struts-config.xml
作為Struts框架的核心描述,struts-config.xml可以說“一切盡在掌握”。它不但描述了MVC模型,定義所有視圖層和控制層之間的接口(ActionForm),與控制層和模型層的接口(Action)進行結合,而且可以定義一些附加組件,如國際化信息資源排至文件,標簽庫信息等。
仍然是站在巨人的肩膀上,將我們下載的struts ?bin文件夾中的struts-config.xml文件復制到我們的項目的WEB-INF中,刪除struts-config.xml中的注釋部分。把Action和ActionForm配置起來。ActionForm放到<form-beans></form-beans>中,Action配置放到<action-mappings></action-mappings>中,struts-config.xml配置代碼如下所示。
~~~
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration1.2//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
<struts-config>
<form-beans>
<form-bean name="loginForm" type="com.bjpowernode.struts.LoginActionForm"/>
</form-beans>
<action-mappings>
<action path="/login"
type="com.bjpowernode.struts.LoginAction"
name="loginForm"
scope="request"
>
<forward name="success" path="/login_success.jsp"/>
<forward name="error" path="/login_error.jsp"/>
</action>
</action-mappings>
</struts-config>
~~~
其中form-beans元素中可以定義0個或1個以上的form-bean元素,每個form-bean被認為是一個ActionForm對象,name屬性表示form-bean元素的名稱,type屬性指定其類名和路徑。
Action-mappings元素用來包含零到多個action,其子元素action負責具體映射的詳細信息。在action-mapping元素中可以定義0個或1個以上的action元素。每個action元素接受path屬性定義的請求,并映射到type屬性所定義的具體action對象。在映射過程中,將name屬性定義的actionform一并傳過去,它有如下屬性:
Parameter,scope兩個屬性指定了傳送方式和范圍,scope常用的值有兩個“session”和“request”。
Validate屬性指定了是否需要actionform的驗證。
Forward元素,將請求success轉發到”**/**login_success.jsp**”**頁面。
****
### 6、業務邏輯類UserManager和自定義異常類
代碼如下所示:
~~~
packagecom.bjpowernode.struts;
publicclassUserManager {
publicvoid login(Stringusername,Stringpassword)
{
if(!"admin".equals(username))
{
thrownewUserNotFoundException();
}
if(!"admin".equals(password))
{
thrownewPasswordErrorException();
}
}
}
~~~
自定義異常類UserNotFoundException和PasswordErrorException代碼如下所示。
~~~
packagecom.bjpowernode.struts;
public class UserNotFoundExceptionextends RuntimeException {
public UserNotFoundException() {
}
public UserNotFoundException(Stringmessage) {
super(message);
}
public UserNotFoundException(Throwable cause) {
super(cause);
}
public UserNotFoundException(Stringmessage,Throwable cause) {
super(message, cause);
}
}
packagecom.bjpowernode.struts;
public class PasswordErrorExceptionextends RuntimeException {
public PasswordErrorException() {
}
public PasswordErrorException(Stringmessage) {
super(message);
}
public PasswordErrorException(Throwable cause) {
super(cause);
}
public PasswordErrorException(Stringmessage,Throwable cause) {
super(message, cause);
}
}
~~~
### 7、視圖jsp頁面調用。
登錄界面login.jsp,錯誤顯示界面login_error.jsp,登錄成功界面login_success.jsp。代碼如下所示。
~~~
<%@pagelanguage="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPEhtml PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Inserttitle here</title>
</head>
<body>
<form action="login.do" method="post">
用戶:<inputtype="text" name="username"><Br>
密碼:<inputtype="password" name="password"></br>
<input type="submit" value="登錄">
</form>
</body>
</html>
~~~
Login_success.jsp.
~~~
<%@page language="java"contentType="text/html;charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
${username},登錄成功!
</body>
</html>
~~~
Login_error.jsp界面。
~~~
<%@page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
<%--
<%=request.getAttribute("msg") %>
--%>
${msg }
</body>
</html>
~~~
就這樣我們實現了運用struts框架完成用戶登錄。就這樣從初步學習到簡單應用,隨著應用的次數增多,我們會對struts理解越來越深刻,并且感受struts框架給我們帶來的便捷。
下一篇[Struts表單處理器ActionForm(靜態動態)](http://blog.csdn.net/lovesummerforever/article/details/18951649)
- 前言
- Struts旅程(一)Struts簡介和原理
- struts旅程(二)Struts登錄示例
- Struts旅程(三)Struts表單處理器ActionForm(靜態動態)
- Struts旅程(四)MVC向struts MVC框架演變過程
- Struts旅程(五)struts控制器DispatchAction
- Struts旅程(六)Struts頁面轉發控制ActionForward和ActionMapping
- Hibernate旅程(一)Hibernate架構概述
- Hibernate旅程(二)Hibernate實例
- Hibernate旅程(三)Hibernate持久化對象的三個狀態
- Hibernate旅程(四)Hibernate對數據庫刪除、查找、更新操作
- Hibernate旅程(五)Hibernate映射--基本類映射和對象關系映射
- Hibernate旅程(六)Hibernate映射--繼承映射
- Hibernate旅程(七)Hibernate緩存機制--一級緩存
- Hibernate旅程(八)Hibernate緩存機制--二級緩存
- Hibernate旅程(九)Hibernate緩存機制--查詢緩存
- Spring旅程(一)為什么使用Spring
- Spring旅程(二)非Spring向Spring過渡-- Spring IOC容器的使用
- Spring旅程(三) AOP--Spring AOP容器基礎
- Spring旅程(四) AOP--Spring AOP實例
- SSH旅程(五)Spring運用到Hibernate中
- SSH旅程(六)Spring和struts結合(方案一)