• 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;
    }
    }
  • 相关阅读:
    深入探究分布式锁
    Java的类加载器有几种?什么是双亲委派机制?
    Java的Arrays.sort()方法到底用的什么排序算法
    什么是SPI
    Go语言学习笔记(八)golang 操作 Redis & Mysql & RabbitMQ
    Go语言学习笔记(七)杀手锏 Goroutine + Channel
    Go语言学习笔记(六)net & net/http
    Go语言学习笔记(五)文件操作
    Go语言学习笔记(四)结构体struct & 接口Interface & 反射reflect
    Go语言学习笔记(三)数组 & 切片 & map
  • 原文地址:https://www.cnblogs.com/demo-deng/p/8304246.html
Copyright © 2020-2023  润新知