增强servlet

package cn.itcast.tool.servlet;


import java.io.IOException;
import java.lang.reflect.Method;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 将BaseServlet作为其他类的父类
 * 简单实现类似于struts2的作用
 * @author Administrator
 *
 */
public class BaseServlet extends HttpServlet {
    private static final long serialVersionUID = -9085388180868618165L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse rsponse)
            throws ServletException, IOException {
        
        if(request.getMethod().equalsIgnoreCase("post")){
            request.setCharacterEncoding("utf-8");
        }else if(request.getMethod().equalsIgnoreCase("get")){
            request = new GetRequest(request);
        }
        rsponse.setContentType("text/html;charset=utf-8");
        
        
        String methodName=request.getParameter("action");
        Method method=null;
        //System.out.println(this.getClass().getName());
        try {
            method=this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
        } catch (Exception e) {
            throw new RuntimeException("您要调用的方法'"+methodName+"'它不存在!");
        }
        try {
            String result=(String) method.invoke(this, request,rsponse);
            if(result!=null && !result.trim().isEmpty()){
                String[] strs=result.split(":");
                if(strs.length==1){
                    request.getRequestDispatcher(strs[0]).forward(request, rsponse);
                }else if(strs.length==2){
                    if(strs[0].equals("f")){
                        request.getRequestDispatcher(strs[1]).forward(request, rsponse);
                    }else if(strs[0].equals("r")){
                        rsponse.sendRedirect(request.getContextPath()+strs[1]);
                    }else{
                        throw new RuntimeException("本公司暂未开发此服务!");
                    }
                }
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

 

 

package cn.itcast.tool.servlet;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

public class GetRequest extends HttpServletRequestWrapper{

    public GetRequest(HttpServletRequest request) {
        super(request);
    }
    
    @Override
    public String getParameter(String name) {
        String value=super.getParameter(name);
        try {
            if(value==null) return null;
            return new String(value.getBytes("iso-8859-1"),"utf-8");
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
    }
    
    
    @SuppressWarnings({ "rawtypes", "unused","unchecked" })
    @Override
    public Map getParameterMap() {
        Map<String,String[]> map=new HashMap<String,String[]>(super.getParameterMap());
        if(map==null) return null;
        for(String name:map.keySet()){
            String[] values=map.get(name);
            for(int i=0;i<values.length;i++){
                try {
                    values[0]=new String(values[0].getBytes("iso-8859-1"),"UTF-8");
                } catch (UnsupportedEncodingException e) {
                    throw new RuntimeException(e);
                }
            }
            map.put(name, values);
        }
        return map;
    }
    
    

}

 

posted @ 2016-10-19 14:25  guodaxia  阅读(127)  评论(0编辑  收藏  举报