Fork me on GitHub

struts2入门

参考文献:https://www.w3cschool.cn/struts_2/

  • ctrl+shift+t搜索某一个函数的全路径

    环境

    1
    2
    3
    struts-2.5.18
    eclipse
    java8.0

Struts2

在Struts2 的web应用程序里点击一个超链接或提交一个HTML表单时,会由控制器收集输入并发送一个叫Actions的Java类。Action被执行后,Result会选择一个资源给予响应。这个资源通常是一个JSP,也可以是一个PDF文件,一个Excel表格,或者是一个Java小程序窗口。

第一个程序helloworld

四个组件

1
2
3
4
Action(操作):创建一个动作类,包含完整的业务逻辑并控制用户、模型以及视图间的交互。
Interceptors(拦截器):这是控制器的一部分,可依据需求创建拦截器,或使用现有的拦截器。
View(视图):创建一个JSP与用户进行交互,获取输入并呈现最终信息。
Configuration Files(配置文件):创建配置文件来连接动作、视图以及控制器,这些文件分别是struts.xml、web.xml以及struts.properties。

需导入的jar包(lib目录下)

PS:第三个和第四个jar包一定要导入,缺一不可(因为这个扣了三天。。)
项目结构

代码

  • 创建Aciton类(HelloWorldAction.java)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    import com.opensymphony.xwork2.ActionSupport;

    public class HelloWorldAction extends ActionSupport {
    private String name;
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public String execute() throws Exception {
    if ("SECRET".equals(name))
    {
    return SUCCESS;
    }else{
    return ERROR;
    }
    }
  • 创建视图(hello.jsp)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <!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=UTF-8">
    <title>Hello World</title>
    </head>
    <body>
    Hello World, <s:property value="name"/>
    </body>
    </html>
  • 创建视图(AccessDenied.jsp)

    1
    2
    3
    4
    5
    6
    <head>
    <title>Access Denied</title>
    </head>
    <body>
    You are not authorized to view this page.
    </body>
  • 创建主页(index.jsp)

    1
    2
    3
    4
    5
    6
    7
    8
    <body>
    <h1>Hello World From Struts2</h1>
    <form action="hello">
    <label for="name">Please enter your name</label><br/>
    <input type="text" name="name"/>
    <input type="submit" value="Say Hello"/>
    </form>
    </body>
  • 配置文件(struts.xml)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
    <constant name="struts.devMode" value="true" />
    <package name="helloworld" extends="struts-default">
    <action name="hello" class="cn.sheng.struts.HelloWorldAction">
    <result name="success">/hello.jsp</result>
    <result name="error">/AccessDenied.jsp</result>
    </action>
    </package>
    </struts>
  • web.xml(为每个web应用程序提供接入点)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <filter>
    <filter-name>strutsprepare</filter-name>
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareFilter</filter-class>
    </filter>

    <filter>
    <filter-name>struts-execute</filter-name>
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
    <filter-name>strutsprepare</filter-name>
    <!--所有的url都会被Struts过滤器解析-->
    <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
    <filter-name>struts-execute</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>

运行结果

验证框架

  • Action类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
       private String name;
    private int age;
    public String execute() {
    return SUCCESS;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public int getAge() {
    return age;
    }
    public void setAge(int age) {
    this.age = age;
    }
    <!-- 验证内容 -->
    public void validate()
    {
    if (name == null || name.trim().equals(""))
    {
    addFieldError("name","The name is required");
    }
    if (age < 28 || age > 65)
    {
    addFieldError("age","Age must be in between 28 and 65");
    }
    }
    }
  • 创建视图(success.jsp)

    1
    2
    3
    4
    5
    6
    <head>
    <title>Success</title>
    </head>
    <body>
    Employee Information is captured successfully.
    </body>
  • 创建主页(idnex.jsp)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <head>
    <title>Employee Form</title>
    </head>
    <body>
    <s:form action="empinfo" method="post">
    <s:textfield name="name" label="Name" size="20" />
    <s:textfield name="age" label="Age" size="20" />
    <s:submit name="submit" label="Submit" align="center" />
    </s:form>
    </body>
  • 配置文件(struts.xml)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <struts>
    <constant name="struts.devMode" value="true" />
    <package name="helloworld" extends="struts-default">
    <action name="empinfo" class="cn.sheng.struts.HelloWorldAction">
    <result name="input">/index.jsp</result>
    <result name="success">/success.jsp</result>
    </action>
    </package>
    </struts>
  • web.xml同上不用换

运行结果

-------------本文结束感谢您的阅读-------------