• 【基于初学者】Struts框架


    ---恢复内容开始---

    Struts相关知识点

        Struts是什么?   是基于MVC模式的web应用框架,它本质上相当于一个servlet

    Struts的配置

         在eclipse中创建一个项目 然后在当前项目中WEB-INF文件夹下的lib文件中导入有关Struts的jar文件,接着在src里面创建一个struts.xml文件 在当前项目中找到Libraries→Web App Libraries点击→有一个struts2-core-2.3.24.jar文件里面有一个struts-default.xml文件点击有一下

    <!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

    这段复制到在src里面创建一个struts.xml文件中 接着写配置文件 如:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE struts PUBLIC
     3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
     4     "http://struts.apache.org/dtds/struts-2.3.dtd">
     5 <struts>
     6   <package name="mypackage" extends="struts-default">
     7         <!-- 通用符 ! login!add.action * -->
     8         <action name="login*" class="com.action.LoginAction" method="{1}">
     9         <result name="success">/success.jsp</result>
    10         </action>
    11       </package>
    12 </struts>

    接着在web.xml文件里面写个过滤器,不写会在网页是报个404找不到路径的错 web.xml文件写 如图:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
     3     <display-name>struts01</display-name>
     4     <welcome-file-list>
     5         <welcome-file>index.html</welcome-file>
     6         <welcome-file>index.htm</welcome-file>
     7         <welcome-file>index.jsp</welcome-file>
     8         <welcome-file>default.html</welcome-file>
     9         <welcome-file>default.htm</welcome-file>
    10         <welcome-file>default.jsp</welcome-file>
    11     </welcome-file-list>
    12 
    13     <!-过滤器->
    14          <filter>
    15       <filter-name>struts2</filter-name>
    16 <!-Ctrl+Shift+T 输入StrutsPrepareAndExecuteFilter->
    17 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    18 </filter> 18 <filter-mapping> 19 <filter-name>struts2</filter-name>
    19 <url-pattern>*.action</url-pattern>
    20 </filter-mapping>
    21 </web-app>

          

    知识点一

         数据封装: 属性封装    模型驱动封装   表达式封装 (注意:在一个action中不能给对同一个表单使用属性封装和模型驱动封装,如果使用只会执行模型驱动封装)

           模型驱动封装的实现步骤:

                    01:创建实体类(属性名必须和表单的name属性值一致)

                    02:action实现ModelDriven接口

                    03:实现ModelDriven的接口的getModel方法 如:private 实体类 实体类对象名=new实体类();   public 实体类 getModel(){ return 实体类对象名;}

    实体类

     1 package com.entity;
     2 
     3 public class ELogin {
     4    
     5     public ELogin(String uname, String upassword) {
     6         super();
     7         this.uname = uname;
     8         this.upassword = upassword;
     9     }
    10     
    11     public ELogin() {
    12         super();
    13         // TODO Auto-generated constructor stub
    14     }
    15     private String uname;
    16     private String upassword;
    17     
    18     public String getUname() {
    19         return uname;
    20     }
    21     public void setUname(String uname) {
    22         this.uname = uname;
    23     }
    24     public String getUpassword() {
    25         return upassword;
    26     }
    27     public void setUpassword(String upassword) {
    28         this.upassword = upassword;
    29     }
    30     
    31     
    32 }

    Action类

     1 public class LoginAction extends ActionSupport implements ModelDriven<ELogin> {
     2 
     3     public String admin() {
     4         System.out.println(elogin.getUname() + "_____________" + elogin.getUpassword());
     5         return NONE;
     6     }
     7     
     8     //实例化实体
     9     private ELogin elogin = new ELogin();
    10 
    11     /**
    12      * 模型驱动封装
    13      */
    14     @Override
    15     public ELogin getModel() {
    16         // TODO Auto-generated method stub
    17         return elogin;
    18     }
    19 
    20 }

    JSP页面

    1 <body>
    2    <form action="loginadmin.action" method="post">
    3     用户名:<input name="uname">
    4     密&nbsp;码:<input type="password" name="upassword">
    5     <input type="submit" value="提交">
    6   </form>
    7 </body>

          表达式封装的实现步骤:

                    01:在Action类中声明实体类:private 实体类 实体类对象名;

                    02:生成实体类对象名的set和get的方法

                    03:修改表单属性值:name="实体类对象名.属性名"(users.username)

         Action类     

    package com.action;
    
    import com.entity.ELogin;
    import com.opensymphony.xwork2.ActionSupport;
    
    public class Login2Action extends ActionSupport{
        public String admin() {
            System.out.println(elogin.getUname() + "_____________" + elogin.getUpassword());
            return NONE;
        }
    
        /**
         * 表达式封装
         */
        private ELogin elogin;
    
        public ELogin getElogin() {
            return elogin;
        }
    
        public void setElogin(ELogin elogin) {
            this.elogin = elogin;
        }
        
        
    }

       讲了这么多肯定有人在想表达式封装和模型封装之间有什么区别 下面就讲讲它们之间的区别:   

           表达式封装和模型封装的相同点以及不同点

            相同点:简单的说都可以把数据封装到实体类中

            不同点:模型驱动封装只能够把数据封装到一个实体类中,在一个action里面只能实现一次ModelDriven的接口所以模型封装只会封装一个到一个实体类中,而表达式封装可以把数据封装到多个对象中.

     知识点二          

            OGNL表达式写法 

               说道ognl表达式,我们可能会想到El表达式,对它们都是很强的表达式语言,但是El表达式在Struts1中比较常用的,Struts2则默认使用了OGNL表达式,结合Struts2的标签库,完成了页面的数据绑定.说道这就给大家简单说说Struts1和Struts2的区别

               Struts1和Struts2的区别?

                    都是MVC的WEB框架,Struts1是一个老的框架,当应用很广泛,有很好的群众基础,使用它开发风险很小,成本低,那为什么要用Struts2呢?Struts2毕竟是站在前辈的基础设计出来,它会改善Struts1中的一些缺陷,Struts1中一些问题在Struts2中能得到解决.

              回归正题 OGNL表达式的使用    先导入Struts2的标签库  <%@ taglib uri="/struts-tags" prefix="s"%>   使用标签库 <s:property value="'haha'.Length()"/>

     知识点三    值栈

             什么是值栈?

                        Struts2里面本身提供的一种存储机制,类似于域对象,值栈,可以存值和取值.

                 action和servlet区别?

                        每次访问action的时候,都会创建一个新的action对象,而servlet只能有一个对象.

                 怎么获取值栈的对象 如图:    

       action类

    package com.action;

    import java.security.KeyStore.PrivateKeyEntry;
    import java.util.ArrayList;
    import java.util.List;

    import javax.servlet.http.HttpServletRequest;

    import org.apache.struts2.ServletActionContext;

    import com.entity.Person;
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.util.ValueStack;

    public class IndexAction extends ActionSupport{

    private String name;


    public String getName() {
    return name;
    }

    @Override
    public String execute() throws Exception {
    // // 1 获取值栈对象
      ActionContext actionContext=ActionContext.getContext();
      //v1值栈对象 存于action对象中
      //每一次访问action就会产生一个新的action对象
      ValueStack v1=actionContext.getValueStack();
      v1.push("PUSH的值");
      v1.set("zking", "set的值");

    }

    }

             Jsp 页面  

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3     <%@ taglib prefix="s" uri="/struts-tags" %>
     4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     5 <html>
     6 <head>
     7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     8 <title>Insert title here</title>
     9 </head>
    10 <body>
    11     <s:property value="zking"/>
    12    <s:debug></s:debug> 
    13 </body>
    14 </html>

             值栈的结构?root 结果是list集合   context  结果是map集合

       简单讲一下struts2标签库+ognl表达式

             基础数据  <s:property value="放入的变量名"/>

                 对象  <s:property value="对象名.属性名"/>(不要在属性名前面加上get或者set)

                 List集合三种方法   第一种:<s:property value="集合变量名[下标].属性名"/>

                                                 第二种:<s:iterator value="集合变量名">
                                                              <s:property value="集合对象的属性名"/>
                                                                  </s:iterator>

                                                  第三种:<s:iterator value="集合变量名" var="元素变量名">

                                                               <s:property value="#元素变量名.属性名"/>
                                                                   </s:iterator>

     

     

    ---恢复内容结束---

  • 相关阅读:
    [转]Android输入法框的梳理
    [转]Android中OptionMenu的使用
    [转] Android把view的画面转换为bitmap
    Health Level Seven International (HL7)
    [转]andriod的apk文件相关的编译反编译工具
    [转]Android优秀开源项目收集
    而立之年 独立自主
    [转]Android模拟键盘和键盘监听的一些调研
    [转] linux中如何能在DDMS中打开真机中的数据库
    [转]关于使用SurfaceFligner进行绘图的具体实现方法
  • 原文地址:https://www.cnblogs.com/BeautifulDay/p/7751585.html
Copyright © 2020-2023  润新知