1. 程式人生 > >servlet之獲取表單資料

servlet之獲取表單資料

1.寫一個.java檔案——實體類(用於儲存表單資料)

假設是一個使用者註冊的表單,那麼就要寫一個user.java。它的屬性要和能從表單上獲得的資料進行對應。

2.寫html表單,並使用action將表單提交至對應對映地址

關於表單的介紹可以參考這篇部落格:html表單
這裡就寫一個最簡單的表單示例好了:

<form action=""><!--注意這裡雙引號的內容是處理它的servlet對映地址,也即servlet中@webservlet相同-->
使用者名稱:<input type="text" name="username"><br
/>
<input type="submit" value="提交"> </form>

3.servlet頁面中——覆寫dopost或doget

request.setCharacterEncoding("utf-8");
user u = new user();
string username;
try
{
    username = request.getParameter("username");//獲取字串 和之前jsp頁面中標籤的名字對應(name屬性)
    favorites = request.getParameterValues("favorites"
);//獲取字串陣列(用於獲取多個複選按鈕的值) u.setUsername(username); … //把註冊成功的使用者物件儲存在session中 request.getSession().setAtrribute("regUser",u) //跳轉到註冊成功頁面 request.getRequestDispatcher("../XXX.jsp").forward(request,response);//..表示上一級 request和response這兩個引數就是doGet和Post函式的引數 } catch(Exception ex) { ex.printStackTrace(); }

解釋一下這裡的setAttribute:
setAttribute這個方法,在JSP內建物件session和request都有這個方法,這個方法作用就是儲存資料,可以用getAttribute方法來取出。
比如現在有個User物件:User curruser = new User("zhangsan", 20, "男");,那麼將它儲存下來有兩種方法:
1. request.setAttribute(“curruser”, curruser)
這個方法是將curruser這個物件儲存在request作用域中,然後在轉發進入的頁面就可以獲取到你的值,如果你會一些框架的話,那些框架標籤也可以獲取到,比如struts標籤,還有jstl。
2. request.getSession.setAttribute("curruser", curruser)
這個方法和上面唯一的區別就是作用域,就是在整個程式啟動的時候,如果在session中儲存了資料,那麼在你這個無論你在哪個頁面,在什麼時候都可以獲取到這個值,。session預設的過期時間是30分鐘,過期無效,當然session的過期時間是可以被修改的。(我之後應該也會寫session吧..小聲bb).

4.編寫servlet跳轉後的頁面

servlet跳轉後的jsp頁面(也就是上文getRequestDispatcher的XXX.jsp)

//寫在開頭,import上面的servlet檔案
<%@ page import="xxx.xxx" %>//包名.類名

//寫在body,這裡用到了javabean,會在之後的部落格中介紹(希望我能記得回來加上鍊接)
//id對應上文set的Attribute,class對應user那個類的完整名稱:包名.users
<jsp:useBean id="regUser" class="" scope="session"/>
<table>
<tr>
    <td class="title">使用者名稱:</td>
    <td class="content"> &nbsp; <jsp:getProperty name="regUser" property="username"></td>
</tr>
<tr>
    <td class="title">愛好:</td>
    <td class="content">&nbsp; 
        <%
            String[] favorites = regUser.getFavovites();
            for(String f:favorites)
            { 
        %>
            <%=f%> &nbsp;
        <%
            }
        %>

</tr>

5.關於路徑跳轉——相對路徑問題(非常重要,不清楚的話很容易404)

①絕對路徑

絕對路徑可以使用path變數:<a href="<%=path%>/servlet/HelloServlet"></a>
關於path-
一般置於jsp文件開頭(可以看成是專案根目錄,/代表的是伺服器根目錄)

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%
    String path = request.getContextPath();
%>



相對路徑
form表單的action中:/代表伺服器根目錄,而不是專案根目錄,也即在寫對映地址時不需要在前面加上/(直接寫對映地址),如果在最前面加了/則需要寫為/專案或者叫工程名/對映地址。區別就是要在中間多寫一個工程名。
例如:在對映地址為@webservlet("/loginAction")時,可以這樣寫:action = "loginAction"action = "/webProjectName/loginAction"

web.xml文件的url-pattern中:/表示專案根目錄,而不再是伺服器根目錄。 因此在web.xml中配置時需要在最前面加上/,如果在這個檔案中寫錯了的話伺服器啟動的時候可能就會報錯。

請求重定向方式跳轉時 /表示伺服器根目錄,要跳轉到專案根目錄下的某檔案:
response.sendRedirect(request.getContextPath()+"/XXX.jsp");
或者直接response.sendRedirect("XXX.jsp");

請求轉發(伺服器內部跳轉)getRequestDispatcher中的 XX.jsp,/表示的是專案根目錄。
此時getRequestDispatcher("xx.jsp")等同於getRequestDispatcher("/xx.jsp")