您当前的位置: 首页 >  Java

彭世瑜

暂无认证

  • 2浏览

    0关注

    2791博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Java学习路线-62:Struts2

彭世瑜 发布时间:2020-06-22 21:00:30 ,浏览量:2

一、Struts2 概述

Struts 翻译:支柱

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

POJO(Plain Ordinary Java Object)简单的 Java 对象

MVC 模式

模型视图控制器

Model View Controller

工作原理图

在这里插入图片描述

环境

二、Struts2 项目

项目结构

.
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── mouday
    │   │           └── HelloWorldAction.java
    │   ├── resources
    │   │   └── struts.xml
    │   └── webapp
    │       ├── WEB-INF
    │       │   └── web.xml
    │       ├── hello.jsp
    │       └── index.html
    └── test
        └── java

1、配置文件

(1)pom.xml



    4.0.0

    org.example
    java-demo-struts
    1.0-SNAPSHOT

    

        
            
            
                org.apache.tomcat.maven
                tomcat7-maven-plugin
                2.2
                
                    8080
                    /
                    UTF-8
                    
                    true
                    src/main/webapp/WEB-INF/web.xml
                    true
                
            

        
    

    
    
        
            org.apache.struts
            struts2-core
            2.5.22
        

        
        
            javax.servlet
            javax.servlet-api
            4.0.1
            provided
        

    


(2)src/main/webapp/WEB-INF/web.xml




    Hello

    
        struts2
        org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
    

    
        struts2
        /*
    

    
        index.html
    

(3)src/main/resources/struts.xml





    
        
            /hello.jsp
        
    

2、Action

src/main/java/com/mouday/HelloWorldAction.java

package com.mouday;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport {
    @Override
    public String execute() throws Exception {
        System.out.println("hello action");
        return SUCCESS;
    }
}

3、视图文件

src/main/webapp/index.html



  
    hi
  

src/main/webapp/hello.jsp





hello action jsp


4、访问测试

GET http://localhost:8080/

hi


GET http://localhost:8080/HelloWorldAction

hello action jsp
三、核心文件
web.xml
struts.xml
struts.properties 全局属性文件,自动加载

struts.properties 常用配置

# struts.xml改动后重新加载重载 默认 false
struts.configuration.xml.reload=true

# 打开开发模式 默认 false
struts.devMode=true

# 设置浏览器缓存静态页面 默认true
struts.serve.static.browserCache=false

# 被struts处理的请求后缀
struts.action.extension=action,do

# 服务器运行时端口号
struts.url.http.port=8080
四、深入 Struts2

1、访问 Servlet API 方式

  1. ActionContext
  2. 实现 Aware 接口
  3. ServletActionContext

2、Action 搜索顺序 逐级向上查找

3、动态方法调用 (1)指定 method 属性

package com.mouday;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport {
    @Override
    public String execute() throws Exception {
        System.out.println("hello action");
        return SUCCESS;
    }

    public String add(){
        System.out.println("add");
        return SUCCESS;
    }
}

struts.xml(简化)


    
        
            /add.jsp
        
    

访问结果

GET http://localhost:8080/add.action

add result

(2)感叹号方式(不推荐)

参考 struts2.5 使用感叹号和通配符实现动态方法调用无效的问题及解决!

配置文件







    
        regex:.*

        
            /hello.jsp
            /add.jsp
        
    

    

GET http://localhost:8080/HelloWorldAction!add.action

add result

(3) 通配符方式







    
        regex:.*

        
            /{2}.jsp
        
    

    

GET http://localhost:8080/HelloWorldAction_add.action

add result

4、指定多个配置文件


配置示例

struts.xml







    

    

    
    

hello.xml







    
        regex:.*

        
            /{2}.jsp
        
    



访问

GET http://localhost:8080/HelloWorld_add.action

add result

5、默认 Action






    

        

        
            /error.jsp
        

    

访问

GET http://localhost:8080/xxxx.action

error jsp

6、Struts2 后缀 (1)struts.xml


(2)struts.properties

struts.action.extension=action,do

(3)web.xml

 
    struts2
    org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
    
        struts.action.extension
        do
    

7、接收参数

(1)Action 属性

Action 类

package com.mouday;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {
    private String username;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    @Override
    public String execute() throws Exception {
        System.out.println(username);
        return SUCCESS;
    }
}

路由配置


    /login.html

表单页面


  
  

(2)Domain Model

新建 User 类

package com.mouday.bean;

public class User {
    private String username;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

Action

package com.mouday.action;

import com.mouday.bean.User;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {
    private User user;

    public User getUser() {
        return user;
    }

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

    @Override
    public String execute() throws Exception {
        System.out.println(user.getUsername());
        return SUCCESS;
    }
}

登录表单


  
  

(3)ModelDriven

Action

package com.mouday.action;

import com.mouday.bean.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class LoginAction extends ActionSupport implements ModelDriven {
    private User user = new User();

    @Override
    public String execute() throws Exception {
        System.out.println(user.getUsername());
        return SUCCESS;
    }

    public User getModel() {
        return user;
    }
}

表单


  
  

(4)接收列表类型

User 类

package com.mouday.bean;

import java.util.List;

public class User {
    private String username;
    private List list;

    public List getList() {
        return list;
    }

    public void setList(List list) {
        this.list = list;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

Action

package com.mouday.action;

import com.mouday.bean.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class LoginAction extends ActionSupport implements ModelDriven {
    private User user = new User();

    @Override
    public String execute() throws Exception {
        System.out.println(user.getUsername());
        System.out.println(user.getList());
        return SUCCESS;
    }

    public User getModel() {
        return user;
    }
}

表单


  
  
  
  

8、处理结果类型 Struts2 处理流程

用户请求
-> Stuts框架
-> 控制器Action
-> Stuts框架
-> 视图资源

result 如果省略 name,则默认是 success

/success.jsp


/success.jsp

处理结果类型:

  1. SUCCESS 正确执行,默认视图
  2. NONE 正确执行,不返回视图
  3. ERROR 执行失败
  4. LOGIN 登录视图
  5. INPUT 参数输入界面

Action

package com.mouday.action;

import com.mouday.bean.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class LoginAction extends ActionSupport implements ModelDriven {
    private User user = new User();

    @Override
    public String execute() throws Exception {
        System.out.println(user.getUsername());
        System.out.println(user.getList());
        return SUCCESS;
    }

    @Override
    public void validate() {
        if (user.getUsername() == null || "".equals(user.getUsername())
        ) {
            addFieldError("username", "用户名不能为空");
        }
    }

    public User getModel() {
        return user;
    }
}

配置







    

        
            /login.jsp
            /login.jsp
        

    


登录框





    
    
    

    
    
    


9、局部结果和全局结果 OGNL


    resource

关注
打赏
1665367115
查看更多评论
立即登录/注册

微信扫码登录

0.2060s