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

Java_WEB开发_struts2学习的总结

2017-10-18 00:00 591 查看
一、构建struts2的基本包有:

commons-fileupload-...jar
commons-logging.jar
freemarker.jar
ognl-2.7.3.jar
struts2-config-browser-plugin.jar
struts2-core-2.1.8.1.jar
xwork-core-2.1.6.jar

二、构建Struts2.X应用:

1.导入commons-logging.jar,freemarker.jar,ognl.jar,struts2-core.jar,xwork.jar这些struts2的基本包
2.修改WEB-INF下的web.xml文件,添加

<!-- 定义Struts 2的FilterDispatcher的Filter -->
<filter>
<!-- 定义核心Filter的名字 -->
<filter-name>
struts2
</filter-name>
<!-- 定义核心Filter的实现类 -->
<filter-class>
org.apache.Struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<!-- FilterDispatcher用来初始化Struts 2并且处理所有的Web请求 -->
<filter-mapping>
<filter-name>Struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


3.在src根目录下建立struts.xml文件,内容:

<?xml version="1.0" encoding="GBK"?>
<!-- 指定Struts 2配置文件的DTD信息 -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<!-- struts是Struts 2配置文件的根元素 -->
<struts>
<!-- Struts 2的Action必须放在指定的包空间下定义 -->
<package name="strutsqs" extends="struts-default">
<!--定义login的Action,该Action的实现类为lee.Action类 -->
<action name="Login" class="struts2.action.LoginAction">
<!--定义处理结果和资源之间映射关系。 -->
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
</action>
</package>
</struts>


4.添加控制器类,实现接口:com.opensymphony.xwork2.Action,重写方法:public String execute() throws Exception {},例如:

package struts2.action;

import struts2.biz.BookService;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;

public class GetBooksAction implements Action {
private String[] books;

public String[] getBooks() {
return books;
}
public void setBooks(String[] books) {
this.books = books;
}

public String execute() throws Exception {
// TODO Auto-generated method stub
String name = (String)ActionContext.getContext().getSession().get("user");
if(null != name && "123".equals(name)){
setBooks(BookService.getBooks());
return SUCCESS;
}else{
return LOGIN;
}
}
}


5.如需对表单或其他提交信息验证,在对应的Action的同级目录添加ActionName-validation.xml文件,ActionName替换成你的Action的名字,如GetBooksAction 的验证文件为GetBooksAction-validation.xml内容比如:

<?xml version="1.0" encoding="GBK"?>
<!-- 指定校验规则文件的DTD信息 -->
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator
1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<!-- 校验规则定义文件的根元素 -->
<validators>
<!-- 校验第一个表单域:username -->
<field name="name">
<!-- 该表单域必须填写 -->
<field-validator type="requiredstring">
<!-- 如果校验失败,显示user.required对应的信息 -->
<message key="user.required" />
</field-validator>
</field>

<!-- 校验第二个表单域:password -->
<field name="password">
<field-validator type="requiredstring">
<!-- 如果校验失败,显示pass.required对应的信息 -->
<message key="密码校验失败" />
</field-validator>
</field>
</validators>


6.页面UI显示标签如:

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>登录页面</title>
</head>
<body>

<!-- 使用form标签生成表单元素 -->
<s:form action="Login">
<!-- 生成一个用户名文本输入框 -->
<s:textfield name="username" label="用户名"/>
<!-- 生成一个密码文本输入框 -->
<s:textfield name="password" label="密  码"/>
<!-- 生成一个提交按钮 -->
<s:submit value="登录"/>
</s:form>

</body>
</html>


加入<%@taglib prefix="s" uri="/struts-tags"%>引用
Struts 2为常用表单域都提供了对应的标签,下面是常用的表单域标签。
— form:对应一个表单元素。
— checkbox:对应一个复选框元素。
— password:对应一个密码输入框。
— radio:对应一个单选框元素。
— reset:对应一个重设按钮。
— select:对应一个下拉列表框。
— submit:对应一个提交按钮。
— textarea:对应一个多行文本域。
— textfield:对应一个单行文本框。

7.页面取值,正如GetBooksAction 中的逻辑,将要返回的数据放入到Action的属性中即可,在页面取值的方法:
a) 从request的“struts.valueStack”属性中取得如:

<table border="1" width="360">
<caption>作者李刚的图书</caption>
<%
//获取封装输出信息的ValueStack对象
ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack");
//调用ValueStack的fineValue方法获取Action中的books属性值
String[] books = (String[])vs.findValue("books");
//迭代输出全部图书信息
for (String book : books)
{
%>
<tr>
<td>书名:</td>
<td><%=book%></td>
</tr>
<%}%>
</table>


b) 在页面中直接用EL表达式取值:
${books["0"]}
c) 用struts2标签:

<table border="1" width="360">
<caption>作者李刚的图书</caption>

<!-- 迭代输出ValueStack中的books对象,其中status是迭代的序号 -->
<s:iterator value="books" status="index">

<!-- 判断序号是否为奇数 -->
<s:if test="#index.odd == true">
<tr style="background-color:#cccccc" mce_style="background-color:#cccccc">
</s:if>

<!-- 判断迭代元素的序号是否不为偶数 -->
<s:else>
<tr>
</s:else>

<td>书名:</td>
<td>
<s:property/>
</td>
</tr>
</s:iterator>
</table>


8.国际化:
a) 在根目录下建立:basename_语言代码_国家代码.properties文件,如:
messageResouce_zh_CN.properties,在其中建立数据:

loginPage=登录页面
errorPage=错误页面
succPage=成功页面
failTip=对不起,您不能登录!
succTip=欢迎,${0},您已经登录!
viewLink=查看作者李刚已出版的图书
bookPageTitle=作者李刚已出版的图书
bookName=书名:
user=用户名
pass=密 码
login=登录

对应的英文版的文件:messageResouce_en_ US.properties

loginPage=Login Page
errorPage=Error Page
succPage=Welcome Page
failTip=Sorry,You can't log in!
succTip=welcome,{0},you has logged in!
viewLink=View LiGang/'s Books
bookPageTitle=LiGang/'s Books
bookName=BookName:
user=User Name
pass=User Pass
login=Login

b) 在根目录下建立文件:struts.properties,加载资源文件可以通过它来定义,本应用的struts.properties文件仅有如下一行代码:
//定义Struts 2的资源文件的name
struts.custom.i18n.resources = messageResouce_zh_CN
c) 如果将该资源文件保存在src的子目录下,例如保存在src/lee路径下,则需要修改struts.properties中的定义如下:
//定义Struts 2的资源文件的name是messageResource,且文件放在src/lee路径下
struts.custom.i18n.resources=lee.messageResource

d) 输出国际化信息:
<s:text name="bookPageTitle"/>:使用s:text标签来输出国际化信息
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: