美文网首页
JAVA Web学习(20)___第14章Struts2基础

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

作者: 岁月静好浅笑安然 | 来源:发表于2019-10-12 11:08 被阅读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程序

    • 1.在web.xml中声明Struts2提供的过滤器
    <?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>
    
    • 2.在源码文件夹中(Src)创建struts.xml的配置文件
    <!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>
    
    
    • 3.创建主程序index.jsp
    <%@ 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>
    
    • 4.创建first.jsp
    <%@ 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的应用

    • 1.创建UserAction.java ,并且分别编写add()方法与update()方法,用于处理添加用户信息的请求及更新用户信息
    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;
        }
    }
    
    
    • 2.创建struts.xml(存放在源码文件夹即src文件夹)
    <!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>
    
    
    
    • 3.创建user_add.jsp
    <%@ 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>
    
    • 4.创建user_update.jsp
    <%@ 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>
    
    • 5.创建index.jsp
    <%@ 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中,通配符主要有两个

    • 1.通配符"*",匹配0个或多个字符
    • 2.通配符"":是一个转义字符,如需要匹配"",则使用"/"进行匹配
        <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交互

    • 实例化ActionContext
        public static ActionContext getContext()
    
    • 获取Map类型request
        public Object get(Object key)
    
    • 获取Map类型的session
        public Map getSession()
    
    • 获取Map类型的application
        public Map getApplication()
    

    14.5.2 域模型DomainModel

    14.5.3 驱动模型ModelDriven

    14.6 典型应用

    14.6.1 Struts2处理表单数据

    • 1.创建GreetingAction.java
    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;
        }
    }
    
    
    • 2.创建struts.xml(放在源码文件夹下,即src目录)
    <!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>
    
    • 3.创建index.jsp
    <%@ 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>
    
    • 4.创建success.jsp
    <%@ 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" %>"代码进行引入

    • 6.创建error.jsp
    <%@ 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

    相关文章

      网友评论

          本文标题:JAVA Web学习(20)___第14章Struts2基础

          本文链接:https://www.haomeiwen.com/subject/djqqmctx.html