在SpringMVC中获取request对象的几种方式

  1. 最简单,最直接的使用方式是直接写在参数中,而且还是多线程可以使用的。这种方式比较的好。但是麻烦
public String hello(HttpServletRequest request,HttpServletResponse response)  
  1. 比较麻烦的一种就是这种啦,我们通过注册spring-mvc中的监听器,然后使用里面的util方法,静态的使用
    在web.xml 中加入我们的监听器,触发初始化,spring内部的方法
<listener>  
        <listener-class>  
            org.springframework.web.context.request.RequestContextListener  
        </listener-class>  
</listener>  

之后我们就可以在程序中进行使用啦,看起来是比较的麻烦的

HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();  
  1. 第二种还是比较的方便的使用的,我们稍微增加点封装就好了每次在写Action层的时候,对于这样的对象进行封装一下,每一个Action都继承一下这个

import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

public class BaseAction {

    protected HttpServletRequest getServletRequest() {
        return ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
    }

    protected ServletContext getServletContext(){
        HttpServletRequest request = getServletRequest();
        if (request != null){
            return request.getSession().getServletContext();
        }

        return null;
    }
    protected HttpServletResponse getServletResponse(){
        return RequestResponseContext.getResponse();
    }
    protected void writeResponse(ActionResult result) throws IOException {
        HttpServletResponse response = getServletResponse();
        response.setContentType("text/html; charset=utf-8");
        OutputStream stream = response.getOutputStream();
        stream.write(JsonUtils.object2Json(result).getBytes("utf-8"));
        stream.flush();
        stream.close();
    }   
}
  1. 这里其实我们可以直接的使用spring-mvc直接放回 json对象,也可以按照最原始的,输出到response中去
    这里使用了,对于jackjson 的封装

import java.io.IOException;
import java.util.Map;

import com.fasterxml.jackson.databind.ObjectMapper;


public class JsonUtils {

    public static String object2Json(Object obj){
        String result = null;
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            result = objectMapper.writeValueAsString(obj);
        } catch (IOException e) {
            e.printStackTrace();
            LogUtils.logException(e);
        }
        return result;
    }

    public static Map<?, ?> jsonToMap(String json){
        return json2Object(json, Map.class);
    }

    public static <T> T json2Object(String json, Class<T> cls){
        T result = null;
        try {
            ObjectMapper objectMapper = new ObjectMapper();
            result =  objectMapper.readValue(json, cls);
        } catch (IOException e) {
            e.printStackTrace();
            LogUtils.logException(e);
        }

        return result;
    }

    public static <T> T conveterObject(Object srcObject, Class<T> destObjectType) {
        String jsonContent = object2Json(srcObject);
        return json2Object(jsonContent, destObjectType);
    }
}

logutil



import java.io.PrintWriter;
import java.io.StringWriter;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class LogUtils {

    public static void logException(Exception e) {
        StackTraceElement[] stacks = (new Throwable()).getStackTrace();
        String newClass = stacks[1].getClassName();
        StringBuffer logInfo = new StringBuffer(500);
        logInfo.append("[");
        logInfo.append(stacks[1].getLineNumber());
        logInfo.append("]");
        logInfo.append(stacks[1].getMethodName());
        StringWriter trace = new StringWriter();
        e.printStackTrace(new PrintWriter(trace));
        logInfo.append(" Exception:");
        logInfo.append(trace.toString());
        Logger logger = null;
        try {
            logger = LogManager.getLogger(Class.forName(newClass).getName());
            logger.error(logInfo.toString());
        } catch (ClassNotFoundException e1) {
            e1.printStackTrace();
        }
    }

    public static void logInfo(String message, Object... args) {
        StackTraceElement[] stacks = (new Throwable()).getStackTrace();
        String newClass = stacks[1].getClassName();
        StringBuffer logInfo = new StringBuffer(500);
        logInfo.append("[");
        logInfo.append(stacks[1].getLineNumber());
        logInfo.append("]");
        logInfo.append(stacks[1].getMethodName());
        logInfo.append(" INFO:");
        if (null != args){
            for (Object arg : args) {
                String[] strArr = message.split("\\{\\}", 2);
                if (arg == null) {
                    arg = "null";
                }
                message = strArr[0] + String.valueOf(arg) + strArr[1];
            }
        }
        logInfo.append(message);
        Logger logger = null;
        try {
            logger = LogManager.getLogger(Class.forName(newClass).getName());
            logger.info(logInfo.toString());
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static void logDebug(String message, Object... args) {
        StackTraceElement[] stacks = (new Throwable()).getStackTrace();
        String newClass = stacks[1].getClassName();
        StringBuffer logInfo = new StringBuffer(500);
        logInfo.append("[");
        logInfo.append(stacks[1].getLineNumber());
        logInfo.append("]");
        logInfo.append(stacks[1].getMethodName());
        logInfo.append(" DEBUG:");
        if (null != args){
            for (Object arg : args) {
                String[] strArr = message.split("\\{\\}", 2);
                if (arg == null) {
                    arg = "null";
                }
                message = strArr[0] + String.valueOf(arg) + strArr[1];
            }
        }
        logInfo.append(message);
        Logger logger = null;
        try {
            logger = LogManager.getLogger(Class.forName(newClass).getName());
            logger.debug(logInfo.toString());
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static void logError(String message, Object... args) {
        StackTraceElement[] stacks = (new Throwable()).getStackTrace();
        String newClass = stacks[1].getClassName();
        StringBuffer logInfo = new StringBuffer(500);
        logInfo.append("[");
        logInfo.append(stacks[1].getLineNumber());
        logInfo.append("]");
        logInfo.append(stacks[1].getMethodName());
        logInfo.append(" INFO:");
        if (null != args){
            for (Object arg : args) {
                String[] strArr = message.split("\\{\\}", 2);
                if (arg == null) {
                    arg = "null";
                }
                message = strArr[0] + String.valueOf(arg) + strArr[1];
            }
        }
        logInfo.append(message);
        Logger logger = null;
        try {
            logger = LogManager.getLogger(Class.forName(newClass).getName());
            logger.error(logInfo.toString());
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

ActionResult 封装好的比必要性

public class ActionResult {

    private boolean success;

    private String message;

    private Object data;


    public ActionResult(){
    }

    public ActionResult(boolean success){
        this(success, null, null);
    }

    public ActionResult(boolean success, String message){
        this(success, message, null);
    }

    public ActionResult(boolean success, String message, Object data){
        this.success = success;
        this.message = message;
        this.data = data;
    }

    /**
     * 获取success
     * @return success success
     */
    public boolean isSuccess() {
        return success;
    }

    /**
     * 设置success
     * @param success success
     */
    public void setSuccess(boolean success) {
        this.success = success;
    }

    /**
     * 获取message
     * @return message message
     */
    public String getMessage() {
        return message;
    }

    /**
     * 设置message
     * @param message message
     */
    public void setMessage(String message) {
        this.message = message;
    }

    /**
     * 获取data
     * @return data data
     */
    public Object getData() {
        return data;
    }

    /**
     * 设置data
     * @param data data
     */
    public void setData(Object data) {
        this.data = data;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值