struts2入门

Struts2是基于MVC设计模式的流行和成熟的Web应用程序框架。

最新版本是Struts 2.5.5

Struts2.x 部分jar文件说明

struts2-core struts2框架核心库包
xwork 构建 Struts2 的 XWork 2 的库 (2.0及以上版本)。
ognl 对象图导航语言(OGNL), 该表达式语言的使用遍及框架的方方面面。
javassist OGNL使用的Java字节码操作库。
freemarker struts标签模板库文件。
commons-logging 通用日志, Struts 2 框架使用它来实现 JDK 1.4+ 和 log4J 之间的无缝透明支持。
commons-fileupload 为 Servlet 和 Web 应用添加稳定、高性能的文件上传功能。
commons-io 一个辅助开发 IO 功能的工具库。
commons-lang3 用于简化常用功能代码的使用用法。该库提供主要针对java.lang包中的类的常用工具方法,从而使代码保持简洁干爽。

一、搭建Struts2项目步骤

1、根据需求导入相关jar包

2、在web.xml文件中配置strus2过滤器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>TestStruts</display-name>
   <!-- 配置struts2核心Filter(其他拦截器应该配置在struts2拦截器上方,否则失效) -->
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <!-- 所有的Action类请求都会被struts2过滤器拦截 -->
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>*.action</url-pattern>
  </filter-mapping>
</web-app>
3、编写Struts2配置文件struts.xml(位于src目录)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<!-- 
package 定义一个包(通常一个业务模块使用一个包)
作用:管理Action
name 包名(用来区分不同包,不同package的name值不能重复)
extends 当前包继承的包(struts中有一定要继承struts-default [struts-default包在 struts-default.xml定义],继承struts-default包后,可以使用struts-default包中定义拦截器和结果类型 )
abstract 表示当前包为抽象包,值为true/false(struts-default包的abstract值为true)。
抽象包中不能有action,否则运行时会出错
namespace 命名空间,默认为"/"
-->
<package name="struts2" extends="struts-default" abstract="false">
<!-- 配置全局结果集,在此package里每个action共用的结果集 -->
<global-results>
<result name="success">/index.jsp</result>
</global-results>
<!-- 
action 配置请求路径与Action类的映射关系
name 请求路径名称
class 请求处理的Action类全名,默认是com.opensymphony.xwork2.ActionSupport,在struts-default.xml中定义
method 配置调用的处理方法
没有指定method属性, 默认执行 Action类中 execute方法 
-->
<action name="helloworld" class="cn.iborder.action.HelloWorldAction">
<!-- 
result 根据Action类返回的值进行相应处理
name Action类返回的值
type 跳转的结果类型(默认值dispatcher)
标签体 指定跳转的页面
-->
<result name="success">/index.jsp</result>
</action>
<action name="login" class="cn.iborder.action.UserAction" method="login">
<result name="login" type="redirect">/index.jsp</result>
</action>
</package>
<!-- 
引入其他配置文件
config.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="struts2" extends="struts-default" namespace="/">
    <action name="hello" class="cn.iborder.action.HelloAction" method="hello">
    <result name="hello">/hello.jsp</result>
    </action>
   </package> 
</struts>
======================================================================
-->
<!-- 加载src路径下的config.xml文件 -->
<include file="/config.xml"></include>
</struts>
struts2中配置启动开发模式的好处:

可以输出日志记录,便于程序设计
修改struts.xml配置文件中后就不用重新部署项目,直接生效。
打印出更详细的错误信息
4、编写Action类

HelloWorldAction.java

package cn.iborder.action;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport {
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println("执行HelloWorldAction");
        return "success";
}

}
二、Action实现方式

Action实现方式:普通pojo类、实现Action接口 、继承ActionSupport

Struts2 中通常直接使用 Action 来封装 HTTP 请求参数,因此,Action 类里还应该包含与请求参数对应的属性,并且为属性提供对应的 getter 和 setter 方法。

1、普通pojo类

User.java

package cn.iborder.entity;

public class User {
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;
}
}
UserAction.java

package cn.iborder.action;

import cn.iborder.entity.User;

public class UserAction {
private User user;

public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}

public String login() {
System.out.println("用户:"+user.getUserName());
System.out.println("密码:"+user.getPassword());
return "login";
}
}
2、实现Action接口

package cn.iborder.action;

import com.opensymphony.xwork2.Action;

import cn.iborder.entity.User;

public class UserAction implements Action {
private User user;

public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}

public String login() {
System.out.println("用户:"+user.getUserName());
System.out.println("密码:"+user.getPassword());
return "login";
}

@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return null;
}
}
3、继承ActionSupport

需要使用struts2的数据校验功能,必须继承ActionSupport.

ActionSupport已经实现了Action接口,还实现了Validateable接口,提供了数据校验功能。通过继承该 ActionSupport 类,可以简化 Struts 2 的 Action 开发。

Actionsupport类在实现的Validateable接口中定义了一个 validate()方法,重写该方法,自定义数据校验功能,它会在execute()方法之前执行。在实现表单验证功能的时候一定不要忘记了在 struts.xml 中相对应的 action 中配置 result="input",因为表单验证失败默认返回的字符串为 input,如果没有的话会报错。

重写父类的validate()方法,会对对所有业务逻辑都验证,不推荐使用,建议自定义一个校验类,继承实现Validator接口的类,有ValidatorSupport或FieldValidatorSupport。

通过校验配置文件可以使用Struts2已有的校验器

package cn.iborder.action;

import com.opensymphony.xwork2.ActionSupport;

import cn.iborder.entity.User;

public class UserAction extends ActionSupport {
private User user;

public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}

public String login() {
System.out.println("用户:"+user.getUserName());
System.out.println("密码:"+user.getPassword());
return "login";
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值