struts2的琐碎知识点

servlet:void init(ServletConfig cfg):// 读取servlet的配置参数void service(ServletRequest request, ServletResponse response);// 服务方法,用户每次访问都会被执行void destroy();// 销毁方法filter:void init(FilterConfig cfg);// 读取filter的配置参数void doFilter(ServletRequest request, ServletResponse response,FilterChain chain);// 过滤方法,每次访问被过滤的资源都被执行void destroy();// 销毁方法OGNL:STRUTS2通过其读写对象的属性搭建struts2的开发环境:1.下载官方的struts2的发行包:struts2-2.3.15.3-all2.导入jar包到lib目录下:直接拷贝struts2发行包的app\struts2-blank\WEB-INF\lib下的jar即可3.在构建目录的顶端,建立一个struts2.xml配置文件4.在web.xml配置控制器映射,框架提供<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>5.验证,部署到tomcat服务器,启动,没有错误提示,成功// 规范// 指定访问是添加的后缀名字,多个后缀名以英文逗号(,)隔开<constant name="struts.action.extension" value="action,"/>// 当struts2的配置文件修改后,系统是否加载修改后的文件,默认为false<constant name="struts.configuration.xml.reload" value="false"/>// 开发模式开启<constant name="struts.devModel" value="true"/>// 设置视图的主题<constant name="struts.ui.theme" value="simple">// 长传文件大小的设置<constant name="struts.multipart.maxSize" value="1073930"/>package元素:name:必须唯一extends:必须继承struts-default,否则struts2的核心功能将无法使用namespace:命名空间,一般以"/" 开头,表示动作的访问路径:命名空间+动作名,不写默认为访问的该项目下的动作名action元素:name:动作名class:动作类的完整路径名,会根据反射机制实例化.反射获得构造方法,获得普通方法,获得字段属性method:方法名,默认是execute();反射机制:反着来,有对象得到类名,Class.forName():获取类对象在实际的操作过程中,凡是看到有参数传递了一个完整的"包.类"的形式,一般都是使用的反射机制作用的有重大数据,或者除了美元之外,所有的指数都在跌,之前多头行情大涨,一出现跌,你就可以去买跌,因为买跌是大趋势,在大趋势面前才可以稳定的赚钱

// 获取ServletAPI相关对象的实例public class ActionDemo extend ActionSupport{    public String execute(){        HttpServletContext request = ServletActionContext.getRequest();        HttpServletContext response = ServletActionContext.getResponse();        ServletContext application = ServletActionContext.getServletContext();        return null;    }}获取ServletAPI的原因:拦截器(ServletConfig)会给你注入这些实例结果视图:1.局部视图:服务于当前动作的结果<action name="upload" class="com.deng.UploadAction" method="execute"><result name="success" type="dispatcher">/1.jsp</result></action>2.全局视图:动作访问,当在局部视图中没有找到时候,去全局视图找<package name="p1" extends="struts-default">    <global-results>        <result name="success" type="dispatcher">1.jsp</result>    </global-results></package>

result元素name:逻辑视图的名称,他对应的是动作方法的返回值,默认为successtype:达到目标的形式,默认为dispatcher,转发

struts2的结果类型在struts-default.xml中1.chain:用户转发到另一个动作<action name="c1" class="com.deng.Ac1" method="m1">    <result name="success" type="chain">c2</result></action><action name="c2" class="com.deng.Ac2" method="m2">    <result name="success" type="dispatcher">/1.jsp</result></action>转发到不同命名空间的另外一个动作<action name="c1" class="com.deng.Ac1" method="m1">    <result name="success" type="chain">        <!--给chain对应类型的处理类,注入参数值,调用的是setter方法        <param name="namespace">/n2</param>        <param name="actionName">c2</param>    </result></action><action name="c2" class="com.deng.Ac2" method="m2">    <result name="success" type="dispatcher">/1.jsp</result></action>2.dispatcher:转发到另外一个jsp页面<action name="upload" class="com.deng.UploadAction" method="execute">    方法一:<result name="success" type="dispatcher">/1.jsp</result>    方法二:<result name="success" type="dispatcher">                <param name="location">/1.jsp</param>            </result></action>3.freemarker:用于转发到另外一个freemarker模板,页面静态化,一种用来生成静态文本的工具4.velocity:用于转发到另外一个velocity模板5.httpheader:用来输出http协议的消息头6.redirect:用于重定向到另外一个页面7.redirectAction:用于重定向到另外一个动作8.stream:用于文件下载9.plainText:以纯文本的形式展现

--------------------------------------封装用户请求参数,very important1.动态参数(用户请求的参数)注入方式一:用Action的动作类作为模型对象login.jsp<form action="${pageContext.request.contextPath}/regist.action" method="post">    username:<input name="username" type="text">    password:<input name="password" type="text">    <input type="submit" value="ok"</form>struts.xml配置文件<package name="p1" extends="struts-default">    <action name="regist" class="comg.deng.ResigtAction" method="regist">        <result name="success">/success.jsp</result>        <reuslt name="login">/login.jsp</result>    </action></package>动作类,动作类当作模型对象public class RegistAction extend ActionSupport{    private String password;    private String username;    public String getUsername(){        return username;    }    // 框架会按照表单的提交的参数值,调用对应的setter属性    public void setUsername(String username){        this.username = username;    }    。。。

public String regist(){        System.out.println(username+":"+password);        if("abc".equals(username)&&"123".equals(password))            return SUCCESS;        else            return LOGIN;    }}方式两:模型和动作类分开模型就是一个javaBeanpublic class Person implements Serializable{    private String username;    private String password;    public String getUsername(){        return username;    }    public void setUsername(){        this.username = username;    }    public String getPassword(){        return password;    }    public void setPassword(){        this.password = password;    }    @override    public String toString(){        return "Person[username="+"username+",password="+password+"]";    }}

动作类public class RegistAction extends ActionSupport{    // new 一个对象    Person person = new Person();    // 生成对象的getter和setter方法    public String getPerson(){        return person;    }    public void setPerson(Person person){        this.person = person;    }

public String regist(){        System.out.println(username+":"+password);        if("abc".equals(username)&&"123".equals(password))            return SUCCESS;        else            return LOGIN;    }}配置文件<package name="p1" extends="struts-default">    <action name="regist" class="comg.deng.ResigtAction" method="regist">        <result name="success">/success.jsp</result>        <reuslt name="login">/login.jsp</result>    </action></package>

表单<form action="${pageContext.request.contextPath}/regist.action" method="post">    username:<input name="person.username" type="text">    password:<input name="person.password" type="text">    <input type="submit" value="ok"</form>

方法三:模型驱动ModelDriven一个javaBeanpublic class Person implements Serializable{    private String username;    private String password;    public String getUsername(){        return username;    }    public void setUsername(){        this.username = username;    }    public String getPassword(){        return password;    }    public void setPassword(){        this.password = password;    }    @override    public String toString(){        return "Person[username="+"username+",password="+password+"]";    }}

动作类public class RegistAction implements ModelDriven<Person>{    // new 一个对象    private Person person = new Person();    // 生成对象的getter和setter方法    public String getPerson(){        return person;    }    public void setPerson(Person person){        this.person = person;    }

public String regist(){        System.out.println(username+":"+password);        if("abc".equals(username)&&"123".equals(password))            return SUCCESS;        else            return LOGIN;    }    public Person getModel(){        return person;    }}

配置文件<package name="p1" extends="struts-default">    <action name="regist" class="comg.deng.ResigtAction" method="regist">        <result name="success">/success.jsp</result>        <reuslt name="login">/login.jsp</result>    </action></package>

表单<form action="${pageContext.request.contextPath}/regist.action" method="post">    username:<input name="username" type="text">    password:<input name="password" type="text">    <input type="submit" value="ok"</form>

// 静态参数注入<package name="p1" extend="struts-default" namespace="/usr">    <action name="a1" class="com.deng.TomorrowAction" method="m1">        <param name="name">student</param>    <action></package>public class TomorrowAction extends ActionSupport{    private String name;// 这个name的值就是:student    public String getName(String name){        return name;    }    public void setName(){        this.name = name;    }    public String m1(){        System.out.println(name);        return null;    }}

原文地址:https://www.cnblogs.com/demo-deng/p/8304246.html

时间: 2024-10-12 04:18:20

struts2的琐碎知识点的相关文章

Scala琐碎知识点

tuple scala中的tuple数据结构,是用来包含不同数据类型的容器,定义如下: 访问tuple中的元素,需要使用._n的语法,索引从1开始: scala中的tuple的长度最多为22,超过22报错: 上述定义scala中的tuple的方式是下面这种方式的缩写: scala中的cons(:: 和 :::  ) 首先要知道在Scala中Nil代表的是空的列表List cons定义: x :: xs 如下就是把一个Int类型添加到Int类型的List中 ::: 这个运算符在scala中表示的是

Thinking in java 琐碎知识点之 I/O流 、对象序列化

Java I/O流 .对象序列化 1.File类 此类的实例可能表示(也可能不表示)实际文件系统对象,如文件或目录. File类可以新建.删除和重命名文件和目录,但是File不能访问文件本身的内容,这要使用IO流. File对象的createNewFile()方法在磁盘上创建真实的文件 例程:FileTest.java import java.io.*; public class FileTest { public static void main(String[] args) throws I

Java琐碎知识点

知识点1: 1 String str1 = "abc";// 没有创建任何对象 2 String str2 = new String("abc");// 创建了2个对象 3 String str3 = new String("abc");// 创建了1个对象 4 System.out.println(str1 == str2);// 输出:false 5 System.out.println(str1 == str3);// 输出:false 6

Tinking in java 琐碎知识点之反射

刚开始工作的这段时间,使用公司的成熟的开发框架,感觉越用越害怕.框架是提高了开发效率,但是也使得自己 对基础知识越来越陌生,基本都要忘光了.所以,为了告别这种心理上的害怕,最近开始学习Spring. 公司的开发框架是基于SpringMVC和hibernate封装而成,很多框架的细节的也都被屏蔽了,所以,自己连spring都 不会使用,这个很危险.所以,我自己也先从spring开始学习.曾经大体学过一点点spring,现在再回来学习,发现更 容易理解了,特别是IOC的概念,也可能是在使用公司的框架

Android琐碎知识点集合

1.最近发现android studio更新之后用的v7包,每次创建Activity的时候自动继承的是AppCompatActivity,很不舒服,还是习惯Activity.没什么大的毛病,毕竟google的新包嘛.但是有一个还是影响的,我遇到过一次如果继承的是AppCompatActivity,那么隐藏标题栏会失效.也就是这句代码不起作用,而且引起崩溃this.requestWindowFeature(Window.FEATURE_NO_TITLE);不知道为啥,我重新继承Activity就好

c琐碎知识点

1.singned char signed char / char / unsigned char  区别 ,主要在于char,char默认为是signed还是unsigned 与具体的编译器有关 ,vc6.0默认为signed. 2.可以在include 文件里面的 float.h 中查看 各种有关float的宏定义 3.八进制 0123  .十六进制 0x123 4.enum computer{ lianXiang: daiEr: hongJi: }: 用enum来定义 常量的取值范围 ,这

细节,琐碎知识点

1.类成员函数参数的默认参数如果为类成员变量时,改成员变量必须为静态成员变量. 2.类成员函数如果用默认形参,只需在头文件申明即可,在cpp文件不能再写入默认形参,否则会造成重定义错误. 3.静态成员变量记得要在cpp文件中定义. 4.静态成员变量只需在头文件申明加上static即可,在源文件不必再次写上static. 5.结构体可在内部直接初始化,类不可以. struct Test {     int a = 1;     int b = 2; }; 6.非聚合对象不能使用列表初始化.

js琐碎知识点

1.javascript发展史 javascript首先由Netscape设计,为改善浏览器用户体验,名为liveScript, 网景公司被sun公司收购,为了宣传改名为javascript 后来sun公司被oracle公司收购,javascript版权归oracle所有 2.浏览器 = shell + 内核   IE       trident   Chrome          webkit / blink (v8引擎,js代码直接转化为机械码来执行,渲染速度快)   Safari     

linux琐碎知识点

1.awk的使用方式,pattern支持正则表达式 1 awk 'pattern{action}' {filenames} 其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令.花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组. pattern就是要表示的正则表达式,用斜杠括起来. 2.有三种方式调用awk 命令行方式.shell脚本方式(#!/bin/awk).使用awk -f命令调用脚本