JAVA Web学习(20)___第14章Struts2基础

2019-10-12  本文已影响0人  岁月静好浅笑安然

第14章Struts2基础

14.1 Struts2概述

14.1.1 理解MVC原理

14.1.2 Struts2框架的产生

14.1.3 Struts2的结构体系

14.2 Struts2入门

14.2.1 Struts2的获取与放置

开发struts项目必须添加的类库文件

名称 说明
struts2-core-2.5.20.jar Struts2 的核心类库
xwork-core-2.1.6.jar Xworkd 的核心类库
ognl-3.1.21.jar Ognl表达式语言类库
commons-logging-1.2.jar Log4j日志支持类库
freemarker-2.3.28.jar freemarker模板语言支持类库
commons-io-2.6.jar 处理IO操作的工具类库
commons-fileupload-1.4.jar 文件上传支持类库

14.2.2 第一个Struts程序

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="WebApp_ID" version="2.5">
    <display-name>8.1</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    <!-- Struts2过滤器 -->
    <filter>
        <!-- 过滤器名称 -->
        <filter-name>struts2</filter-name>
        <!-- 过滤器类 -->
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <!-- Struts2过滤器映射 -->
    <filter-mapping>
        <!-- 过滤器名称 -->
        <filter-name>struts2</filter-name>
        <!-- 过滤器映射 -->
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
    "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <!-- 声明包 -->
    <package name="myPackage" extends="struts-default">
        <!-- 定义action -->
        <action name="first">
            <!-- 定义处理成功后的映射页面 -->
            <result>/first.jsp</result>
        </action>
    </package>
</struts>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>主页</title>
</head>
<body>
    <a href="first.action">请求Struts2</a>
</body>

</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>第一个Struts2程序</title>
</head>
<body>
    第一个Struts2程序!
    <br>
</body>
</html>

14.3 Action对象

14.3.1 认识Action对象

Actions是Struts2框架的核心,因为它们适用于任何MVC(Model View Controller)框架。 每个URL映射到特定的action,其提供处理来自用户的请求所需的处理逻辑。
Action对象的方法说明

public interface Action {
   public static final String SUCCESS = "success";//
   public static final String NONE = "none";
   public static final String ERROR = "error";
   public static final String INPUT = "input";
   public static final String LOGIN = "login";
   public String execute() throws Exception;
}

14.3.2 请求参数的注入原理

setter方法注入getter方法获取

public class UserAction extends ActionSupport{
    private String username;
    public void setUsername(String username){
        this.username=username;
    }
    public String getUsername(){
        return username;
    }
    public String execute(){
    return SUCCESS;
    }
    
}

14.3.3 Action的基本流程

14.3.4 什么的动态Action

配置方法为Action地址与请求字符串之间以"!"号隔开
示例代码

/userAction!add

14.3.5 动态Action的应用

public class UserAction extends ActionSupport {
    private static final long serialVersionUID = 1L;
    // 提示信息
    private String info;
    // 添加用户信息
    public String add() throws Exception{
        info = "添加用户信息";
        return "add";
    }
    // 更新用户信息
    public String update() throws Exception{
        info = "更新用户信息";
        return "update";
    }
    public String getInfo() {
        return info;
    }
    public void setInfo(String info) {
        this.info = info;
    }
}

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
    "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <!-- 声明包 -->
    <package name="myPackage" extends="struts-default">
        <!-- 定义action -->
        <action name="userAction" class="com.lyq.action.UserAction">
            <!-- 添加成功的映射页面 -->
            <result name="add">user_add.jsp</result>
            <!-- 更新成功的映射页面 -->
            <result name="update">user_update.jsp</result>
        </action>
    </package>
</struts>


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ 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>添加用户信息</title>
</head>
<body>
    <font color="red"> 
        <s:property value="info"/>
    </font>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ 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>更新用户信息</title>
</head>
<body>
    <font color="red"> 
        <s:property value="info"/>
    </font>
</body>

</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>首页</title>
</head>
<body>
    <a href="userAction!add">添加用户</a>
    <br>
    <a href="userAction!update">更新用户</a>
</body>
</html>

14.4 Struts2的配置文件

14.4.1 Struts2的配置文件类型

Struts2的配置文件主要有4个

名称 说明
struts-default.xml 位于struts2-core-2.1.14.1.jar文件的org.apache.struts2包中
struts-plugin.xml 位于struts2提供的各个插件的包中
struts.xml web应用默认的struts2配置文件
struts.properties Struts2框架中属性配置文件
web.xml 在该文件中也可以设置Struts2框架的一些信息

14.4.2 Struts2的包配置

在struts.xml文件中使用包,不仅可以提高程序的可读性,还可以简化日后的维护工作,其使用方式如下

    <struts>
    <!--声明包 -->
    <package name="user" extends="struts-default" namespace="/user">
    </package>
    </struts>

14.4.3 名称空间配置

将book的名称空间指定为“/bookmanager”

    <struts>
    <!--声明包 -->
    <package name="book" extends="struts-default" namespace="/bookmanager">
    </package>
    </struts>

在<package>元素中指定名称空间属性,名称空间的值需要以"/"开头,否则找不到Action对象的访问地址。

14.4.4 Action相关配置

在struts.xml中,为action进行配置

    <action name="userAction" class="com.lyq.action.UserAction" method="save">
            <!-- 添加成功的映射页面 -->
            <result name="add">user_add.jsp</result>
            <!-- 更新成功的映射页面 -->
            <result name="update">user_update.jsp</result>
        </action>

<action>元素的属性及说明

属性 说明
name 用于配置Action对象被请求的URL映射
class 指定Action对象的类名
method 设置请求Action对象时,调用Action对象的哪一个方法
converter 指定Action对象类型转换器的类

14.4.5 通配符实现简化配置

在struts.xml中,通配符主要有两个

    <struts>
    <package name="myPackage" extends="struts-default" namespace="/">
    <action name="add*" class="com.lyq.action.{1}UserAction" >
            <!-- 添加成功的映射页面 -->
            <result name="add">user_add.jsp</result>
            <!-- 更新成功的映射页面 -->
            <result name="update">user_update.jsp</result>
        </action>
        </package>
    </struts>

<action>元素的name属性值为"add*",它匹配的是以字符"add"开头的字符串,如"addUser"、"addBook"都可以匹配

14.4.6 返回结果配置

<action name="add*" class="com.lyq.action.{1}UserAction" >
            <!-- 添加成功的映射页面 -->
            <result name="add">user_add.jsp</result>
            <!-- 更新成功的映射页面 -->
            <result name="update">user_update.jsp</result>
        </action>

如果不设置<result>元素的name属性,默认情况下,它的值为success。

14.5 Struts2的开发模式

14.5.1 实现Servlet API交互

    public static ActionContext getContext()
    public Object get(Object key)
    public Map getSession()
    public Map getApplication()

14.5.2 域模型DomainModel

14.5.3 驱动模型ModelDriven

14.6 典型应用

14.6.1 Struts2处理表单数据

public class GreetingAction extends ActionSupport {
    private static final long serialVersionUID = 1L;
    // 用户名
    private String username;
    // 处理请求
    @Override
    public String execute() throws Exception{
        // 判断用户名是否有效
    if(username == null || "".equals(username)){
            // 返回到错误页面
            return ERROR;
        }else{
            // 返回到成功页面
            return SUCCESS;
        }
    }
    // username属性的getter方法
    public String getUsername() {
        return username;
    }
    // username属性的setter方法
    public void setUsername(String username) {
        this.username = username;
    }
}

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
    "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
    <!-- 声明包 -->
    <package name="myPackage" extends="struts-default">
        <!-- 定义action -->
        <action name="greeting" class="com.lyq.action.GreetingAction">
            <!-- 定义成功的映射页面 -->
            <result name="success">success.jsp</result>
            <!-- 定义失败的映射页面 -->
            <result name="error">error.jsp</result>
        </action>
    </package>
</struts>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>主页</title>
<style type="text/css">
    *{font-size: 12px;}
</style>
</head>
<body>
  <form action="greeting.action" method="post">
    请输入你的姓名:<input type="text" name="username">
    <input type="submit" value="提交">
  </form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ 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>欢迎</title>
<style type="text/css">
    *{font-size: 12px;}
</style>
</head>
<body>
    <font color="red">
        <s:property value="username" />
    </font>
     ,您好!
    <br>
    欢迎使用来到本站。
</body>
</html>

在jsp页面中使用 Struts2提供的标签库,需要事先引入 Struts2的标签库,实例中通过"<%@ taglib prefix="s" uri="/struts-tags" %>"代码进行引入

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>错误</title>
</head>
<body>
    <font color="red"> 错误:您没有输入姓名!</font>
</body>
</html>

14.6.2 使用Map类型的request、session和application

上一篇 下一篇

猜你喜欢

热点阅读