javaweb——Struts

前言

這一篇主要講Struts,這是在Servlet之後框架上的一次改變,上一篇文章講過了Servlet的一些不足之處,因此Struts對原有的方式進行的改善。這裏需要指出的是Struts本身可以看做一個Servlet,Servlet是原材料,應用Struts只是給了一個規範使得製作的速度更快,更易維護,這裏我們主要講Struts2的相關內容。

struts的工作流程

Struts中引入了mvc的思想,這個具體體現在各部分的耦合度更低,分工更加明確。在Struts中用戶請求首先會被Struts攔截分發器進行攔截,對獲取的請求會進行分析,找出想要到達的action,這裏的action在Struts中被稱爲控制器,action的execute方法會被自動執行,開始後臺一系列處理操作的入口。在這個方法中我們可能會做很多事情,業務的處理、數據庫的操作,這裏action只是起到了一個調度作用,不會再這裏進行大量邏輯的書寫,具體的業務會由相應的業務邏輯模塊進行處理。當處理完成後,在execute方法中返回一個標準字符串,在Struts.xml配置文件中會找到字符串的映射頁面。下圖是Struts的整個處理過程


可以看出Struts是通過攔截器獲取用戶請求,action作爲整個Struts的核心部分,配合struts.xml對請求作出處理和響應。

創建Struts項目

這裏我們通過一個登錄的小例子來演示Struts的過程。在eclipse中新建Dynamic Web project,在WEB-INF的lib文件夾引入Struts包

並在WEB-INF下建立web.xml文件,文件配置如下:
<?xml version="1.0" encoding="UTF-8"?>  
<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
	<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>
	<welcome-file-list>
		<welcome-file>login.jsp</welcome-file>
	</welcome-file-list>
</web-app>


創建登錄action:LoginAction
package com.struts.example;

import com.opensymphony.xwork2.ActionSupport;

/**
* @author zhaoshaopeng
* @version 創建時間:2017年9月7日 上午9:39:25
* 類說明
*/
public class LoginAction extends ActionSupport {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public String name;
	public String password;
	public String execute() throws Exception  
    {  
        if (name!=null&&password!=null) {
        	return "success"; 
		}
        return "error";
    } 

}





在Struts2中接收參數可以直接通過在action中定義同名變量來接受,這點需要了解。接下來需要創建struts.xml,在eclipse中需要首先進行配置,這裏引用別人的一個配置過程,謝謝作者:
創建好了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>
	<package name="struts" extends="struts-default">  
		<action name="login" class="com.struts.example.LoginAction">  
			<result name="success">/success.jsp</result>  
			<result name="error">/login.jsp</result>  
		</action>  
	</package>  
</struts>

這裏需要注意的是package的entends不能寫錯,注意大小寫。頁面部分就很簡單了,知識用作演示: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>login</title>
</head>
<body>
	<form action="login" method="post">
		<div><span>姓名:</span><input name="name" type="text" /></div>
		<div><span>密碼:</span><input name="password" type="text" /></div>
		<div><input type="submit"></div>
	</form>
</body>
</html>


這裏form表單的action引用的是struts.xml中的註冊的action名稱,不是真正類的名稱。到這裏我們的一個Struts小工程就創建好了。

分析與思考

通過上面的講述我們可以發現Struts在構建web工程時的好處還是很明顯的,首先它改變了Servlet+jsp存在的編程隨意風格,使得在整個項目上更加的有條理性,邏輯處理的入口放在了action中,後續的業務邏輯可以擴展出Dao層,Service層等,處理完了邏輯部分後頁面的跳轉統一放在了struts.xml中處理,這無疑給以後的項目管理提供了更好的方式。
說到Struts更多是和Spring和Hibernate結合在一起的,也稱爲SSH框架,這些框架的引入無論是從效率還是結構上都對項目構建有很大的提升,其中很重要的一點就是爲了降低耦合性,由此可見爲了解耦人們想了很多的方式,在後續的框架中我們也會看到爲了解耦所做出的改變,這也提醒我們在日常寫代碼中時刻去注意這個問題。




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