2011-10-26 65 views
2

我有一個非常簡單的JSP文件,它或多或少地顯示一個get變量。如何從JSP中「拋出」壞請求

<p>Hello, <%= request.getParameter("name") %></p> 

所以,如果我去webpage.jsp?name=Alice,我會得到Hello, Alice。如果我只是去webpage.jsp另一方面,我得到Hello, null

如果沒有設置name變量,我想發送一個錯誤的請求。在一個servlet中,我會這樣做:

response.sendError(HttpServletResponse.SC_BAD_REQUEST); 
    return; 

我該如何從JSP頁面做類似的工作?

回答

4

只需在JSP中的<% %>中添加相同的代碼即可。你只需要確保在那個時候沒有提交回應,否則你只會面對IllegalStateException s。所以最好在所有HTML模板內容發佈之前在JSP文件的最頂部調用它。

不用說,JSP是not控制請求/響應的正確位置。在這種特殊情況下,如果涉及會話範圍登錄,您希望在servletfilter中執行此項工作。此外,該「你好」行最好是<p>Hello, <c:out value="${param.name}" /></p>。它不僅可以提高可維護性,還可以防止您的站點遭受巨大的XSS攻擊漏洞。

+0

無法獲取c:out的東西工作,但將其更改爲'<%= StringEscapeUtils.escapeHtml(request.getParameter(「cid」))%>',這也希望能完成這項工作:) – Svish

+0

只需安裝JSTL(如果你的容器不支持它)並聲明'c' taglib。有關安裝和聲明的詳細信息,另請參閱我們的JSTL wiki頁面:http://stackoverflow.com/tags/jstl/info(我希望您在我的答案中注意到Servlet和Filter wiki頁面鏈接?) – BalusC