zoukankan      html  css  js  c++  java
  • 几种对数据的处理以及对数据的封装

    1、直接获取servletapi

    核心类:servletActionContext提供的静态方法

    package com.data;
    import javax.servlet.ServletContext;
    import javax.servlet.http.HttpServletRequest;
    
    
    import javax.servlet.http.HttpSession;
    
    import org.apache.struts2.ServletActionContext;
    
    
    
    /*
     * 数据操作
     */
    import com.opensymphony.xwork2.ActionSupport;
    
    public class DataAction extends ActionSupport {
    	@Override
    	public String execute() throws Exception {
    		// TODO Auto-generated method stub
    		//1、请求数据封装,2、调用servlet处理业务,拿到结果数据集
    		
    		//3、数据保存到域中
    		
    		//struts对数据的操作,方式一,直接拿到servletApi,执行操作
    		HttpServletRequest request=ServletActionContext.getRequest();
    		HttpSession session=request.getSession();
    		ServletContext application=request.getServletContext();
    		//操作
    		request.setAttribute("request_data", "request_data");
    		request.setAttribute("session_data", "session_data");
    		request.setAttribute("application_data", "application_data");
    		
    		return SUCCESS;
    	}
    }
    

     2、通过ActionContext获取不同的map

    (注意:对actionContext的初始化不能再构造方法中执行,因为struts的执行顺序是:先执行Action类的创建,在执行拦截器,拦截器执行完后,在执行action类的业务逻辑方法,会导致数据为空)

    package com.data;
    import java.util.Map;
    
    import javax.servlet.ServletContext;
    import javax.servlet.http.HttpServletRequest;
    
    
    import javax.servlet.http.HttpSession;
    
    import org.apache.struts2.ServletActionContext;
    
    
    
    
    
    import com.opensymphony.xwork2.ActionContext;
    /*
     * 数据操作
     */
    import com.opensymphony.xwork2.ActionSupport;
    
    public class DataAction1 extends ActionSupport {
    	@Override
    	public String execute() throws Exception {
    		// TODO Auto-generated method stub
    	
    		/*
    		 * 解耦的方式实现对数据的操作
    		 */
    		ActionContext ac=ActionContext.getContext();
    		//得到struts对HttpServletRequest对象进行封装为一个Map对象
    		//拿到表示request对象的Map
    		Map<String ,Object> request=ac.getContextMap();
    		//拿到表示session对象的map
    		Map<String , Object> session=ac.getSession();
    		//拿到表示ServletContext对象的Map
    		Map<String, Object> application=ac.getApplication();
    		
    		request.put("request_data", "request_data_ActionContext");
    		request.put("session_data", "session_data_ActionContext");
    		request.put("application_data", "application_data_ActionContext");
    		return SUCCESS;
    	}
    }
    

     3、实现接口的方法(RequestAware,SessionAware,ApplicationAware)

    package com.data;
    import java.util.Map;
    
    import javax.servlet.ServletContext;
    import javax.servlet.http.HttpServletRequest;
    
    
    import javax.servlet.http.HttpSession;
    
    import org.apache.struts2.ServletActionContext;
    import org.apache.struts2.interceptor.ApplicationAware;
    import org.apache.struts2.interceptor.RequestAware;
    import org.apache.struts2.interceptor.SessionAware;
    
    import com.opensymphony.xwork2.ActionContext;
    /*
     * 数据操作
     */
    import com.opensymphony.xwork2.ActionSupport;
    /*
     * 方式三:实现接口的方式
     */
    public class DataAction2 extends ActionSupport implements RequestAware,SessionAware,ApplicationAware {
    	private Map<String, Object> request;
    	private Map<String, Object> session;
    	private Map<String, Object> application;
    	
    	
    	//在struts运行的时候会把代表application的map注入
    	@Override
    	public void setApplication(Map<String, Object> arg0) {
    		// TODO Auto-generated method stub
    		this.application=arg0;
    	}
    	//在struts运行的时候会把代表session的map注入
    	@Override
    	public void setSession(Map<String, Object> arg0) {
    		// TODO Auto-generated method stub
    		this.session=arg0;
    	}
    	//在struts运行的时候会把代表request的map注入
    	@Override
    	public void setRequest(Map<String, Object> arg0) {
    		// TODO Auto-generated method stub
    		this.request=arg0;
    	}
    	
    	@Override
    	public String execute() throws Exception {
    		// TODO Auto-generated method stub
    		//数据
    		request.put("request_data", "request_data_Aware");
    		request.put("session_data", "session_data_Aware");
    		request.put("application_data", "application_data_Aware");
    		return SUCCESS;
    	}
    
    	
    }
    

     总结:

      第一种是与servlet的耦合度很高,其余两种都是解耦的方式,第二种和第三种的区别不大,如果action中业务方法很多,最好使用第三种,因为获取的request,session和application几乎都会在业务方法中执行的。


    对表单提交的数据封装:

    1、首先先一个注册页面:

    	<form action="${pageContext.request.contextPath }/user_register.action" method="post">
      		用户名:<input type="text" name="user.name"><br/>
      		密码:<input type="text" name="user.pwd"><br/>
      		年龄:<input type="text" name="user.age"><br/>
      		生日:<input type="text" name="user.birth"><br/>
      		
      		<input type="submit" value="注册">
      	</form>
    

     2、写一个user类

    package com.type;
    
    import java.util.Date;
    
    public class User {
    
    	// 封装请求数据
    	private String name;  // 必须给set / get可以不用给
    	private String pwd;
    	private int age;
    	private Date birth;
    	public void setName(String name) {
    		this.name = name;
    	}
    	public void setPwd(String pwd) {
    		this.pwd = pwd;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	public void setBirth(Date birth) {
    		this.birth = birth;
    	}
    	public String getName() {
    		return name;
    	}
    	public String getPwd() {
    		return pwd;
    	}
    	public int getAge() {
    		return age;
    	}
    	public Date getBirth() {
    		return birth;
    	}
    	
    }
    

     3、在action类中添加setUser()和getUser()方法(若都不写,会报错,因为对于setUser()方法,在jsp页面中使用了user.属性去设置值,而对于getUser()方法不写,则可能会无法接到一些数据,使值为null)

    package com.type;
    
    import java.util.Date;
    
    /**
     * Struts核心业务: 请求数据自动封装以及类型转换
     * @author Jie.Yuan
     *
     */
    public class UserAction {
    	
    	 // 对象类型,一定给get方法
    	private User user; 
    	public void setUser(User user) {
    		this.user = user;
    	}
    	
    
    	// 处理注册请求
    	public String register() {
    		System.out.println(user.getName());
    		System.out.println(user.getPwd());
    		System.out.println(user.getAge());
    		System.out.println(user.getBirth());
    		return "success";
    	}
    }
    

     继续去配置struts.xml文件就OK了。可以看到控制台的信息


    js练习:格子图片

    <!DOCTYPE html>
    <html>
    
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>格子图</title>
        <style type="text/css" media="screen">
        * {
            margin: 0;
            padding: 0;
        }
        
        li {
             50px;
            height: 50px;
            background: red;
            position: absolute;
            left: 0;
            top: 0;
            list-style: none;
            background: url(img/1.jpg) no-repeat;
        }
        </style>
    </head>
    
    <body>
        <ul id="ulpic"></ul>
        <script type="text/javascript">
        var oUl = document.getElementById('ulpic');
        var str = '';
        for (var i = 0; i < 20; i++) {
            for (var j = 0; j < 38; j++) {
                //background-position属性设置背景图像的起始位置
                str += '<li style="float:letf;left:' + (52 * j) + 'px;top:' + (52 * i) + 'px;background-position:' + (-50 * j) + 'px ' + (-50 * i) + 'px;"></li>';
            }
        }
        oUl.innerHTML = str;
        </script>
    </body>
    
    </html>
    

     效果如图:

    background-position:后面有两个属性,第一个是水平位置,第二个是垂直方向的位置,这里需注意的是两个属性的顺序
    比如说 
    background-position: left -29px;(当中的left指从图片的最左端读起,-29px就是将图片向上移动29px,然后开始读)
    再如:background-position: 15px 20px;(指将图片向右移15px,向下移20px;)
    简单地说,就是以图片的左上角顶点为原点,往下和右都为正,反之为负,

  • 相关阅读:
    Github 上热门的 Spring Boot 项目实战推荐
    深入理解建造者模式 ——组装复杂的实例
    别死写代码,这 25 条比涨工资都重要
    Spring Boot 使用 JWT 进行身份和权限验证
    秋招打怪升级之路:十面阿里,终获offer!
    一问带你区分清楚Authentication,Authorization以及Cookie、Session、Token
    适合新手入门Spring Security With JWT的Demo
    面试官:“谈谈Spring中都用到了那些设计模式?”。
    春夏秋冬又一春之Redis持久化
    Mysql锁机制简单了解一下
  • 原文地址:https://www.cnblogs.com/helloworldcode/p/6160418.html
Copyright © 2011-2022 走看看