Struts2入门+案例

Struts2

Struts2是一个开发web程序的MVC框架。例如SpringMVC、Struts1、WebWork等框架。

Struts2的MVC结构

  • M模型:ValueStack、Interceptor
  • V视图:Result(dispatcher、redirect、json)
  • C控制器: StrutsPrepareAndExecuteFilter、Action
  1. 首先HTTP请求进入主控制器StrutsPrepareAndExecuteFilter
  2. 主控制器接收到请求后,根据请求分发给不同的Action进行处理
  3. Action组件可以调用Model处理具体业务,返回一个String结果
  4. 主控制器根据Action返回的String结果调用Result组件
  5. Result生成响应结果输出

Struts2 Hello Struts2 案例

  1. 创建web工程,引入struts2开发包
<dependencies>
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-core</artifactId>
        <version>2.5.8</version>
    </dependency>
    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-convention-plugin</artifactId>
        <version>2.5.8</version>
    </dependency>
</dependencies>
  1. 在web.xml配置Filter控制器
<filter>
    <filter-name>
    		strutsmvc
    </filter-name>
    <filter-class>
    		org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>
    		strutsmvc
    </filter-name>
    <url-pattern>
    		/*
    </url-pattern>
</filter-mapping>
  1. 编写HelloAction
//继承一个struts-default的package定义,可以使用内部定义的result、interceptor等
@ParentPackage("struts-default")
public class HelloAction {

    @Action(value="/hello",results= {
        @Result(name="success",type="dispatcher",location="/hello.jsp")
    })
    public String hello() {
        System.out.println("--执行了hello处理--");
        return "success";//对应result定义
    }
}
  1. 编写hello.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Hello Struts2</h1>
</body>
</html>

Action属性可以往JSP传值

@ParentPackage("struts-default")
public class HelloAction {
	private String name;
	//提供get() set()方法
	public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    
    @Action(value="/hello",results= {
        @Result(name="success",type="dispatcher",location="/hello.jsp")
    })
    public String hello() {
        System.out.println("--执行了hello处理--");
        name = "xiaohei";
        return "success";//对应result定义
    }
}

JSP通过EL表达式获取

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Hello ${name}</h1>
</body>
</html>

Struts2 返回JSON 案例

  1. 创建web工程,引入struts2开发包
<dependency>
	<groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.5.8</version>
</dependency>
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-convention-plugin</artifactId>
    <version>2.5.8</version>
</dependency>
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-json-plugin</artifactId>
    <version>2.5.8</version>
</dependency>
  1. 在web.xml配置StrutsPrepareAndExecuteFilter(同上个案例)
  2. 编写JsonAction
@ParentPackage("json-default")
//json-default继承struts-default 新增JSON
public class JsonAction {
    
    private String name;
    private String password;

    @Action(value = "/hello1", results = {
            @Result(name = "success",type = "json")
    })
    public String say(){
        System.out.println("正在执行hello1");
        name = "xiaohua";
        password = "123";
        return "success";
    }

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

Struts登录功能

  1. 创建web工程,引入struts2-core、struts2-convention-plugin
  2. 在web.xml配置StrutsPrepareAndExecuteFilter
  3. 编写LoginAction
@ParentPackage("struts-default")
public class LoginAction {

    private String username;//自动接收key=username的值
    private String password;//自动接收key=password的值

    @Action(value = "/login",results = {
        @Result(name="success",type = "dispatcher",location = "/index.jsp"),
        @Result(name = "fail",type = "dispatcher",location = "/login.jsp")
    })
    public String toLogin(){
        if("xiaohua".equals(username) && "123".equals(password)){
            return "success";
        } else {
            return "fail";
        }
    }

    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;
    }
}
  1. 准备login.jsp 、indes.jsp
发布了1 篇原创文章 · 获赞 0 · 访问量 9

猜你喜欢

转载自blog.csdn.net/p1242994784/article/details/105531509
今日推荐