将在学习jsp向Servlet传递参数的过程中需要注意的地方总结如下:
开发环境:eclipse(Indigo) 、Tomcat 7.0.56
- 项目结构
- jsp代码
- 编码
为了能够正常显示中文,需要做以下编码格式设置。
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
- form表单
- action设置:action指定所要跳转的Servlet的路径名,method指定http请求使用何种方法。
-- action路径需要与在web.xml中配置的url-pattern一致,必要时需要加上请求的上下文
-- method常用的方法有两种:post和get。HttpServlet对两种请求对应的处理方法分别为doPost方法和doGet方法。
二者区别如下:
操作 | get | post |
---|---|---|
刷新 | 不会重复提交 | 重复提交 |
数据长度 | 2048个字符 | 无限制 |
数据类型 | ASCII字符 | 无限制 |
可见性 | URL中可见 | URL中不可见 |
安全性 | 差 | 高 |
- input设置:这里的name属性对应在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方法中完成对应的业务处理。
这里需要注意的几点:
- HttpRequest和HttpResponse的编码设置要一致。
- 要想中文显示正常,要在获取到response的printWriter之后再设置request的编码。其他顺序不清楚可不可以,感兴趣的话可以试一下。
- 字段parameter名字要和jsp中的name属性要一致。
- 用response的getWriter()方法向屏幕输出信息,而System.out.println()方法是向eclipse的console控制台输出信息。
- response的printwriter的println()方法本身不换行,想换行需要再加上"
",或者"
",实现换行的效果。 - printwriter用完后需要close。
完整的doPost()代码:
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("=====进入了doPost方法=====");
resp.setCharacterEncoding("GB18030"); //编码req和resp要一致,这里用的是GB18030,试了一下utf-8,结果中文乱码
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随意设置,url-pattern要和jsp中的action路径一致,上面已经说明。
配置代码如下:
<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>
最终页面效果:
初学JavaWeb,哪里不对的地方欢迎大家指正!