2012-03-07 132 views
1

我正在嘗試使用JSP和Servlet進行基本登錄,並且不知道如何使用正斜槓來指示路徑。何時使用正斜槓,何時不使用正斜槓?

的login.jsp位於LoginApp /的WebContent/login.jsp的

LoginServlet.java位於LoginApp/SRC /組織/科希克/ javabrains/LoginServlet.java

我在下面的代碼我的login.jsp文件 -

<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代碼是

@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 
     } 

    } 

如果我們看到表單動作,則在「登錄」之前沒有前向空格,而如果我們看到servlet註釋,則在「登錄」之前會有前向空格。爲什麼這個區別?

回答

3

@WebServlet("/login") 

/login是相對於應用到contextPath

例如URL模式如果你的應用具有webapp上下文路徑然後

http://localhost:8080/webapp/login的請求將加載LoginServlet

在你的JSP表單動作

相對於本身 jsp頁面,和而不是 contextPath。

但是因爲你的JSP位於根目錄文件夾(頂層文件夾,你的JSP的和WEB-INF文件夾活)

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

然後在形式action="login"屬性

會解析到的位置

http://localhost:8080/webapp/login

當表單被提交併將調用LoginServlet

如果您將jsp移動到子文件夾(例如,文件夾1),那麼action=login不會請登錄servlet的

作爲JSP將現在

http://localhost:8080/webapp/subfolder/login.jsp 定位等action=login

現在下定決心, http://localhost:8080/webapp/subfolder/login

和servlet將不(請記住,登錄servlet是相對於上下文根,這就是/在@WebServlet("/login")中的含義)

將表單動作更改爲

<form action="../login" method="post"> 

會起作用。

爲了避免在網頁的形式來工作了這一點

大多數人會改變形式的行動看起來像這樣

<form action="${pageContext.request.contextPath}/login" method="post"> 

所以這在以往任何時候在jsp位於EL表達式

${pageContext.request.contextPath}/login

將解析到與url模式定義的servlet相同的位置/ login

看到What does this expression language ${pageContext.request.contextPath} exactly do in JSP EL?更多信息的EL表達式

希望這有助於

+0

哇。這真的有幫助!謝謝! – CodeBlue 2012-03-07 22:43:40

+1

乾杯哥們兒,我有點累了,所以沒有確定它是有道理的,很高興它有幫助,我會嘗試和「整理」明天 – reevesy 2012-03-07 22:45:06