初识 Struts2 (HelloWorld)

  早在学校的时候,我就对 J2EE 感兴趣,但是那时水平有限,也没人教,所以一直没入门。那时只学了 Html、JavaScript 之类最基本的东西的。现在出来做 Android 开发快两年了,近期的项目也做得差不多了,终于有点时间来学习一下 J2EE 了,哈哈。首先要学当然是 Struts2 啦!
  这篇文章是翻译过来的,当然在翻译前我有在看 Struts2 一两周的时间了。通过本文你可以学习到:
    * 如何创建 Struts2 项目
    * 如何使用 Flow 编辑器创建 components
    * 如何部署(deploy)和测试 application

1. Create a Struts 2 Project

1. 选择File>New>Web Project。Project name 就定为  MyBlogStruts2Example 吧,然后点击完成。
注意:此案例是基于 JavaEE6 的,当然你在创建 Project 的时候也可以选择 JavaEE7。


2. 右击创建好的 project,选择 MyEclipse>Project Facets>Install Appache Struts(2.x) Facet。
3. 其它的设置就用默认的就好了,然后点击完成。


  Struts2 项目的目录结构如下图所示。默认条件下,Struts2 的核心 Libraries Classpath container 已经被添加到项目了。当然你也可以在 wizard(创建向导)里面选择添加其它的 Struts2 classpath containers。


2. Create a Package

  我们所做的 blog application 是以 index.jsp 为起始页的,在这个页面上有一个 login 页面的链接。在 login 页面上有 user login 和 password 两个 fields。当用户输入有效的 username 和 password 并提交后,该请求会被 pass 到 Admin page,这个页面上有 create、review、delete blog 等选项。如果用户输入的 sername 和 password 无效,那么 login 页面上会显示出错误信息提示。
  首先让我们来创建一个 package,用来包含一系列的 actions。

1. 在 explorer 中,展开 MyBlogStrutsExample>src,然后双击 struts.xml,这样 struts.xml 会被在 editor 中打开。
2. 在 palette 面板点击 ,然后点击一子 Flow editor 界面。
3. 这时会弹出 New Package 对话框,Name、Namespace 等如下图一样设置就行了



  在 Extends 域是用来指定当前要创建的 packages 继承哪个 packages  。可以通过 Add 按钮来选择 Struts2 本身已有的 packages。
  这样,在 Flow 编辑器上就会出现一张如下所示的图,这张图代表了我们刚刚创建的 package。同时,系统会自动地在 struts.xml 文件中添加一个 package 配置 。你可以切换到 Source 面板来看一下 struts.xml 源码的变动。



Tips : 
    * 你可以在 Flow editor 面板中右击,选择 MyEclipse>New Package 来添加 packages 到 Flow editor 中。
    * 你可以直接在 Source editor 中直接编辑 Struts2 的配置,你在源码改动时,Flow editor 的 graphical 面板也会自动地做相应变动,这两种操作的效果是等效的。

3. Create an Action

  Struts2 整个框架的基础单元是 actions,一个 action 元素代表了 identifier 和 handler class 之间的映射 。Struts2 framework 通过映射来决定如何处理一个 request 。下面我们先来创建一个用于处理打开 login page 请求的 action 。
1. 在 palette 面板中点击  ,然后在 Flow editor 中点击 login package。
2. 然后会弹出一个对话框,把 Name 设置成  ShowLoginPage,把 Class 设置成  com.myeclipseide.example.myblog.login.ShowLoginPage,然后点击 Finish 。


  下面来解释一下各字段的含意:
     Package name:package 是用来存放 action 的,package name 就是我们要填写的包名 。
     Name:这个 action 的名称 。
     Action class:用于完成 action handler 和 action identifier 的映射。你也可以为已存在的 handler class 创建新的 handler 或 map 。
     Class:action handler 类,可以通过右侧的按钮来选择已存在的类 。
     Parameters:这里会显示 action 的参数列表 。
     Results:这里会显示 action 的 results 列表 。

  然后,在 Flow editor 中会出现一张代表刚刚创建的 login 包的图,同时,struts.xml 中也会生成相应的配置,package 里面也会生相应的类(ShowLoginPage) 。




Tips :
    * 点击 parameter 可以编辑 action 的 parameter 。
    * 在创建 Action 的向导上,可以创建 results 。
    * 在创建 Action 的向导上,可通过 Add 按钮添加 results 。
    * 你也可以直接在 Source editor 中编辑 struts.xml 的代码,添加删除 actions 。

4. Create a JSP Page
  JSP/HTML 节点代表 application 中的 web 资源 。可以用 JSP 和 HTML 工具生成它们 。在这个 application 中,我们将会创建一系列的 JSP 页面 。首先让我们来创建 loginPage.jsp 。
1. 点击 palette 中的   按钮,然后点击 Flow editor 面板 。
2. 这个 jsp 页面的名称定为 loginPage.jsp,然后选择默认的 JSP template,然后点击完成 。


  这样,Flow editor 中就会生成一个代表 loginPage.jsp 的节点 。

5. Create a Result
  action result 代表 action 操作的执行结果,在一个 aciton 的映射中,经常包含一个 results 集 。action 的处理方法要返回一个 String 
类型,framework 会根据这个返回的 String 匹配到相应的 result 元素 。在这个案例中,ShowLoginPage action 只有一个 result,它返回 success 字符串,它的 result 类型为 dispatcher(dispatcher 类型的 result 会将 request 转发到其它的 web resource 中,在这个案例中,会转发到 loginPage.jsp)。
1. 点击 palette 中的   按钮,然后点击Flow editor 中的 ShowLoginPage action  。
2. 这个 action 的名字取为 success,它转发到的页面选择为 loginPage.jsp,然后点击完成 。


  下面解释一下各参数的含意:
   Name:action result 的名字,你可以选择标准的名字,也可以自己定义一个名字 。
   Result type:从下拉列表中选择一种 result 类型 。
   Location:用于显示结果的 web resource(即 web 页面)。
   Parameters:result 的参数列表,你可以从右边的添加、删除按钮添加或删除参数 。
  这样,Flow editor 会生成代表 result 节点的图片,同时也会在 struts.xml 文件中生成相应的配置,如下图



Tips:
    * 在生成 result 的向导面板中,你可以先不选择 Location field,后面再利用 Extends/Location 工具来连接 。
    * 创建连接的方法:点击 Extends/Location( )工具,然后点击一个 action,然后连接到指定的(JSP/HTML 或 action)结点 。
    * 你可以通过手动连接末端的箭头来改变连接,当你需要改变连接的结点时,这样操作非常方便 。而且你改变连接的结点后,struts.xml 文件的配置也会被系统自动地更新,你不需要再手动修改 。

6. Add Authentication Nodes
  
  利用前面介绍的方法,添加其它的节点和flow 。
1. 创建一个名为 secure 的包,namespace 命名为 /securens,继承默认的包(struts-default)。在这个包里放所有和 security 有关的 action 。在此为简单起见,我们只创建一个用于校验 username 和 password 的 action 。如果通过校验不通过,那么就把 request 返回到 login 页面,并显示错误信息 。
2. 在 secure 包中创建名为 AuthenticateUser 的 action,类名为  com.myeclipseide.example.myblog.secure.AuthenticateUser 
3. 在 action 中添加两个 results,第一个命名为 error,类型为 dispatcher,这个 results 转发到 login 页面 。第二个命名为 success,类型为 redirectAction,这个 result 重定向到另外的一界面,这个界面上包含 create、review、delete blogs 的操作 。
注意:在这一步,success result(name=success, type=redirect action)并没连接到任何的 JSP 页面或 action 。连接操作需要到后面的创建其它的 components 后才进行 。


4. 双击 AuthenticateUser action,然后把下面这段代码粘贴到打开的源文件里,把默认的代码替换掉(为了文件起见,除了空的 username 和 password 外,所有的都可通过校验)
package com.myeclipseide.example.myblog.secure;
import com.opensymphony.xwork2.ActionSupport;
public class AuthenticateUser extends ActionSupport {
private String userName;
private String password;
public String getUserName() {
return userName;
}

public void setUserName(String userName){
this.userName = userName;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}
public String execute() {
// Empty username or password value is not permitted.
if (getUserName().equals("") || getPassword().equals("")) {
addActionError("Invalid username or password! Please try again!");
return ERROR;
}
return SUCCESS;
}
}

7. Add the Blog Page

1. 创建名为 blogging,namespace 为 /bloggingns 的包,用于处理 blogs 的 create、review、delete 等操作 。
2. 在 blogging 名中创建名为 ShowBlogAdminPage 的 action,这个 action 用于将 request 转发到 blogAdminPage 页面 。Class field 设置为 ShowBlogAdminPage,第 6 步的 success result 正是要映射到这个 action 。如果校验成功,那么 framework 会把 request 转发到这个 action 。
3. 在 palette 中点击  ,创建从 AuthenticateUser action 的 success result 到这个页面的连接 。如下图所示

4. 类似地,在 blogging package 中创建名为  CreateBlogPost ReviewAllPosts ShowDeleteBlogPage  and  DeleteBlogPost 的 action 。它们的 handler 的名字和 action 的名字都设置成相同的就行 。
5. 在 Flow editor 中创建名为  createBlogPage 的 JSP,给 CreateBlogPost action 添加名为 success,类型为 dispatcher 的 result 。并在 New Result 向导中把其 Location 设置成 createBlogPage.jsp 。
6. 类似地,创建其他的 action 和 .jsp ,并建立它们的映射关系 。如下图所示



  下面这些代码片段是  loginPage.jsp blogAdminPage.jsp PublishBlogPage.jsp createBlogPage.jsp reviewPostsPage.jsp , and  deleteBlogPage.jsp  等页面的部分内容 。








1. 右击开发完成的项目  MyBlogStruts2Example,选择 Run As>MyEclipse Server Application 。选择 MyEclipse Tomcat Server 。然后这个项目就会被 deploys(部署),server 就会被启动,接着 index.jsp 就会被在 browser 中打开 。
2. 点击 index.jsp 上的链接,就可以进入 loginPage.jsp 了


3. 在 admin 页面,可以点击 Create、Review、Delete 等链接对 blogs 进行相关操作了 。

  这样,在 Flow 编辑器上就会出现一张如下所示的图,这张图代表了我们刚刚创建的 package。同时,系统会自动地在 struts.xml 文件中添加一个 package 配置 。你可以切换到 Source 面板来看一下 struts.xml 源码的变动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值