您的位置:首页 > 编程语言 > Java开发

struts2系列学习笔记(2)---------------从HelloWorld开始

2011-01-18 15:01 507 查看
本案例只用到最核心的Struts2框架内容,一个至简的HelloWorld程序.

用户在第一个页面中可以输入:姓名 点击[Login]按钮.即可在第二个页面中显示出 Hello xxx(用户输入的姓名)

基于Struts2的实现需要

1. 编写3个程序:

视图: InputName.jsp (第一个页面)

HelloName.jsp(第二个页面)

控制器: action.LoginAction.java

2. 配置struts.xml文件

======================================

具体程序内容:

************************* InputName.jsp ****************************

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"

pageEncoding="ISO-8859-1"%>

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

<!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>InputName page</title>

</head>

<body>

<s:form action="loginAction">

Name:<s:textfield name="inputName"></s:textfield>

<s:submit name="submit" value="Login"></s:submit>

</s:form>

</body>

</html>

这是一个JSP文件,使用框架与普通的JSP/Servlet技术下的区别就是使用了Struts2提供的标记

<%@taglib uri="/struts-tags" prefix="s"%> :该标记用于引入Struts2标记库,前缀通常定义为s.

本页面中使用的了3个form相关的标记:

1. <s:form action="loginAction">

该标签用于生成HTML的<form>标签

action属性: 不是必需的,默认值为当前的action,类型为String. 说明:指定提交到的action的名字,不要添加.action的后缀

本例中action的值:loginAction 与struts.xml配置文件中action标记的name属性值loginAction一致

2. <s:textfield name="inputName"></s:textfield>

该标签用于生成HTML的<input type="text">标签

name属性:该属性是Struts2标签库的通用属性,类型为String.说明:指定表单元素的name映射,该属性的值与action的属性对应

3. <s:submit name="submit" value="Login"></s:submit>

该标签用于生成HTML的<input type="submit">标签,<input type="image">标签,<button type="submit">标签

name属性:同上

value属性:该属性是Struts2标签库的通用属性,类型为String.说明:指定HTML表氮元素的value属性

type属性:该属性不是必需的,本例中未指定该属性即使用默认值input,类型为String,说明:要使用的提交按钮的类型,有效值为:input,image,button

************************* HelloName.jsp ****************************

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"

pageEncoding="ISO-8859-1"%>

<!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>Insert title here</title>

</head>

<body>

Hello ${requestScope.name} !

</body>

</html>

本页面用于显示前页面输入的姓名,为了简单起见使用了EL,当然本例随着Struts2的不断学习还可以改用OGNL.此处暂不做说明.

************************* action.LoginAction.java ****************************

package action;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;

public class LoginAction {

private String inputName;

public String getInputName() {

return inputName;

}

public void setInputName(String inputName) {

this.inputName = inputName;

}

public String execute(){

Map map = (Map)(ActionContext.getContext().get("request"));

map.put("name",inputName);

return "success";

}

}

Struts2的核心功能是Action,对于开发人员来说使用本框架的主要任务即为开发Action.该类可以是一个普通的java类,但是该必须至少提供一个方法,该方法的签名形如:public String execute().本例中提供的方法为:public String execute(),即当程序执行到Action类时执行该execute方法.该方法的返回值对应struts.xml配置文件中的 <result>标签的name属性值.该类中提供的属性对应于提交到该Action的前一个页面的标单组件的name属性值.

==================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>

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

<action name="loginAction" class="action.LoginAction">

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

</action>

</package>

</struts>

<package>标签为Struts2提供的包类似于Java中包的概念 name属性是必须的,是被其他包引用时的键;extends属性不是必须的,用于指定要扩展的包,本例中的属性值struts-default是struts-default.xml文件中定义的抽象包.(推荐做法)

<action>标签是框架中最基本的单元,用于每一个Action类的映射配置,该标签嵌套在 <package>标签内部.name属性是必须的,是action的名字(自定义),用于匹配请求的URI;class属性不是必须的,用于指定Action类的完整包名和类名

<result>标签用于配置结果映射,该标签的name属性值用于指定result的逻辑名,而实际的结果映射路径写在该标签的开始和结束标签之间.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: