getRequestURI在获取用户请求时出现问题

时间:2014-06-12 06:37:19

标签: java servlets

我在我的servlet中将我的url模式设置为"/register/*"。我还研究过从getReuestURI()开始只从“/ register”开始获取模式。

我已使用request.getRequestURI().substring(request.getContextPath().length())获取"/register/family",但它似乎也返回了header.jsp中包含的脚本源。

header.jsp中

<head>
        <title>Health Center</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <link href="css/style.css" rel="stylesheet" type="text/css" />
        <script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
        <script type="text/javascript" src="js/script.js"></script>
        <script type="text/javascript" src="js/cufon-yui.js"></script>
        <script type="text/javascript" src="js/arial.js"></script>
        <script type="text/javascript" src="js/cuf_run.js"></script>
</head>

GlassFish Server 4堆栈跟踪:

INFO:   /register/family
INFO:   /register/js/script.js
INFO:   /register/css/style.css
INFO:   /register/js/cufon-yui.js
INFO:   /register/js/jquery-1.3.2.min.js
INFO:   /register/js/arial.js
INFO:   /register/js/cuf_run.js
INFO:   /register/images/search.gif

如何解决此问题,以便我只能获得"/register/family"?任何帮助,将不胜感激。谢谢!

已编辑:1

我使用system.out.println来测试我得到的请求值。我也注意到,即使我使用request.getServletPath(),它也会输出多个:

INFO:   /register
INFO:   /register
INFO:   /register
INFO:   /register
INFO:   /register
INFO:   /register
INFO:   /register
INFO:   /register

我还注意到我的css布局不会被使用,因为它被重定向到另一个页面。

已编辑2:

我想从requestURI获取“/ register / family”,因为这将处理请求并确定下一页。这是我的代码流程

     protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {


       String  userPath = request.getRequestURI().substring(request.getContextPath().length());


        if (userPath.equals("/register/family")) {
            // perform code registration
            userPath = "/familyRegistration"; // this is the .jsp page
        }
        else if (userPath.equals("/register/patient")) {
           // perform patient registration

             userPath = "/patientRegistration"; // this is . the .jsp page
        }

             // use RequestDispatcher to forward request internally
            String url = "/WEB-INF/view" + userPath + ".jsp";

            try {
                request.getRequestDispatcher(url).forward(request, response);
            } catch (Exception ex) {
                ex.printStackTrace();
            }
}

编辑3

修正了下面的@Serg问题。还修复了CSS未加载问题!我在这个类似的post中使用了<link href="${pageContext.request.contextPath}/css/style.css" rel="stylesheet" type="text/css" />作为BalusC Said。

2 个答案:

答案 0 :(得分:2)

如果我正确理解,你的css和js文件是相对于 uncommon 的servlet路径(/ register)。如果它们直接位于Web应用程序的根目录下,则不会出现此问题。你的标题应该是:

<head>
        <title>Health Center</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <link href="/css/style.css" rel="stylesheet" type="text/css" />
        <script type="text/javascript" src="/js/jquery-1.3.2.min.js"></script>
        <script type="text/javascript" src="/js/script.js"></script>
        <script type="text/javascript" src="/js/cufon-yui.js"></script>
        <script type="text/javascript" src="/js/arial.js"></script>
        <script type="text/javascript" src="/js/cuf_run.js"></script>
</head>

如果您的应用中可以接受,则只有第一行INFO: /register/family会被您的servlet截获,因为其他行不会以/register开头。

答案 1 :(得分:2)

你可以得到斜杠的最后一个索引并创建uri的子字符串,这样就得到没有jsp名称的pas

String  userPath = request.getRequestURI().substring(0,request.getRequestURI().lastIndexOf("/"));

希望这有帮助。