`

struts2笔记(一):入门实例

阅读更多

一、准备工作及实例

1.解压struts-2.1.6-all.zip

apps目录:struts2自带的例子程序
docs
目录:官方文档。

lib 目录:存放所有jar文件。

Src 目录:源文件存放地

2.六个基本包

struts2-core-2.1.6.jar
freemarker-2.3.13.jar
commons-logging-1.0.4.jar
ognl-2.6.11.jar
xwork-2.1.2.jar
commons-fileupload-1.2.1.jar

特别需要说明的是目前strust2的最新版本是struts-2.1.6(现在已不是了,它作为2.1X的正式版。特别要注意导入commons-fileupload-1.2.1.jar包,在此jar包中包含了RequestContext类,如果不导入该jar包将会报异常。

3.初识struts2配置文件

1).web.xml文件

主要完成对StrutsPrepareAndExecuteFilter的配置(在以前的版本中是对FilterDispatcher配置,新版本同样支持用FilterDispatcher配置),它的实质是一个过滤器,它负责初始化整个Struts框架并且处理所有的请求。这个过滤器可以包括一些初始化参数,有的参数指定了要加载哪些额外的xml配置文件,还有的会影响struts框架的行为。除了StrutsPrepareAndExecuteFilter外,Struts还提供了一个ActionContexCleanUp类,它的主要任务是当有其它一些过滤器要访问一个初始化好了的struts框架的时候,负责处理一些特殊的清除任务。

2).struts.xml文件

框架的核心配置文件就是这个默认的struts.xml文件,在这个默认的配置文件里面我们可以根据需要再包括其它一些配置文件。在通常的应用开发中,我们可能想为每个不同的模块单独配置一个struts.xml文件,这样也利于管理和维护。这也是我们要配置的主要文件。

3).struts.properties(参default.properties

Struts框架使用了很多属性,我们可以通过改变这些属性来满足我们的需求。要改变这些属性,只需在struts.properties文件中指定属性的keyvalue即可。属性文件可以放在任何一个包含在classpath中的路径上,但是通常我们都把它放在/WEB-INF/classes目录下面。我们可以在struts-default.properties文件中找到一个属性的列表。

4struts-default.xml

此文件是struts2框架默认加载的配置文件,它定义了struts2一些核心bean和拦截器,它会自动包含(included)struts.xml文件中(实质是通过<package  extends="struts-default">),并为我们提供了一些标准的配置。我们可以在struts2-core.jar中找到这个文件。

5)其它配置文件

velocity.propertiesstruts-default.vmstruts-plugin.xml

4.MyEclipse提示xml信息

当我们在编写struts.xml时,发现eclipse并不会给出帮助提示,那是因为MyEclipse默认并不支持struts2,所以我们需要手工导入dtd以支持提示。步骤:[window][preferences][MyEclipse][Files and Editors][XML][xml Catelog]然后在右边点add添加:locationdtd文件所在的位置(struts-2.0.dtd文件struts2-core-2.1.6.jar中可以得到),KeyType选择URIKeystruts-2.0.dtd文件中文档声明的内容(http://struts.apache.org/dtds/struts-2.0.dtd),在struts.xml文件中也有此key值。

5.如何使用alt+/提示

MyEclipse6.5,默认的提示为Ctrl+Space,而它会与我们的输入法切换冲突,使提示失效。找到key,先取消Content Assist命令的绑定,再用“alt+/”来绑定。

6.实例

步骤一,新建myStruts2项目,并导入struts2的六个基本jar包。
步骤二,建立LoginAction文件,主要代码如下:

package com.asm;
import com.opensymphony.xwork2.Action;
public class LoginAction implements Action {
	private String username;
	private String password;
...省略get/set方法

	public String execute() throws Exception {
		if (username.equals("struts2")) {
			return "loginSuccess";
		} else {
			return "loginFailure";
		}
	}
}

 

说明:实现了Action接口,主要是为了保证execute的正确定义,其实我们也可以不实现此接口,只要能保证execute方法书写的正确书写(方法名,返回值)。

步骤三,在struts.xml文件中注册LoginAction。此配置文件要放在src目录下,实质就是成为classpath环境变量下的文件。主要代码如下:

<?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="myFirst" namespace="/" extends="struts-default">
		<action name="login" class="com.asm.LoginAction">
			<result name="loginSuccess">/success.jsp</result>
			<result name="loginFailure">/failure.jsp</result>
		</action>
	</package>
</struts>

 

说明package后面会有详细说明。action元素中的name属性值指定了此action所指定的请求路径为“login.action”。后面login.jsp中的<form action=...>属性值就会参照此name属性。

步骤四、提供jsp页面
login.jsp
主要代码

<body>
		<form action="<%=request.getContextPath()%>/login.action" method="get">
		户名:<input type="text" name="username"><br>
		密码:<input type="password" name="password"><br>
		<input type="submit" value="login">
		</form>
</body>

  

failure.jsp主要代码

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
	<body>
		登录失败,错误的用户名:<s:property value="username"/><br>
		<a href="<%=request.getContextPath()%>/login.jsp">返回</a>
	</body>
</html>

 

说明:使用了标签库,在struts2中使用标签库非常简单,只需要像上面那样导入标签库便可以使用所有的struts2的所有标签

success.jsp主要代码

<body> 登录成功!</body>

步骤五、配置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.FilterDispatcher</filter-class>
		-->
		<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>
</web-app>

 

说明:注释掉的部分为以前2.1.4版本中用的核心filter类。

步骤六、发布测试。
简要分析执行流程
当输入.../login.jsp访问jsp页面填写完相关信息并提交给login.action时,它会首先被在web.xml中配置的过滤器监听到,过滤器会去查找strust.xml文件,并结合namespace查找名为loginaction,查找到此action便交给其处理,LoginAction内部会执行execute方法,并返回结果resultresult也是参照的struts.xmlaction下的result配置)。 关于表单传参,主要是参照的action中的方法名,而非属性名。

7.开启struts2自带的开发模式常量

在以前的开发中,当修改一些配置时总是不能及时地更新到服务器,我们总会重新部署或重启来更新改变的内容,在struts2中可以通过一个常量来达到此目的。即在struts.xml中的<struts>元素下增加如下内容:<constant name="struts.devMode" value="true"></constant>  这样配置后,当配置文件修改保存时就会及时更新到服务器中。

 

8.vo传参模式

Copy上面的myStruts2项目,改名为myStruts2Vo项目。作如下修改:在LoginAction中有两个字段:username,password。把此两个属性重构到com.asm.vo.User类中,然后在LoginAction中提供User对象及相应的get/set方法。现在需要注意的是在login.jsp中会有如下的修改:

户名:<input type="text" name="user.username"><br>

密码:<input type="password" name="user.password"><br>

关键就是改掉name属性值。其它基本无变动。 后话:假如此此User对象并不能和Model层的相应对象完全对应,我们还应借助此User对象在Action中构建出Model层的相应对象,这样,在exectue方法中便能通过构建的Model对象作为参数与Model层交互。

 

9.ModerDriven传参模式

Copy上面的myStruts2Vo项目,改名为myStruts2Model项目。重点是修改LoginAction,修改后的主要内容如下:

package com.asm;

import com.asm.vo.User;

import com.opensymphony.xwork2.Action;

import com.opensymphony.xwork2.ModelDriven;

public class LoginAction implements Action, ModelDriven<User> {

    private User user = new User();

    public String execute() throws Exception {

       if (user.getUsername().equals("struts2")) {

           return "loginSuccess";

       } else {

           return "loginFailure";

       }

    }

    public User getModel() {

       return user;

    }

}

 

说明:它实现了ModelDriven接口,并使用了泛性机制(必须),因此要求jdk1.5以上。
现在需要注意的是在login.jspname属性值为User中两个字段,和第一个实例一样。说明:此方式一般不会使用,在此略作了解。

 

分享到:
评论
1 楼 signs228 2010-06-24  
期待笔记的出现,呵呵

相关推荐

    一个Spring的入门实例;一个Struts的入门实例

    一个Spring的入门实例;一个Struts的入门实例:超初级,入门用的,高手莫看

    Struts1.3 备忘笔记

    Struts 1.3 备忘笔记 【资源特点】 1、以项目形式组织,包含所有的源代码 2、内含详细的注释说明 3、知识点较全面 【内容目录】 01 Struts_01HandworkApply : 手工配置Struct应用程序,演示用户提交数据后服务器的...

    struts2_入门实例

    struts2_入门实例struts2_入门实例struts2_入门实例struts2_入门实例struts2_入门实例

    struts2 的一个实例

    struts2 的一个实例struts2 的一个实例struts2 的一个实例struts2 的一个实例

    struts2入门实例教程详解

    ( struts2入门实例教程详解.docx )

    struts2 学习重点笔记

    这是学习struts2时记得重点笔记,包括了一些原理,ognl语句的编写,以及如何设置拦截器等等一些基本知识,起到复习和巩固的作用

    struts2学习笔记(完美总结)——转自OPEN经验库

    struts2学习笔记,非本人所写,但有学习的价值,总结的很好,分享一个!

    struts2登录实例

    struts2登录实例struts2登录实例struts2登录实例struts2登录实例struts2登录实例struts2登录实例struts2登录实例

    黑马程序员Struts2笔记

    黑马程序员Struts2笔记,包括前两天的内容,不包括源码,只是笔记文档

    Struts2项目开发流程简明实例

     此实例只适合对Struts2不了解的初学者. 工具:Eclipse+Tomcat 技术:Jsp,Struts2 步骤: 1. 创建web项目 2. 项目添加Struts2类包支持 3. 设置核心控制器(配置web.xml) 4. 创建业务逻辑控制器(Action) 5. 创建...

    struts2笔记

    struts2笔记

    Struts2 增删改查实例

    一个简单的Struts2 增删改查实例,适合Struts2入门者,简单易懂

    spring+struts+hibernate(简单入门实例)

    spring+struts+hibernate(简单入门实例)完成了数据库的添加……操作!

    struts2入门实例和工作(流程)原理

    struts2入门实例和工作(流程)原理struts2入门实例和工作(流程)原理struts2入门实例和工作(流程)原理struts2入门实例和工作(流程)原理

    struts2入门实例1

    struts2 最新的入门实例 我自己总结的 呵呵,欢迎提出宝贵的意见 1.Struts2_01_login 对应登录。。 login.jsp---------------------------------------html标签的登陆页面 login_struts2.jsp--------------...

    struts2实例struts2实例

    struts2实例struts2实例struts2实例struts2实例struts2实例struts2实例struts2实例struts2实例struts2实例struts2实例struts2实例struts2实例struts2实例struts2实例struts2实例struts2实例

    Struts 2 权威指南:基于WebWork核心的MVC开发 光盘

    本书所介绍的Struts 2已经完全超出了Struts 1框架原有的高度,Struts 2建立在Struts 1...本书既给出Struts 2入门级的示范实例,也详细讲解了Struts 2各个知识点、各个选项的详细用法,可以作为Struts 2框架的权威参考。

    struts2.0一个简单的入门实例

    struts2.0一个简单的入门实例 绝对让你初步了解struts2.0 了解初步配置 了解配置的步骤

    struts2课程笔记

    struts2知识点:处理流程,基本配置,与servlet的API解耦,结果类型,通配符和动态方法的调用,类型转换,文件上传,拦截器,表单验证,国际化,OGNL表达式,UI标签,模型驱动,防止表单重复提交,项目练习知识点:...

    Struts2笔记,看完一遍,保证你学会Struts2,最权威的笔记!!!

    Struts2笔记 本人工作中积累的,故做成笔记以供大家一起学习进步. 模块分的非常详细,各个细节都会关注到,只挑选其精华,工作中用得到的技术!!! 不要看资源小,起到的作用却非常大!!!

Global site tag (gtag.js) - Google Analytics