struts2基于注解配置action

如果使用struts2,就需要配置文件或者注解,关于struts2的配置文件struts.xml非常熟悉,对于注解可能spring使用的比较多。配置文件的繁琐衬托出了注解的简洁方便,一条或者几条注解解决配置文件几行的内容。

struts2作为控制器建立模型与视图数据的交互。主要对action进行配置。

首先下载struts2-convention-plugin这个jar包,这是使用注解的支持jar包,建议下载最新的版本,可以到struts2的官网上下载最新的全部依赖文件的压缩包

选择需要的依赖文件,注意最新版本的struts2依赖的asm这个jar包也是有要求的,报错了很久在stackoverflow上找到了可靠的解决办法


struts2使用注解还是要使用配置文件配置几条……,在src下新建struts.xml,写入下面的配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">


<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <constant name="struts.devMode" value="false" />
    <constant name="struts.i18n.encoding" value="UTF-8"/>
</struts>

新建login.jsp:

<%--
  Created by IntelliJ IDEA.
  author: DuzhenTong
  Date: 2018/1/23
  Time: 22:35
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>登录</title>
  </head>
  <body>
  <form action="/user/login">
    用户名:<input type="text" name="name">
    密码:<input type="password" name="password">
    <input type="submit" value="提交">
  </form>
  </body>
</html>
success.jsp:

<%--
  Created by IntelliJ IDEA.
  author: DuzhenTong
  Date: 2018/1/23
  Time: 22:40
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>欢迎</title>
</head>
<body>
登录成功!!!
</body>
</html>
error.jsp:
<%--
  Created by IntelliJ IDEA.
  author: DuzhenTong
  Date: 2018/1/23
  Time: 22:42
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>失败</title>
</head>
<body>
用户名或密码错误!!!
</body>
</html>
web.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
    </welcome-file-list>
    <filter>
        <filter-name>struts2</filter-name>
        <!--注意:使用最新版本的struts2下main的配置和老版本不一致-->
        <!--<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>-->
        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

在src下新建domain包,新建User类

package domain;

/**
 * Created with IDEA
 *
 * @author DuzhenTong
 * @Date 2018/1/23
 * @Time 22:29
 */
public class User {

    private int id;
    private String name;
    private String password;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

新建action包,新建LoginAction类(使用注解的action所在的包名必须是action,actions等等,在官方的文档中有说明,可以参考):

package action;

import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.*;

/**
 * Created with IDEA
 *
 * @author DuzhenTong
 * @Date 2018/1/23
 * @Time 22:30
 */

@ParentPackage("struts-default")
@Namespace("/user")

public class LoginAction extends ActionSupport {

    private String name;
    private String password;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Action(value="login", results={

            @Result(name="success", location="/success.jsp"),

            @Result(name="error", location="/error.jsp")})
    public String login(){
        if ("a".equals(name) && "a".equals(password)) {
            System.out.println("成功");
            return "success";
        }
        return "error";
    }


}
上面的注解和配置文件中的配置很像,配置表单的action,返回什么样的字符串跳转到什么页面

整体的结构:


发布项目启动服务器发起访问输入用户名和密码测试



posted @ 2018-01-24 16:57  In_new  阅读(1641)  评论(0编辑  收藏  举报