SSH學習之Struts1入門的簡單登陸案例。

上一篇將博客將環境搭建起來了。

這篇博客將開始Struts1的基礎學習。


1.先了解Struts1的工作流程:

服務器啓動後,根據web.xml加載ActionServlet讀取struts-config.xml文件內容到內存

以登錄爲例:第一次進login.jsp會先實例化Form、把默認值賦給表單元素。
輸入用戶名密碼提交表單、提交到action屬性的login.action,通過ActionServlet讀struts-config.xml文件找到 action下的path屬性找到.action,通過name屬性找form-beans中的form-bean的name屬性得到ActionForm的包名類名,先實例化form,把表單的值填充給form,調用form的validate方法驗證、ActionErrors返回null表示驗證通過,否則失敗返回input指定的頁面.驗證通過會實例化Action,執行Action的execute方法。


2.Action, ActionForm, ActionForward ,這三個對象構成了Struts 的核心。

 Struts 最核心的控制器是ActionServlet ,該Servlet 攔截用戶請求,井將用戶請求轉入到Struts 體系內。


3.在web.xml中添加配置:

<servlet>
		<!-- ActionServlet 的名 -->
		<servlet-name>action</servlet-name>
		<!-- 配置Servlet 的實現類 -->
		<servlet-class>
			org.apache.struts.action.ActionServlet
		</servlet-class>
		<!-- 指定Struts 的第一個配置文件 -->
		<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>

		<!-- 將ActionServlet配置成自啓動Servlet -->
		<load-on-startup>2</load-on-startup>

	</servlet>
	<servlet-mapping>
		<servlet-name>action</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>

4.實現和配置ActionForm:

ActionForm必須繼承Struts提供的ActionForm基類,該類只是一個簡單的JavaBean,包含每個屬性的get,set方法。

*屬性名要與表單中的的name相同。

①實現:

@SuppressWarnings("serial")
public class LoginActionForm extends ActionForm{

	private String userName;
	private String pswd;
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPswd() {
		return pswd;
	}
	public void setPswd(String pswd) {
		this.pswd = pswd;
	}
	
}

②配置:新建web.xml文件中指定的struts-config.xml配置文件,並添加<form-beans>屬性

<struts-config>
	<form-beans>
		<!-- 定義ActionForm,至少指定兩個屬性: name(自定義) , type LoginActionForm的路徑 -->
		<form-bean name="loginActionForm" type="com.example.LoginActionForm" />
	</form-beans>
</struts-config>


5.實現和配置Action:

繼承struts提供的Action基類,實現ActionFoward類型的execute方法,返回一個ActionMapping的forward  url。

Action是線程不安全的,因爲所有的請求共享一個action實例。


①實現:

public class LoginAction extends Action {

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		LoginActionForm lForm = (LoginActionForm) form;
		String userName = lForm.getUserName();
		String pswd = lForm.getPswd();
		if (userName.equals("") || pswd.equals("") || pswd == null
				|| userName == null) {
			userName = "admin";
			pswd = "admin";
		}
		if ("admin".equals(userName) && "admin".equals(pswd)) {
			return mapping.findForward("welcome");
		}

		return mapping.findForward("error");

	}
}
②配置:

<struts-config>
	
	<!-- path:定義的路徑;type:Action的路徑;name:<form-beans>中定義的name,scope範圍 -->
	<action-mappings>
		<action path="/login" type="com.example.LoginAction" name="loginActionForm"
			scope="request">
			<!-- 配置局部Forward -->
			<forward name="welcome" path="/index.jsp" />
			<forward name="input" path="/login.jsp" />
		</action>
		
	</action-mappings>
</struts-config>

6.配置forward,包含全局forward和局部forward的2種,局部如上所示,name是execute將要forward的url。

redirect:控制轉發還是重定向。默認false 轉發:RequestDispatch.forward,true重定向:HttpServletResponse.sendRedirects
全局forward:

<!--配置全局Forward對象 -->
	<global-forwards>
		<!--該Forward對象的name 屬性爲error. 映射資源爲/WEB-INF/jsp/error.jsp -->
		<forward name="error" path="/error.jsp" />
	</global-forwards>

7.整個struts-config.xml屬性:

<?xml version="1.0" encoding="UTF-8"?>
<!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>
		<!-- 定義ActionForm,至少指定兩個屬性: name(自定義) , type 路徑 -->
		<form-bean name="loginActionForm" type="com.example.LoginActionForm" />
	</form-beans>
	<!--配置全局Forward對象 -->
	<global-forwards>
		<!--該Forward對象的name 屬性爲error. 映射資源爲/WEB-INF/jsp/error.jsp -->
		<forward name="error" path="/error.jsp" />
	</global-forwards>
	<!-- path:定義的路徑;type:Action的路徑;name:<form-beans>中定義的name,scope範圍 -->
	<action-mappings>
		<action path="/login" type="com.example.LoginAction" name="loginActionForm"
			scope="request">
			<!-- 配置局部Forward -->
			<forward name="welcome" path="/index.jsp" />
			<forward name="input" path="/login.jsp" />
		</action>
		
	</action-mappings>
</struts-config>

8.login.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
 	<form action="login.do" method="post">
 	 <p>用戶名:</p><input name="userName" type="text"/><br>
 	 <p>密碼:</p><input name="pswd" type="password"/> <br>
 	 <input type="submit" value="登陸"  />
 	</form>
</body>
</html>




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章