国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java基于包結構的請求路由實現實例分享

2019-11-26 15:49:25
字體:
來源:轉載
供稿:網友

WebFilter.java

復制代碼 代碼如下:

package com.hongyuan.route;

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

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

public class WebFilter implements Filter {

 public static final String BASE_PACKAGE="com.hongyuan";
 public static final String CLASS_FLAG="Action";
 @Override
 public void destroy() {}

 @Override
 public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {

  if(!hasResouce(request)){

   String requestPath=((HttpServletRequest)request).getServletPath();
   if(requestPath.indexOf(".")>=0){
    requestPath=requestPath.substring(0, requestPath.indexOf("."));
   }
   if(requestPath.endsWith("/")){
    requestPath=requestPath.substring(0, requestPath.length()-1);
   }
   //獲取請求的類全限定名
   String className=BASE_PACKAGE+requestPath.replaceAll("/", ".")+CLASS_FLAG;
   //獲取請求方法名稱
   String methodName=request.getParameter("method");
   if(methodName==null||"".equals(methodName.trim())){
    methodName="index";
   }
   try {
    //獲取處理類并響應請求
    Class clazz=Class.forName(className);
    Object instance=this.initContext(clazz,request,response);
    Method method=clazz.getMethod(methodName, new Class[]{});
    Object result=method.invoke(instance, new Object[]{});
    response.getWriter().print(result);
   } catch (Exception e) {
    e.printStackTrace(response.getWriter());
   }
  }else{
   chain.doFilter(request, response);
  }

 }
 //判斷是否存在請求的資源
 private boolean hasResouce(ServletRequest request) {
  String realPath=request.getServletContext().getRealPath(((HttpServletRequest)request).getServletPath());
  File resouce=new File(realPath);
  if(resouce.exists()){
   return true;
  }else{
   return false;
  }
 }
 //初始化上下文
 private Object initContext(Class clazz, ServletRequest request,
   ServletResponse response) throws Exception{
  Object instance=clazz.newInstance();
  clazz.getMethod("setRequest",new Class[]{ServletRequest.class}).invoke(instance, new Object[]{request});
  clazz.getMethod("setResponse", new Class[]{ServletResponse.class}).invoke(instance, new Object[]{response});
  return instance;
 }

 @Override
 public void init(FilterConfig arg0) throws ServletException {}

}


BaseAction.java

復制代碼 代碼如下:

package com.hongyuan.route;

import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public abstract class BaseAction {
 protected ServletRequest request=null;
 protected ServletResponse response=null;

 public ServletRequest getRequest() {
  return request;
 }
 public void setRequest(ServletRequest request) {
  this.request = request;
 }
 public ServletResponse getResponse() {
  return response;
 }
 public void setResponse(ServletResponse response) {
  this.response = response;
 }

}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 清丰县| 忻城县| 玉环县| 肃宁县| 当雄县| 华亭县| 黄大仙区| 城固县| 远安县| 常熟市| 肇州县| 巴彦淖尔市| 盘锦市| 万宁市| 靖边县| 鄢陵县| 林口县| 盐池县| 岫岩| 获嘉县| 苏尼特左旗| 榆社县| 临潭县| 九江县| 即墨市| 搜索| 远安县| 道真| 迁安市| 襄城县| 奉化市| 博乐市| 乐业县| 梅州市| 渝北区| 兴化市| 通海县| 交城县| 靖州| 沽源县| 徐州市|