一.Servlet的请求转发和重定项
1.请求转发和重定项是什么:
请求转发:
request.getRequestDispatcher("/service02").forward(request, response);
重定项:
response.sendRedirect("/ServletDay02-1/service02");
2.请求转发和重定项的区别:
服务器中从一个资源跳到另一个资源的行为有两种:1.请求转发 2.重定向
1.请求转发不会改变地址栏
重定向会将地址栏改变
2.请求转发可以通过request中的Attribute属性传递数据
重定向不可以使用request传数据
3.请求转发的请求资源不可以是本服务以外的资源
重定向可以请求本服务器以外的资源
4.无论是请求转发还是重定向过后,都不要在其代码下面添加其他代码
二:Servlet中的路径问题
如果一次请求是浏览器行为,则“/”表示服务器根目录(127.0.0.1:8080/)
如果一次请求是服务器的内部行为,则“/”表示项目的根目录(127.0.0.1:8080/project_name/)
简单的说:请求转发,servlet代码地址都属于服务器行为
重定向(重定向的第二次跳转是由浏览器发起),js,css引用路径,html中form表单提交地址都属于浏览器行为
"/"相对服务器根目录或者是项目根目录的位置
不加"/"表示相对路径,相对于本层的路线,如果要跳转到上一层,可表示为"../"
三:form表单及获取数据的方式
1.form 表单:(method为get/post)
<form action="service01" method="post">
姓名:<input type="text" name="userName" value="小华" /><br/>
密码:<input type="password" name="passwd" value="aaa"/><br/>
爱好:<br/>
篮球<input type="checkbox" name="favarite" value="篮球" /><br/>
足球<input type="checkbox" name="favarite" value="足球" /><br/>
游泳<input type="checkbox" name="favarite" value="游泳" /><br/>
<p><button type="submit">登陆</button></p>
</form>
2.Servlet获取方法:
(1).例如name,password这类只有一条数据的,可以使用如下代码:
Object name = request.getParameter("userName");
Object passwd = request.getParameter("passwd");
(2).如果是checkbox这样的复选框,需要使用如下方法:
String[] fa = request.getParameterValues("favarite");
for(int i=0;i<fa.length;i++){
System.out.println(fa[i]);
}
四.Servlet乱码问题解决方法:
(暴力解决方法)
1.在Java代码中设置:
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");
2.在Tomcat的servlet.xml文件中加上 :useBodyEncodingForURI="true",如下
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" useBodyEncodingForURI="true"/>
3.将eclips配置中编码格式改为UTF-8:
Windows-->Preference-->workspace-->Text file encoding(在界面最下方左边)
(对症下药)
1.浏览器发动到服务器的数据有乱码
1)请求方式为GET
解决:
①打开tomcat的server.xml配置,在<Connector>添加属性 useBodyEncodingForURI="true" (针对tomcat7及以下)
②获取数据前,添加 request.setCharacterEncoding("utf-8");
2)请求方式为POST
解决:
①获取数据前,添加 request.setCharacterEncoding("utf-8");
2.服务器返回给浏览器的数据有乱码
解决:
response.setContentType("text/html; charset=utf-8");