Struts2 – 登录表单入门小Demo


Struts2简介

  Struts2是一个基于MVC设计模式Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2Struts的下一代产品,是在 struts 1WebWork的技术基础上进行了合并的全新的Struts 2框架。
  本次Demo使用Intellij IDEA + Gradle的组合来开发。用到的依赖有:struts2-core-2.5.16log4j-core-2.11.0以及log4j-api-2.11.0

Gradle配置


group 'sino_crazy_snail'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'war'

sourceCompatibility = 1.8
buildscript {
    ext.struts2_version="2.5.16"
    ext.log4j2_version="2.11.0"
}
repositories {
    mavenCentral()
}

dependencies {
    compile "org.apache.struts:struts2-core:${struts2_version}"
    compile "org.apache.logging.log4j:log4j-core:${log4j2_version}"
    compile "org.apache.logging.log4j:log4j-api:${log4j2_version}"
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

工程目录结构

--src/main
  --java
    --action
      --LoginAction.java
  --resources
    --log4j2.xml
    --struts.xml
  --webapp
    --WEB-INF
      --web.xml
    index.jsp
    welcome.jsp
--buil.gradle

创建LoginAction类

  在src/main/java下新建package action,然后创建LoginAction类:

package action;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

/** * Create by sino_crazy_snail on 2018-03-31 * Email: sino_crazy_snail@qq.com */
public class LoginAction extends ActionSupport {
    private String userName, passWord;

    /** * A default implementation that does nothing an returns "success". * <p> * <p> * Subclasses should override this method to provide their business logic. * </p> * <p> * <p> * See also {@link Action#execute()}. * </p> * * @return returns {@link #SUCCESS} * @throws Exception can be thrown by subclasses. */
    @Override
    public String execute() throws Exception {
        //SUCCESS是com.opensymphony.xwork2.Action接口定义的一个字符串常量
        return SUCCESS;
    }

    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;
    }
}

配置struts.xml和log4j2.xml以及web.xml

  在src/main/resource下新建struts.xml以及log4j2.xml:

struts.xml:

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

<struts>

    <constant name="struts.devMode" value="true" />
    <!-- 设置包名为login,该包继承自Struts 2框架的默认包struts-default -->
    <package name="login" namespace="/" extends="struts-default">
        <!-- 定义名为login的Action,处理类为action.LoginAction.处理结果在welcome.jsp页面显示-->
        <action name="login" class="action.LoginAction">
            <result>/welcome.jsp</result>
        </action>
    </package>

</struts>

log4j2.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<Configuration>
    <Appenders>
        <Console name="STDOUT" target="SYSTEM_OUT">
            <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="com.opensymphony.xwork2" level="debug"/>
        <Logger name="org.apache.struts2" level="debug"/>
        <Root level="warn">
            <AppenderRef ref="STDOUT"/>
        </Root>
    </Loggers>
</Configuration>

src/main/webapp/WEB-INF下新建web.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<web-app id="struts2demo" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <display-name>struts2demo</display-name>
    <welcome-file-list>
        <welcome-file>index</welcome-file>
    </welcome-file-list>

    <filter>
        <filter-name>struts2</filter-name>
        <!--老版本的StrutsPrepareAndExecuteFilter在org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter-->
        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <!--截获所有的url-->
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

编写前端页面

src/main/webapp下新建index.jsp:


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>Login</title>
</head>
<body>
<form action="login.action" method="post">
  <p>
    User Name:
    <input type="text" name="userName"/>
  </p>
  <p>
    Pass Word:
    <input type="password" name="passWord"/>
  </p>
  <input type="submit" value="Login">
</form>

</body>
</html>

welcome.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
    <head>welcome</head>
    <body>
        <p>
            Your Name: <s:property value="userName"></s:property>
        </p>
        <p>
            Your Pass Word: <s:property value="passWord"></s:property>
        </p>
    </body>
</html>

发布工程

  Build一下工程,然后在找到IDEA工具栏的Build菜单下的子菜单Build Artifacts==>build all.然后去输出目录找到struts2demo-1.0-SNAPSHOT.war我这里的配置是在..\struts2demo\build\libs下。不清楚在哪的可以按下Ctrl+Alt+shift+S查看Project Structure=>Artifacts右上Output directory就是输出目录。
  
  
  我这里将其改名为login后复制到tomcat的webapps目录下。启动tomcat,打开浏览器输入http://localhost:8080/login/index.jsp:

输入用户名和密码:

点击提交。
结果: