zoukankan      html  css  js  c++  java
  • Struts 2初体验

    Struts2简介:

        Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。

    Struts 2 目录结构:
        apps目录:Struts2示例应用程序
        docs目录:Struts2指南、向导、API文档
        lib目录:Struts 2的发行包及其依赖包
        src目录:Struts 2项目源代码

    使用Struts 2 开发程序的基本步骤

    --手动添加Struts支持

        1.第一步:加载Struts2 类库,既是添加jar包

            1. commons-logging-1.1.x.jar ASF出品的日志包,struts2使用这个日志包来支持JDK和Log4j的日志记录。
            2. freemarker-2.3.x.jar 表现层框架,定义了struts2的可视组件主题,struts2的UI标签的模版,使用FreeMark编写
            3. ognl-2.6.x.jar 对象图导航语言(Object Graphic Navigation Language),struts2框架通过其读写对象属性,一种功能强大的表达式语言
            4. struts2-core-2.x.x.jar struts2的核心类库
            5. xwork.jar webwork的核心库,struts2在其上构建
            6. commons-fileupload-1.2.1.jar 文件上传组件,2.1.6版本后必须加入此文件
            7.struts2-dojo-plugin-2.3.4     为struts所提供的一些控件例如:日历

         2.第二步:配置web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0" 
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
      <display-name></display-name>    
      <welcome-file-list>
        <welcome-file>index.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>
      <filter-mapping>
          <filter-name>struts2</filter-name>
          <url-pattern>/*</url-pattern>
      </filter-mapping>
      <!-- 注意:
              1.filter-class中类的地址可在:
                          (1)可建一个类,在类中点出来。
                          (2)或直接在Libraries 下 struts2-dojo-plugin-2.1.8.jar下找到右键copy类的路径,但必须把后缀点class删掉。
              2.url-pattern中的值:
                          (1)/*代表所有页面都会经过此过滤器。
                          (2)或*.action或*.do后缀的页面都会经过此过滤器。 -->
    </web-app>

        

        3.第三步:开发视图层页面login.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>登录页面</title>
        
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">    
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
        <!--
        <link rel="stylesheet" type="text/css" href="styles.css">
        -->
    
      </head>
      
      <body>
                   <h3>登录页面</h3>
                   <form action="userAction" method="post" >
                       用户名:<input type="text" name="uname"/><br />
                       密码:   <input type="password" name="upassword" ><br />
                       <input type="submit" value="提交登录" >
                   </form>
      </body>
    </html>

        4.第四步:开发控制层com.struts包下或com.action包

    package com.struts;
    /**
     * 控制层
     * @author asus
     *
     */
    public class UserAction {
    
        /** 
         * 此属性用来接收form表单提交过来的值,属性名与form表单中name属性名一致
         * 必须生成get,set方法 */
        private String uname;
        private String upassword;
        
        public String execute(){
            if(uname!=null && uname.equals("admin") && upassword.equals("123")){
                //进入则代表账号密码输入正确
                return "success";
            }
            return "error";
        }
        /** JavaBean */
        public String getUname() {
            return uname;
        }
    
        public void setUname(String uname) {
            this.uname = uname;
        }
    
        public String getUpassword() {
            return upassword;
        }
    
        public void setUpassword(String upassword) {
            this.upassword = upassword;
        }
        
    }

        5.第五步:配置Struts 2配置文件src下创建(struts.xml)需要选TDT struts-2.1.dtd

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "struts-2.1.dtd" >
    <!-- 配置Struts2配置文件 -->
    <struts>
    <!-- 
            package:包
            name:包名,唯一的,必选项
            namespace:命名空间,唯一的,相当于房间号。可选项,省略情况下是“/”
            extends:继承
                extends=“struts-default”:struts2框架底层提供的核心包struts2-core-2.3.3.jar下的struts-default.xml文件
                为什么要继承这个struts-default.xml文件
                    因为struts框架底层提供的struts-default.xml声明了所有的拦截器和拦截器栈。
                    我们知道struts2框架运行时执行struts-default.xml中的拦截器栈完成必要功能。
                    如果不继承struts-default.xml文件,就没有办法使用struts2提供的所有拦截器。
            
         -->
        <package name="struts2" namespace="/" extends="struts-default" >
         <!--  
                action:
                name:对应页面请求链接的后面半部分
                class:对应要执行的类的完整路径
            -->
            <action name="userAction" class="com.struts.UserAction" >
            <!-- 
                result:结果类型
                    name:对应的是执行的类的方法的返回值
                     后半部分文本内容:转向的页面
                -->
                <result name="success" >/loginSuccess.jsp</result><!-- 账户密码正确跳转此页面 -->
                <result name="error" >/login.jsp</result><!-- 账户密码错误跳转登录页面重新输入 -->
            </action>
        </package>
    </struts>
        

        6.第六步:部署、运行项目

    --自动添加Struts支持

        --MyEclipse自动添加Struts 支持

          右键项目-->MyEclipse-->Add Struts Capabilities

        注意:Hibernate+Struts2时,若两个支持都是自动生成的则会有一个  antlr-2.7.2.jar 包冲突。必须去掉一个。一般是移掉Struts2的。

        附加移除操作图:

          

    使用对象接收from表的提交的值

    属性设值的方式
    (1):简单:在Action设置属性,生成SET与GET方法。

    参数的名称与属性的名称一致。


    (2):Action中设置Bean的属性

    Bean必须生成SET、GET方法。Bean不可以实例化。
    Bean中必须要有一个默认的空参数的构造方法。

    参数的名称 = bean的名称.bean中属性的名称。

    Struts 2访问Servlet API

    /** Struts 2访问Servlet API
             */
            /**1.与Servlet API解耦的访问方式*/
                //上下文对象
                ActionContext context = ActionContext.getContext();
                //request范围
                Map<String, Object>  request=(Map<String, Object>) context.get("request");
                request.put("num1", 1);
                //session范围
                Map<String, Object> session = context.getSession();
                session.put("num2", 2);
                //application范围
                Map<String, Object> application = context.getApplication();
                application.put("num3", 3);
            /** 2.与Servlet API耦合的访问方式*/
             
                //request范围
                HttpServletRequest request = ServletActionContext.getRequest();
                request.setAttribute("num1", 4);
                //session范围
                HttpSession session = ServletActionContext.getRequest().getSession();
                session.setAttribute("num2", 5);
                //application范围
                ServletContext application = ServletActionContext.getServletContext();
                application.setAttribute("num3", 6);
  • 相关阅读:
    # 机器学习算法总结-第七天(线性回归)
    # 机器学习算法总结-第六天(Adaboost算法)
    # 机器学习算法总结-第五天(降维算法PCA/SVD)
    #再谈 CVE-2017-10271回显POC构造
    # 机器学习算法总结-第四天(SKlearn/数据处理and特征工程)
    # 机器学习算法总结-第三天(支持向量机)
    # 机器学习算法总结-第二天(朴素贝叶斯、逻辑回归)
    # 机器学习算法总结-第一天(KNN、决策树)
    # weblogic CVE-2019-2615/2618(任意文件读取,任意文件上传)
    # CVE-2019-2725二次反序列化EventData Gadget POC/JdbcRowSetImpl POC构造
  • 原文地址:https://www.cnblogs.com/wkrbky/p/5886937.html
Copyright © 2011-2022 走看看