首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么时候使用forwardslash,什么时候不使用forwardslash?

什么时候使用forwardslash,什么时候不使用forwardslash?
EN

Stack Overflow用户
提问于 2012-03-08 05:18:56
回答 1查看 989关注 0票数 1

我正在尝试使用JSP和Servlet进行基本登录,但我不明白如何使用正斜杠来指示路径。

login.JSP位于LoginApp/WebContent/login.jsp

位于LoginApp/src/org/koushik/javabrains/LoginServlet.java中的LoginServlet.java

我的login.jsp文件中有以下代码-

代码语言:javascript
复制
 <form action="login" method="post">

 <br>User ID  input type="text" name="userId" />
 <br>Password <input type="password" name="password" />
 <br><input type="submit" />

 </form>

相应的servlet代码是

代码语言:javascript
复制
  @WebServlet("/login")  // <-- forwardslash here
  public class LoginServlet extends HttpServlet 
   {
     private static final long serialVersionUID = 1L;

     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
      {
         String userId, password;

         userId = request.getParameter("userId");
         password = request.getParameter("password");

                 // more code here
      }

    }

如果我们看到表单操作,那么在"login“之前没有正斜杠,而如果我们看到servlet注释,那么在"login”之前有一个正斜杠。为什么会有这样的差异?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-08 06:37:24

在……里面

代码语言:javascript
复制
@WebServlet("/login")

/login是相对于contextPath的应用程序的url模式

例如,如果您的应用程序的上下文路径为webapp,则请求

http://localhost:8080/webapp/login将加载LoginServlet

在您的jsp中,表单操作

是相对于jsp页面本身的,而不是 contextPath。

但是,因为您的jsp位于webroot文件夹(jsp和WEB-INF文件夹所在的顶层文件夹)中

http://localhost:8080/webapp/login.jsp

然后是表单中的action="login"属性

将解析到该位置

http://localhost:8080/webapp/login

当表单提交时,将调用LoginServlet

如果将jsp移动到子文件夹(例如folder1)中,则action=login将不会调用登录servlet

因为jsp现在将位于

http://localhost:8080/webapp/subfolder/login.jsp和so action=login

现在将解析为http://localhost:8080/webapp/subfolder/login

并且servlet将不会被找到(请记住,登录servlet是相对于上下文根的,这就是@WebServlet("/login")中/的意思)

将表单操作更改为

代码语言:javascript
复制
<form action="../login" method="post">

会起作用的。

为了避免不得不在网页表单中解决这个问题

大多数人会将表单操作更改为如下所示

代码语言:javascript
复制
<form action="${pageContext.request.contextPath}/login" method="post">

因此,无论jsp位于何处,el表达式

${pageContext.request.contextPath}/login

将解析到与使用url模式/login定义的servlet相同的位置

有关el表达式的详细信息,请参阅What does this expression language ${pageContext.request.contextPath} exactly do in JSP EL?

希望这能有所帮助

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9609222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档