- package com.lovver.jrails.rest;
- import javax.servlet.http.HttpServletRequest;
- import org.apache.commons.lang.ArrayUtils;
- import org.apache.commons.lang.StringUtils;
- import org.apache.commons.lang.WordUtils;
- import com.lovver.jrails.common.config.JRailsConfig;
- public class JRailsRouter {
- private static JRailsRouter jRailsRouter = null;
- public static JRailsRouter getInstants() {
- if (jRailsRouter == null) {
- jRailsRouter = new JRailsRouter();
- }
- return jRailsRouter;
- }
- public PathMapping getPathMapping(HttpServletRequest request,JRailsConfig jRailsConfig) {
- PathMapping pathMapping = new PathMapping();
- /**去掉ContextPath*/
- String contextPath=request.getContextPath();
- String pathInfo = request.getRequestURI();
- if(jRailsConfig.getJRailsServletConfig().isDebugMode()){
- System.out.println("requestURI="+pathInfo);
- }
- pathInfo = StringUtils.replace(pathInfo, contextPath, "");
- /**去掉url的servlet映射后缀*/
- String urlPrefix=jRailsConfig.getUrlPrefix();
- urlPrefix=urlPrefix.substring(1);
- pathInfo = StringUtils.replace(pathInfo, urlPrefix, "");
- /**开始进行url映射*/
- String arrPathMapping[] = {};
- if (StringUtils.isNotEmpty(pathInfo)) {
- if (pathInfo.length() > 1) {
- // pathInfo = "/controller/action/id"
- arrPathMapping = pathInfo.substring(1).split("/");
- }
- }
- /**url存在参数的场合*/
- String params[]={};
- if (arrPathMapping.length > 2) {
- params=new String[arrPathMapping.length -2];
- for(int i=2;i
- params[i-2]=arrPathMapping[i];
- }
- }
- pathMapping.set_params(params);
- /**url不存在参数的场合*/
- //只有Controller
- String _controller = "";
- String _action = "index";
- try{
- _controller = this.normalizeName(arrPathMapping[0])+"Controller";
- }catch(Exception e){
- }
- try{
- try{
- // pathInfo = "/controller/id"
- Integer.parseInt(arrPathMapping[1]);
- _action = "index";
- params=(String[]) ArrayUtils.addAll(new String[]{arrPathMapping[1]}, params);
- pathMapping.set_params(params);
- }catch(Exception e){
- _action = arrPathMapping[1];
- }
- }catch(Exception e){
- }
- pathMapping.set_controller(_controller);
- pathMapping.set_action(_action);
- return pathMapping;
- }
- /**
- * This method will change the uri name to some other way. You may override
- * this function to supply another translate method. By default, this method
- * will translate the uri to capitalize way and replace the '.', ' ', '-'
- * and '_' to empty string and cpaitalize the next character. So, the uri
- * like /index.html will be translate to IndexHtml, login-page will be
- * LoginPage
- *
- * @param uri
- * @return
- */
- protected String normalizeName(String uri) {
- char[] cap = { '.', ' ', '-', '_' };
- return WordUtils.capitalizeFully(uri, cap).replaceAll("\\\\.", "")
- .replaceAll(" ", "").replaceAll("-", "").replaceAll("_", "");
- }
- public class PathMapping {
- private String _controller = "";
- private String _action = "index";
- private String _params[] = {};
- public String get_controller() {
- return _controller;
- }
- public String[] get_params() {
- return _params;
- }
- public void set_params(String[] _params) {
- this._params = _params;
- }
- public void set_controller(String _controller) {
- this._controller = _controller;
- }
- public String get_action() {
- return _action;
- }
- public void set_action(String _action) {
- this._action = _action;
- }
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/241220121146.html
来源: http://www.codesnippet.cn/detail/241220121146.html