將在學(xué)習(xí)jsp向Servlet傳遞參數(shù)的過程中需要注意的地方總結(jié)如下:
開發(fā)環(huán)境:eclipse(Indigo) 乔询、Tomcat 7.0.56
- 項(xiàng)目結(jié)構(gòu)
- jsp代碼
- 編碼
為了能夠正常顯示中文,需要做以下編碼格式設(shè)置情妖。
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
- form表單
- action設(shè)置:action指定所要跳轉(zhuǎn)的Servlet的路徑名旋膳,method指定http請求使用何種方法盅称。
-- action路徑需要與在web.xml中配置的url-pattern一致奈偏,必要時(shí)需要加上請求的上下文
-- method常用的方法有兩種:post和get。HttpServlet對兩種請求對應(yīng)的處理方法分別為doPost方法和doGet方法郁油。
二者區(qū)別如下:
操作 | get | post |
---|---|---|
刷新 | 不會(huì)重復(fù)提交 | 重復(fù)提交 |
數(shù)據(jù)長度 | 2048個(gè)字符 | 無限制 |
數(shù)據(jù)類型 | ASCII字符 | 無限制 |
可見性 | URL中可見 | URL中不可見 |
安全性 | 差 | 高 |
- input設(shè)置:這里的name屬性對應(yīng)在parameter的name本股。
完整的form代碼:
<form action="<%=request.getContextPath() %>/LoginServlet" method="post">
用戶名:<input type="text" name="uname"/><br/>
密碼:<input type="password" name="pwd"/><br/>
<input type="submit" value="登錄"/>
<input type="reset" value="重置"/>
</form>
-
Servlet代碼
需要在doPost方法和doGet方法中完成對應(yīng)的業(yè)務(wù)處理攀痊。
這里需要注意的幾點(diǎn):
- HttpRequest和HttpResponse的編碼設(shè)置要一致。
- 要想中文顯示正常拄显,要在獲取到response的printWriter之后再設(shè)置request的編碼苟径。其他順序不清楚可不可以,感興趣的話可以試一下躬审。
- 字段parameter名字要和jsp中的name屬性要一致棘街。
- 用response的getWriter()方法向屏幕輸出信息,而System.out.println()方法是向eclipse的console控制臺(tái)輸出信息承边。
- response的printwriter的println()方法本身不換行遭殉,想換行需要再加上"
",或者"
",實(shí)現(xiàn)換行的效果博助。 - printwriter用完后需要close险污。
完整的doPost()代碼:
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("=====進(jìn)入了doPost方法=====");
resp.setCharacterEncoding("GB18030"); //編碼req和resp要一致,這里用的是GB18030富岳,試了一下utf-8蛔糯,結(jié)果中文亂碼
String username=req.getParameter("uname"); //字段名字要和jsp中的name屬性一致
String password=req.getParameter("pwd");
PrintWriter out=resp.getWriter();
req.setCharacterEncoding("GB18030");
out.println("用戶名==》 "+username+"<br>"); //用getWriter()向屏幕輸出信息
out.println("密碼==》 "+password); //需要加<br>換行
out.flush();
out.close();
}
- web.xml配置
這里完成Sevlet的一些配置。
- servlet中的servlet-class要寫servlet所在的包名和類名窖式。
- serlet-mapping中的servlet-name和servlet中的servlet-name要一致蚁飒。
- display-name隨意設(shè)置,url-pattern要和jsp中的action路徑一致萝喘,上面已經(jīng)說明淮逻。
配置代碼如下:
<servlet>
<description></description>
<display-name>LoginServlet</display-name>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.feng.javawebstudy.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
最終頁面效果:
初學(xué)JavaWeb,哪里不對的地方歡迎大家指正蜒灰!