08 00Struts 2.x基础

1 Struts 2.x简介

前提:Struts 1.x和Struts 2.x没有任何的关系,属于两个独立的版本。那么为什么会出现两个独立的版本呢?主要的原因还是在于Struts 1.x的设计结构上。在成名的MVC开发框架里面,Struts是最早出现的,但是由于最初的设计环境没有考虑到这么复杂,所以来讲到了今天与其它框架的整合会出现非常麻烦的问题,而且也存在有性能问题,同时自己本身的设计结构也出现了混乱,例如:如果要想使用验证框架(无用)那么必须使用第三方扩展包的形式,或者说如果要将对象与实例交由Spring管理,那么也需要以插件的形式出现。

这种种的一切几乎都在暗示着,Struts 1.x无法胜任于今天的开发,但是这个时候Apache也并没有开发Struts 2.x。任何事物的发展都是相生相克的。Struts 1.x发展带了框架的繁荣,那么繁荣之后,在某一个“角落”里面慢慢生长出一个新的框架——WebWork(ww),最早在整个Java行业里面有一个特别著名的开源项目——JIVE论坛,它融合了一个很有意思的特点——使用当前最新的开发技术,而WebWork就正好应用在此处,而后随着Struts 1.x的缺陷越来越明显,那么WebWork的优势越来越突出,长此以往下去,Struts 1.x已经丢失了大量的开发者,很多的开发者都转向了WebWork,它比Struts 1.x优秀在于以下几点:
(1)避免了Struts 1.x之中ActionForm类与Action类必须同时存在的窘境。
(2)在WebWork发展的时候考虑到了与第三方框架的整合,所以它可以轻松的实现与Spring的整合;
(3)WebWork的·配置更加的灵活;
(4)在验证框架部分要比Struts 1.x更加容易(这个也没什么用)。

在2005年的时候,Apache收购了WebWork项目,因为WebWork足够好用,但是没有Struts的名气大,而Struts 1.x本身问题很多,那么需要重新开发,所以Struts 1.x的名气+WebWork的实干=Struts 2.x,而在收购初期,Struts 2.x并没有对WebWork做更多的修改,但是千万要记住从2005年开始JDK 1.5出现了,而JDK 1.5出现所带来的行业内容的巨大的变革在于Annotation的技术应用,在Struts 2.x里面全面支持Annotation的配置以简化程序的编写。

Struts 2.x的基础是WebWork,但是请千万要记住一件事情,WebWork的起源也很早,只不过它凭借着自己超前的结构设计,才可以在今天继续发挥预热,但是Struts 1.x、Struts 2.x、JSF等等,现在随着时间的沉淀,会发现依然不如SpringMVC的设计更加优秀。

所有的框架设计思想只来源一点——反射机制,如果再有其它的核心技术也就是XML+DOM4J。

2 开发第一个Struts 2.x程序(搭建开发环境)

如果要想开发Struts 2.x的话最早的时候是没有开发工具的,从MyEclipse2012开始就支持了Struts 2.x开发,可以直接利用此工具自动进行Struts 2.x开发包的配置。
1、建立一个新的项目——MyStruts2Project
建立的时候一定要建立web.xml文件,因为几乎所有的MVC开发框架都必须有Servlet的支持或者是Filter支持,而Struts 1.x使用的是一个ActionServlet,在Struts 2.x里面使用的是一个Filter。所以考虑到配置问题必须生成web.xml。

2、框架的开发一定是一堆jar文件的配置过程
|——随后会询问你当前要使用的Struts 2.x版本。
|——Struts 1.x有一个特别著名的标志那么就是*.do,所以当Apache将WebWork项目吸收进来之后,那么也提供了多种映射路径,当然,我们现在认为最合适的路径应该使用的是*.action
|——随后将进入到开发包的配置界面;
|——那么此时Struts 2.x的开发环境就搭建完成了。

3 开发第一个Struts 2.x程序(编写ECHO程序)

1、项目建立完成之后会自动在src目录之中建立一个struts.xml文件,这个文件就是struts 2.x的核心配置文件。同时也会在web.xml文件中增加如下配置:

<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>*.action</url-pattern>
  </filter-mapping>

Struts 2.x的所有的处理操作都由过滤器完成的。
2、本次将完成一个ECHO程序,即:由用户在文本框中输入一段文字,而后在文字前增加“ECHO:”的信息返回到页面上进行显示。
范例:开发EchoAction
(1)所有的Struts 2.x应用程序都要求继承自ActionSupport父类。

package org.lks.action;

import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class EchoAction extends ActionSupport {
   
	private String msg;

	public String getMsg() {
   
		return msg;
	}

	public void setMsg(String msg) {
   
		this.msg = msg;
	}
	
	@Override
	public String execute() throws Exception {
     //执行操作
		this.msg = "ECHO: " + this.msg;
		return "echo.page";  //返回路径的映射的key
	}
}

那么现在控制器就完成了。
3、所有的程序都一定要在struts.xml文件里面进行配置。
范例:修改struts.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<!-- 所有的Struts 2.x程序都要求设置命名空间 -->
	<package name="root" namespace="/" extends="struts-default"></package>
</struts>    

在此程序之中<package>主要定义页面的可执行路径,如果设置为/(namespace="/"),那么就表示映射到根路径下,但是在配置文件里面有一些是需要父配置文件给予的支持(例如:自动赋值、数据转换等),所以使用extends继承一个父的配置文件(extends=“struts-default”)。每一个<package>下具有多个<action>的设置。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<!-- 所有的Struts 2.x程序都要求设置命名空间 -->
	<package name="root" namespace="/" extends="struts-default">
		<!-- 配置程序所需要的Action的名称以及对应的类型 -->
		<action name="EchoAction" class="org.lks.action.EchoAction">
			<!-- 定义跳转路径 -->
			<result name="echo.page">echo.jsp</result>
		</action>
	</package>
</struts>    

那么此时Struts 2.x的Action配置完成。
4、在根路径下开发echo.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
  <head>
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值