zoukankan      html  css  js  c++  java
  • 02 Struts2框架----学习笔记2(了解一下,已过时)

    1.*号通配符优化struts.xml代码

    创建一个UserAction的动作类

    package action;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class UserAction extends ActionSupport{
    
        //添加用户
        public String add(){
            return SUCCESS;
        }
        //删除用户
        public String delete(){
            return SUCCESS;
        }
        //更新用户
        public String update(){
            return SUCCESS;
        }
        
        //查找用户
        public String find(){
            return SUCCESS;
        }
        
    }

    Struts.xml文件配置

    <!--第一种配置方式-->
        <!--<package name="p2" extends="struts-default">
            <action name="add" class="action.UserAction" method="add">
                <result name="success">/add.jsp</result>
            </action>
    
            <action name="delete" class="action.UserAction" method="delete">
                <result name="success">/delete.jsp</result>
            </action>
    
            <action name="find" class="action.UserAction" method="find">
                <result name="success">/find.jsp</result>
            </action>
    
            <action name="update" class="action.UserAction" method="update">
                <result name="success">/update.jsp</result>
            </action>
        </package>-->
    
        <!--采用通配符的方式-->
        <!-- 动作访问之通配符
               * :这里是一个*-->
        <package name="p2" extends="struts-default">
            <action name="*" class="action.UserAction" method="{1}">
                <result name="success">/{1}.jsp</result>
            </action>
        </package>

     2.Struts.xml配置文件中的result元素的type取值的四种类型

    chain的配置实例:

    <1>利用chain转发到同一个包下的不同action

    <package name="p3" extends="struts-default">
            <action name="hello1" class="action.HelloAction" method="sayHello">
                <result name="success" type="chain">hello2</result>
            </action>
    
            <action name="hello2" class="action.HelloAction2" method="sayHello2">
                <result name="success">/hello2.jsp</result>
            </action>
        </package>

    效果图:

    <2>利用chain转发到不同包下的不同action

    <package name="p3" extends="struts-default">
            <action name="hello1" class="action.HelloAction" method="sayHello">
                <result name="success" type="chain">hello3</result>
            </action>
    
            <action name="hello2" class="action.HelloAction2" method="sayHello2">
                <result name="success">/hello2.jsp</result>
            </action>
        </package>
    
        <package name="p4" extends="struts-default">
    
            <action name="hello3" class="action.HelloAction3" method="sayHello3">
                <result name="success">/hello3.jsp</result>
            </action>
        </package>

    注意:若加上namespace属性,则struts.xml文件的配置应修改为:

    <package name="p3" extends="struts-default" namespace="/n3">
            <action name="hello1" class="action.HelloAction" method="sayHello">
                <result name="success" type="chain">
                    <param name="namespace">/n4</param>
                    <param name="actionName">hello3</param>
                </result>
            </action>
    
            <action name="hello2" class="action.HelloAction2" method="sayHello2">
                <result name="success">/hello2.jsp</result>
            </action>
        </package>
    
        <package name="p4" extends="struts-default" namespace="/n4">
    
            <action name="hello3" class="action.HelloAction3" method="sayHello3">
                <result name="success">/hello3.jsp</result>
            </action>
        </package>

    效果图:

     3.动作类中的servlet api访问

    通过ServletActionContext获取获取servletapi

    package action;
    
    import javax.servlet.ServletContext;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class TestAction extends ActionSupport{
    
        public String test(){
            //获取servlet 的api方式
            //第一种方式:通过ServletActionContext
            //1.response
            HttpServletResponse response = ServletActionContext.getResponse();
            
            //2.request
            HttpServletRequest request = ServletActionContext.getRequest();
            
            //3.session
            HttpSession session =  request.getSession();
            
            //4.application【ServletContext】
            ServletContext application = ServletActionContext.getServletContext();
            
    
            //NONE不跳转,也就是不用找result标签
            return NONE;
        }
    }

    4.Action接收请求参数的方式

    (1)通过request对象

         //获取请求参数
            //第一种方法:通过request对象
            HttpServletRequest request =  ServletActionContext.getRequest();
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            
            System.out.println(username);
            System.out.println(password);

    (2)第2种方式:通过属性的set注入

    package action;
    import javax.servlet.ServletContext;
    import javax.servlet.http.HttpServletRequest;
    import javax.xml.ws.RequestWrapper;
    
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class LoginAction extends ActionSupport{
    
        private String username;
        private String password;
        
        
        public void setUsername(String username) {
            System.out.println("setUsername");
            this.username = username;
        }
    
    
        public void setPassword(String password) {
            System.out.println("setPassword");
            this.password = password;
        }
        
        public String login(){
    
            //获取请求参数
            /*//第一种方法:通过request对象
            HttpServletRequest request =  ServletActionContext.getRequest();
            String username = request.getParameter("username");
            String password = request.getParameter("password");*/
    
            System.out.println(username);
            System.out.println(password);
    
            //第二种方式:通过属性的set注入
            
            //NONE不跳转,也就是不用找result标签
            return NONE;
        }
    }

     (3)第3种方式:通过模型驱动(最常用)

    创建一个model---->User

    package model;
    
    public class User {
    
        private String username;
        private String password;
        public String getUsername() {
            return username;
        }
        public void setUsername(String username) {
            this.username = username;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        @Override
        public String toString() {
            return "User [username=" + username + ", password=" + password + "]";
        }
        
        
        
    }

    动作类代码:

    package action;
    import javax.servlet.ServletContext;
    import javax.servlet.http.HttpServletRequest;
    import javax.xml.ws.RequestWrapper;
    
    import com.opensymphony.xwork2.ModelDriven;
    import model.User;
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class LoginAction extends ActionSupport implements ModelDriven<User> {
    
        private User user = new User();
        @Override
        public User getModel() {
            // TODO Auto-generated method stub
            return user;
        }
    
        public String login(){
    
            //获取请求参数
            /**
             * 第三种方式: 通过模型驱动【最常用】
             * 实现步骤:
             * 1.在action里实现一个模型驱动接口
             * 2.提供一个模型属性,并一定要赋值
             * 通过这种方式,在jsp页面中就不用写user.
             *
             * 这是模型驱动的原理是因为有个模型驱动的拦截器在处理
             * 这个类就com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor
             */
            System.out.println(user);
            
            //NONE不跳转,也就是不用找result标签
            return NONE;
        }
    }

    控制台输出:

  • 相关阅读:
    SharePoint 2013 配置基于表单的身份认证
    SharePoint 2013 场解决方案包含第三方程序集
    SharePoint 2010 站点附加数据升级到SP2013
    SharePoint 2013 在母版页中插入WebPart
    SharePoint 2013 搭建负载均衡(NLB)
    SharePoint 部署解决方案Feature ID冲突
    SharePoint 2013 配置基于AD的Form认证
    SharePoint Server 2016 Update
    SharePoint 2013 为用户组自定义EventReceiver
    SharePoint 2013 JavaScript API 记录
  • 原文地址:https://www.cnblogs.com/luckyplj/p/11293897.html
Copyright © 2011-2022 走看看