Strude2 学习之旅

Strude2 学习之旅

第一个项目HelloWorld

创建一个helloworld,需要做四件事:

 

让我们创建一个基本的Struts project,需要添加一个用于存储数据的模型(model),一个显示信息的页面(view),一个扮演控制(controller)的Action class和一个配置文件来将上述联系在一起。

 

Step1 创建Model类MessageStore.java

MessageStore.java

package org.apache.struts.helloworld.model;

 

public class MessageStore {

    private String message;

    public MessageStore(){

        setMessage("Hello Struts User");

    }

    public String getMessage(){

        return message;

    }

    public void setMessage(String message){

        this.message = message;

    }

}

一定要为message设置set和get方法来允许访问私有变量message。

Step2 创建一个Action Class HelloWorldAction.java

我们需要一个Action class来充当控制器(Controller)。Action class会响应一个用户动作(例子中,用户点击一个html链接,发送一个特定的url到servlet容器)。一个或多个Action类的方法将被执行,并返回一个字符串结果,基于结果的值,一个指定的view page(例子中是HelloWorld.jsp)将会呈现。

HelloWorldAction.java

package org.apache.struts.helloworld.action;

import org.apache.struts.helloworld.model.MessageStore;

import com.opensymphony.xwork2.ActionSupport;

 

public class HelloWorldAction extends ActionSupport {

    

    private static final long serialVersionUID = 1L;

    private MessageStore messageStore;

    public String excute() throws Exception{

        messageStore = new MessageStore();

        return SUCCESS;

    }

    public MessageStore getMessageStore() {

        return messageStore;

    }

    public void setMessageStore(MessageStore messageStore) {

        this.messageStore = messageStore;

    }

}

Struts2框架将建立一个HelloWorldAction的对象,执行execute方法来响应用户操作(用户点击链接,发送特定的url到servlet容器)。

这个例子中execute方法创建了一个MessageStore对象然后返回一个SUCCESS字符串。

为了让前台jsp页面中获取到对象信息(MessageStore对象),需要设置set、get方法。

Step3 建立一个View HelloWorld.jsp

HelloWorld.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"

pageEncoding="utf-8"%>

<%@ taglib prefix="s" uri="/struts-tags" %>

<!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=ISO-8859-1">

<title>Hello World!</title>

</head>

<body>

    <h2><s:property value="messageStore.message"></s:property></h2>

<s:debug>debugger</s:debug>

</body>

</html>

s:property标签显示出通过调用HelloWorldAction控制器中getMessageStore 方法所返回来的值。方法返回一个MessageStore的对象。通过.message我们告诉struts2来调取MessageStoregetMessage方法。之后返回一个String字符串,这个字符串就被显示在了s:property标签中。

Step4 添加Struts配置信息到struts.xml中

我们需要映射将url、HelloWorldAction class(controller)和HelloWorld.jsp联系在一起。这个映射告诉Struts2哪个class要响应用户的动作(The URL),哪个方法将要被执行,什么内容将要被展示在View中。

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>

<constant name="struts.devMode" value="true" /> //开发模式

<package name="basicstruts2" extends="struts-default">

<action name="index">

<result>/index.jsp</result>

</action>

<action name="hello" class="org.apache.struts.helloworld.action.HelloWorldAction" method="execute">

<result name="success">/HelloWorld.jsp</result>

</action>

</package>

</struts>

Step5 建立URL Action

在index.jsp中让我们添加一个Action URL,用户点击后会告诉Struts2执行HelloWorldAction的execute方法,显示在HelloWorld.jsp页面中。

HelloWorld.jsp

<body>

<p><a href="<s:url action='hello'/>">Hello World</a></p> <br>

    <a href="hello.action">nihao</a>

</body>

Step6 建立WAR文件并运行程序

 

Struts2的强大标签库

要使用Struts2的标签库,需要在页面中引入

<%@ taglib prefix="s" uri="/struts-tags" %>

<body>

<p><a href="<s:url action='hello'/>">Hello World</a></p> <br>

    <a href="hello.action">nihao</a><br>

    <s:url action="hello" var="he">

        <s:param name="userName">Bru T</s:param>

    </s:url>

    <p><a href="${he}"> hehe</a></p>

</body>

将action="hello"中的内容存入到变量he中,以便以后使用。

Stack Context:

<p>Get your own personal hello by filling out and submitting this form.</p>

    <s:form action="hello">

          <s:textfield name="userName2" lable="Your name"/>

          <s:submit value="提交"></s:submit>

     </s:form>

3、Struts 2 property tag

Struts Property Tag

<s:property value="messageStore.message"></s:property>

如果返回的值是一个object,那将会调用此对象的toString()方法,所以最好在类中复写toString()方法。

编写 Struts 2 Actions

Introduction

 

编写Struts2 Actions 需要如下几步:

1、Struts 2 Action Classes

Action class在MVC模式中充当Controller。Action class响应用户操作,执行业务逻辑(或者交给其它类来做),然后返回一个result告诉Struts将展示哪一个View。

Struts 2 Action classes 通常要继承ActionSupport class,如果你继承了ActionSupport,就要复写其中的execute()方法。

execute方法中,我们要写出响应用户操作的逻辑方法。

Method execute of HelloWorldAction

    public String execute() throws Exception{

        messageStore = new MessageStore();

        helloCount++;

        return SUCCESS;

    }

2、Processing Form Input In The Action Class

Action class的一个最常见的职责是处理form中用户输入的信息,然后返回结果到一个可用的View页面。

Struts 2 Form Tags

<s:form action="hello">

    <s:textfield name="userName" label="your name"/>

    <s:submit value="Submit" />

</s:form>

当用户点击Submit按钮,属性名为name的textfield标签内容将被发送到Action class。Action class会自动接受form表单内容,前提是class中有匹配form属性名的set和get方法。

Add userName to HelloWorldAction

private String userName;

    

    public String getUserName() {

     return userName;

    }

    public void setUserName(String userName) {

     this.userName = userName;

    }

个性化信息:(在execute方法中添加)

Add userName value to message

        if(userName!=null){

            messageStore.setMessage(messageStore.getMessage()+"::"+userName);

        }

处理Form

Introduction

下面将要学习使用Struts2处理对于form提交更多的处理办法。如何使用一个Java Model存储form提交的数据,如何使一个Struts2 form与model class相匹配。

1、Forms and A Java Model Class

我们将提供用户的姓名,邮箱,年龄来设计业务规则。遵循Java bean规范,我们将封装这些数据并提供set和get方法,有时会需要复写toString()方法。

Person.java

package org.apache.struts.register.model;

public class Person {

    private String name;

    private int age;

    private String email;

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public int getAge() {

        return age;

    }

    public void setAge(int age) {

        this.age = age;

    }

    public String getEmail() {

        return email;

    }

    public void setEmail(String email) {

        this.email = email;

    }

    public String toString(){

        return "姓名: "+getName()+" 年龄:"+getEmail()+" 邮箱: "+getEmail();

}

}

2、建立Form

register.jsp

<h3>Register for a prize by completing this form.</h3>

<s:form action="register">

    <s:textfield name="person.name" label="姓名"/>

    <s:textfield name="person.age" label="年龄" />

    <s:textfield name="person.email" label=""></s:textfield>

    <s:submit value="提交"></s:submit>

</s:form>

表单信息将被提交到一个名为register的action,我们需要在struts.xml中定义这个action。

3、创建Action类来处理表单提交

package org.apache.struts.register.action;

import org.apache.struts.register.model.Person;

import com.opensymphony.xwork2.ActionSupport;

 

public class Register extends ActionSupport{

    private static final long serialVersionUID = 2173209653712478187L;

    private Person person;

    public String execute() throws Exception{

        person = new Person();

        return SUCCESS;

    }

    public Person getPerson() {

        return person;

    }

    public void setPerson(Person person) {

        this.person = person;

    }

}

当用户点击提交后,将会调用Register class并创建Person对象,调用setPerson方法,然后把表单项与Person属性进行匹配。这些都发生在执行execute方法之前。

4、处理Execute Method返回的结果值

thankyou.jsp

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Registration Successful</title>

</head>

<body>

    <h3>Thank you for registering for a prize.</h3>

    <p>您的注册信息为:<s:property value="person"></s:property></p>

    <p><a href="<s:url action='index'/>">Return To HOME PAGE</a></p>

</body>

</html>

5、在struts.xml中建立 action Node

<action name="register" class="org.apache.struts.register.action" method="execute">

    <result name="success">/thankyou.jsp</result>

</action>

当执行action中的execut方法返回值为"success"时,会告诉浏览器跳转到thankyou.jsp。

6、链接到register.jsp

在index.jsp中创建链接到register.jsp的超链接。

<a href="register.jsp">注册</a>

posted @ 2013-11-21 13:36  微风夜明  阅读(247)  评论(0编辑  收藏  举报