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

来源:互联网 发布:mac类似sai的软件 编辑:程序博客网 时间:2024/05/22 04:49

本案例只用到最核心的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的逻辑名,而实际的结果映射路径写在该标签的开始和结束标签之间.

原创粉丝点击