zzm

Struts2学习(入门)
过年在家学习Java,大概记录一下一、安装Tomcatbrew install tomcat二、下载struts依...
扫描右侧二维码阅读全文
18
2019/02

Struts2学习(入门)

过年在家学习Java,大概记录一下

一、安装Tomcat

brew install tomcat

二、下载struts依赖的jar包

这里我用IDEA开发,自动下载可能有点问题,选择手动导入
struts-2.5.13-min-lib.zip

  • commons-fileupload-1.3.3.jar struts的上传
  • javassist-3.20.0-GA.jar Javassist是一款字节码编辑工具,可以直接编辑和生成Java生成的字节码
  • commons-io-2.5.jar struts文件操作
  • log4j-api-2.8.2.jar 日志管理组件依赖包的API
  • commons-lang3-3.6.jar 为java.lang包提供扩展
  • ognl-3.1.15.jar 支持ognl表达式
  • freemarker-2.3.23.jar FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具
  • struts2-core-2.5.13.jar struts2的核心jar包,不可缺少的

三、用IDEA创建struts2项目

创建项目的时候选Java Enterprise里面的Struts 2,并且不选择下载依赖包,而是选择刚才下载的struts-2.5.13-min-lib.zip中的所有jar文件即可。
创建好后项目大致结构如下
image.png
src目录中写源码文件(action文件)
web目录中写jsp文件
struts.xml: 包配置、命名空间配置、包含配置、拦截器配置、Action
web.xml: 主要用来配置Filter,Listener,Servlet等

修改web.xml

这里我的IDEA自动生成的web.xml使用的拦截器是org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter,而新版的是org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter,所以要修改

<?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_4_0.xsd"
         version="4.0">
    <filter>
        <filter-name>struts2</filter-name>
        <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>

然后在IDEA点启动就可以正常访问了

四、简单的登录Demo

1.定义处理用户请求的action类

修改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>
    <!-- 开启debug模式 -->
    <constant name="struts.devMode" value="true" />
    <package name="login" extends="struts-default" namespace="/">
        <action name="login" class="action.LoginAction" method="execute">
            <result name="success">/welcome.jsp</result>
            <result name="error">/error.jsp</result>
            <result name="input">/login.jsp</result>
        </action>
    </package>
</struts>

当 Action 处理用户请求后,通常会返回一个处理结果,即 逻辑视图名(Action接口中的五个静态字段:success,error,input,login 和 none)

  • success: Action执行成功。显示结果视图(页面)给用户。
  • error: Action执行失败。显示一个错误的视图(页面),这个页面可以要求用户再次输入相关数据。
  • input: Action的执行成功需要更多的输入。这个结果是一个典型的结果,它表明如果一个表单通过提供默认的表单来操作一个Action。这个表单会显示给最终用户。这个结果也用于用户输入无效,意味着用户需要再次输入。
  • login: Action不能执行,因为用户没有登录。已登录的画面会被关闭。
  • none: Action执行成功,但是不会显示一个视图。通常产生这种情况的原因是被其他视图重定向了。
在src目录下新建action文件夹,在action文件夹下编写LoginAction.java
package action;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {

    // 这里的属性可以从HTTP请求参数中接收
    private String username;
    private String password;

    // 需要定义getter/setter方法
    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;
    }

    // throws表示这个方法可能抛出错误
    @Override
    public String execute() throws Exception {
        if(username.equals("admin") && password.equals("123456")){
            System.out.println("登录成功...");
            return SUCCESS;
        }else if(username.equals("") || password.equals("")){
            System.out.println("用户名或密码未填写...");
            return INPUT;
        }else {
            System.out.println("登录失败...");
            return ERROR;
        }
    }
}

最后在web目录下编写welcome.jsp、error.jsp、login.jsp即可

五、struts2的运行逻辑

image.png

Last modification:February 19th, 2019 at 11:32 am

Leave a Comment