Struts入门(一)

 Jakarta Struts Framework 是一个开放源代码的 Apache 项目,由 Craig R. McClanahan 于 2000 年创建,并捐赠给了 Apache 基金会,已经成为基于 Java Servlet 和 Java Server Page (JSP)技术构建 Web 应用程序的最流行的框架包。 Craig 编写了 Tomcat4 实现的大部分内容,同时他还是 JCP 的资深成员,负责 Servlet 和 JSP 规范的制定。

     Struts 是一个基于模型 (Model) -视图 (View) -控制器 (Controller)(MVC) 模式的应用架构的开源框架。如果您开发过大型 Web 应用程序,您就理解变化这个词的含义。“模型 - 视图 - 控制器” (MVC) 就是用来帮助您控制变化的一种设计模式。 MVC 减弱了业务逻辑接口和数据接口之间的耦合。

     JSP 页面中可以非常容易地结合业务逻辑 (jsp:useBean) 、服务端处理过程( jsp:scriplet )和 HTML(<html>) ,在 JSP 页面中同时实现显示,业务逻辑和流程控制,从而可以快速地完成应用开发。现在很多的 Web 应用就是由一组 JSP 页面构成的。这种以 JSP 为中心的开发模型我们可以称之为 Model 1 。当然这种开发模式在进行快速和小规模的应用开发时,是有非常大的优势,但是从工程化的角度考虑,它也有一些不足之处,主要在于不方便应用扩展,以及不利 于应用系统业务的重用和改动。考虑到这些问题在开发大型的 Web 应用时必须采用不同的设计模式——这就是 Model2 。

     Model 2 表示的是基于 MVC 模式的框架。 "Model" 代表的是应用的业务逻辑(通过 JavaBean , EJB 组件实现), "View" 是应用的表示面(由 JSP 页面产生), "Controller" 是提供应用的处理过程控制(一般是一个 Servlet ),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现,这些组件可以进行交互和重用。 Model 2 具有组件化的优点从而更易于实现对大规模系统的开发和管理。

     Struts 是一组相互协作的类、 Servlet 和 JSP 标记,它们组成一个可重用的 MVC 2 设计。这个定义表示 Struts 是一个框架,而不是一个库,但 Struts 也包含了丰富的标记库和独立于该框架工作的实用程序类库。 Struts 利用 taglib 获得可重用代码和抽象 Java 代码,利用 ActionServlet 配合 Struts-config.xml 实现对整个系统导航。增强了开发人员对系统的整体把握,提高了系统的可维护性和可扩充性。

     Struts 是一个 Web Framework ,常见的 B/S Web Framework 如下:

     Struts :主要关注于 Controller 流程,基于 JSP与 Taglib 实现的 View 。

     Cocoon :用于处理 XML 的框架,将 XML 作为 View 并可以良好结合 XSLT 。

     Spring :这是一个服务于所有层面的 Application Framework ,提供了 bean 的配置基础, AOP 的支持, JDBC 的提

              取框架,抽象事务支持等。它有一个非常显著的特点:在某个层面上如果你不需要 Spring 的支持,你就可以

              不使用 String 的 class ,只使用它的某一部分的功能。

     JSF :JavaServerFaces ,严格意义上讲,它并不算是 Framework ,但 JSF 同样提供了一种不同的 View 生成方式。

                它可以和多种 Framework 整合。在 J2EE1.4 中, JSP2.0 规范就包含了 JSF 标准。

     Framework 有很多种, Struts 并不是我们唯一的选择。我们可以根据具体的项目来选择不同的 Framework 。 Struts 之所以如此流行,其主要原因是它推出时间比较早,版本较稳定,并且是 MVC 及 core J2EE patterns 的标准实现。

     Struts 师出名门,拥有诸多优点,其中最关键的一点就是简单易用,这也是正他迅速普及,越来越流行的根本原因。与其同时代的 Tubine 、 Cocoon 等,都可以作为 Web 框架,功能也很强大,但使用起来过于复杂,一直难以流行。作为一名普通的 Java 开发者,只要稍具 JSP 开发水平,都可以在一周左右的时间内,基本学会 Struts 。

     Struts 还提供了丰富的 Taglib ,熟练用之,将节省大量的开发时间。

     Struts 具有良好的页面导航功能,开发者可以通过一个名为 struts-config.xml 的文件,把握整个系统各部分之间的联系,这对于后期维护有着莫大的帮助,尤其是当另一批开发者接手该项目时,这种优势体现得更加明显。

     当然, Struts 也有一些不足之处。对于很大的项目,当 struts-config.xml 越来越庞大时,维护也就变得越来越复杂,甚至需要专人负责(对于这种维护情况,建议采用专门的维护工具,如 Struts Console )。另外, Struts 框架主要是针对表示层设计的,对于后端的逻辑层支持不是很强。

     将来的发展趋势,很有可能是 JSF+Struts+Spring+Hibernate/JDO 的开发模式,建议你从 Struts 入手。 

话不多说开始入门


web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>StrutsDemo</display-name>
  
  <!-- struts2框架的核心控制器,用户对本程序的所有请求都先交给 StrutsPrepareAndExecuteFilter核心控制器进行处理
  		核心控制器就是根据struts.xml的文件来决定具体使用什么业务逻辑控制器处理本次请求
  -->
  	<filter>
  		<filter-name>struts</filter-name>
  		<filter-class>
  		org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  		</filter-class>
  	</filter>
  	
  	<filter-mapping>
  		<filter-name>struts</filter-name>
  		<!-- 表示接收所有请求 -->
  		<url-pattern>/*</url-pattern>
  	</filter-mapping>
  
  
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
</web-app>

这个是struts的模块配置,他被struts.xml   include放进模块 hr-user.xml,很多公司都是模块式开发,所以我也用模块是开发

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
	<package name="hr" extends="struts-default" namespace="/">
		<action name="user" class="org.heinrich.action.UserAction">
			<result name="success">/success.jsp</result>
		</action>
	</package>
</struts>

这个是struts的全局配置,在这个xml中的所有配置,在其他的模块中都可以用相当于定义了全局变量,在其他模块中的就是局部变量

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
	<!-- 在struts.xml文件中通常是配置一下模块的引入配置和公共配置 
		 公共的常量配置可以参考struts2-core-2.3.15.1.jar中的default.properties文件中配置
	-->
	<!-- 配置本项目允许的请求后缀 -->
	<constant name="struts.action.extension" value="action,do,,"/>
	<!-- 配置本工程是开发模式(会热部署) -->
	<constant name="struts.devMode" value="true"/>
	<!-- 开启动态方法调用,默认是开启状态 -->
	<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
	 
	<!-- 为了方便团队分模块开发,通常建议将不同的模块的包(package)对应的单独的文件中
		然后使用include 标签导入的struts.xml文件中
	 -->
	<include file="hr-user.xml"/>
</struts>

UserAction  的配置

package org.heinrich.action;

import org.heinrich.dao.UserDao;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {

	private static final long serialVersionUID = 6161139006224338587L;
	private String key;
	private String value;

	public String add() {

		System.out.println("I am reading Book about Linux");

		UserDao userDao = new UserDao();
		userDao.add(key, value);
		return "success";
	}

	public String delete() {

		System.out.println("I am reading Book about Linux");

		UserDao userDao = new UserDao();
		userDao.delete(key);
		return "success";
	}

	public String update() {

		System.out.println("I am reading Book about Linux");

		UserDao userDao = new UserDao();
		userDao.update(key, value);
		return "success";
	}

	public String get() {

		System.out.println("I am reading Book about Linux");

		UserDao userDao = new UserDao();
		String name = userDao.get(key);
		System.out.println(name);
		return "success";
	}

	public String getKey() {
		return key;
	}

	public void setKey(String key) {
		this.key = key;
	}

	public String getValue() {
		return value;
	}

	public void setValue(String value) {
		this.value = value;
	}

}

定义了CURD四个方法,所有方法都采用

http://localhost:8080/Struts/user!add?key="color"&value="bule"

http://localhost:8080/Struts/user!delete?key="null"

http://localhost:8080/Struts/user!update?key="color"&value="red"

http://localhost:8080/Struts/user!update?key="color"

这种模式进行访问,这样可以省去很多代码,当然你也可以有其他的方式,比如动态方法调用,那样需要修改局部的hr-user.xml的代码

现在我配置给大家看
http://localhost:8080/Struts/user_add?key="color"&value="bule"
http://localhost:8080/Struts/user_delete?key="null"
http://localhost:8080/Struts/user_update?key="color"&value="red"
http://localhost:8080/Struts/user_update?key="color"

hr-user.xml的配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="hr" extends="struts-default" namespace="/">
<action name="user_*" class="org.heinrich.action.UserAction" method="{1}">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>

其实还有很多中配置方式,最简单的方式就是

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
	<package name="hr" extends="struts-default" namespace="/">
		
		<action name="add" class="org.heinrich.action.UserAction" method="add">
			<result name="success">/success.jsp</result>
		</action>
		<action name="delete" class="org.heinrich.action.UserAction" method="delete">
			<result name="success">/success.jsp</result>
		</action>
		<action name="update" class="org.heinrich.action.UserAction" method="update">
			<result name="success">/success.jsp</result>
		</action>
		<action name="get" class="org.heinrich.action.UserAction" method="get">
			<result name="success">/success.jsp</result>
		</action>
	</package>
</struts>

请求URL是

http://localhost:8080/Struts/add?key="color"&value="bule"
http://localhost:8080/Struts/delete?key="null"
http://localhost:8080/Struts/update?key="color"&value="red"
http://localhost:8080/Struts/update?key="color"


这个看起来是不是很多,但是他是最简单的,每个方法对应一个action,所以说公司很多都是用第一种或者第二种

下次我会写关于Struts2怎么接收请求参数,和获取Request的几个方式,和Struts2底层运行的情况,带大家Review一次源代码,

求关注,求转发



你可能感兴趣的:(Struts入门(一))