zoukankan      html  css  js  c++  java
  • 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-all
    2.导入jar包到lib目录下:直接拷贝struts2发行包的appstruts2-blankWEB-INFlib下的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:逻辑视图的名称,他对应的是动作方法的返回值,默认为success
    type:达到目标的形式,默认为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 important
    1.动态参数(用户请求的参数)注入
    方式一:用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;
    }
    }
    方式两:模型和动作类分开
    模型就是一个javaBean
    public 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
    一个javaBean
    public 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;
    }
    }
  • 相关阅读:
    5-python基础—获取某个目录下的文件列表(适用于任何系统)
    Automated, Self-Service Provisioning of VMs Using HyperForm (Part 1) (使用HyperForm自动配置虚拟机(第1部分)
    CloudStack Support in Apache libcloud(Apache libcloud中对CloudStack支持)
    Deploying MicroProfile-Based Java Apps to Bluemix(将基于MicroProfile的Java应用程序部署到Bluemix)
    Adding Persistent Storage to Red Hat CDK Kit 3.0 (在Red Hat CDK Kit 3.0添加永久性存储)
    Carve Your Laptop Into VMs Using Vagrant(使用Vagran把您笔记本电脑刻录成虚拟机)
    使用Python生成一张用于登陆验证的字符图片
    Jupyter notebook的安装方法
    Ubuntu16.04使用Anaconda5搭建TensorFlow使用环境 图文详细教程
    不同时区的换算
  • 原文地址:https://www.cnblogs.com/demo-deng/p/8304246.html
Copyright © 2011-2022 走看看