request对象时javax.servlet.http.HttpServletRequest类型的对象。该对象代表了客户端的请求信息,主要用于接受通过Http协议传送到服务端的数据(包括信息头,系统信息,请求方式及请求参数等)。request对象的作用域为一次请求。
request对象常见的方法:
String getParameter(String name):根据请求的字段名key(比如input标签的name属性),返回字段值value
String[] getParameterValue(String name):根据请求的字段名key,返回多个字段值(比如input标签的value属性,一般是checkbox对象)
void setCharacterEncoding(" utf-8"):设置post请求编码(tomcat7以前默认为iso-8859-1,tomcat以后为utf-8)
getRequestDispatcher("b.jsp").forward(request,response):请求转发的方式跳转页面
ServletContext getServletContext():获取项目的ServletContext对象
登录注册实例:
register.jsp 和show.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
My JSP 'register.jsp' starting page
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
My JSP 'show.jsp' starting page
<%
//设置post编码
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("useName");
String pwd = request.getParameter("usePwd");
int age = Integer.parseInt(request.getParameter("useAge"));
String[] hobbies = request.getParameterValues("useHobbies");
%>
注册成功信息如下:
姓名:<%=name%>
年龄:<%=age%>
密码:<%=pwd%>
爱好:
<%
if (hobbies != null) {
for (String hobby : hobbies) {
out.print(hobby + " ");
}
}
%>
结果显示如下:
register.jsp
show.jsp
网页跳转:http://localhost:8888/MyJspProject/show.jsp?useName=Emove&usePwd=123&useAge=23&useHobbies=%E9%9F%B3%E4%B9%90&useHobbies=%E7%BC%96%E7%A8%8B
其格式为:链接/文件?参数名1=参数值1 & 。。。。
get提交方式:method=”get“ 和地址栏、超链接()请求方式默认都属于get提交方式
get和post请求方式的区别:
1、get方式在地址栏上显示信息(但是地址栏能容纳的信息有限,4-5kb,如果请求数据存在大文件,会出现地址栏无法容纳全部的数据而出错),post不会
2、文件上传操做必须是post
一般推荐使用post
response对象代码的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。
response对像的重要方法:
void addCookie(Cookie cookie):服务端向客户段增加cookie对象
void sendRedirect(String location)throws IOException:页面跳转的一种方式(重定向)
void setContentType(String type):设置服务端响应编码(设置服务端ContentType类型)
实例:登录
login.jsp check.jsp success.jsp
login.jsp
check.jsp
<%
request.setCharacterEncoding("utf-8");
String name = request.getParameter("useName");
String pwd = request.getParameter("usePwd");
if(name.equals("Emove") && pwd.equals("123456")){
//只有登录成功,session中才会有userName和userPwd
session.setAttribute("userName", name);
session.setAttribute("userPwd", pwd);
System.out.print("sessionid:"+session.getId()+"
");
Cookie cookie = new Cookie("name",name);
response.addCookie(cookie);
//请求转发跳转到welcome
request.getRequestDispatcher("Welcome.jsp").forward(request, response);
}else{
//重定向
//登录失败
response.sendRedirect("login.jsp");
}
%>
success.jsp
登陆成功!
欢迎:
<%
String name = request.getParameter("useName");
out.print(name);
%>
当客户端提交表单信息,向服务端发送请求时,服务端通过check.jsp验证表单信息,验证成功后,跳转到success.jsp。其中只有一次请求,一次响应。
request.getRequestDispatcher("Welcome.jsp").forward(request, response);
注:.forward(request,response);为默认格式。
其原理图如下:
当客户端提交表单信息,向服务端发送请求时,服务端通过check.jsp验证表单信息,验证成功后,向客户端发送第一次响应,告诉客户端发送请求到success.jsp。服务端success.jsp再给出响应。其中有两次请求,两次响应。
response.sendRedirect("success.jsp");
其原理图如下:
请求转发 | 重定向 | |
地址栏是否改变 | 否 | 是 |
数据是否在一次请求中有效 | 保留 | 不保留 |
请求的次数 | 一次 | 两次 |
跳转发生的位置 | 服务端 | 第二次时响应的位置 |
注:数据是否在一次请求中有效意思为:数据是否可在JSP页面间共享。因为请求准发在服务端发生跳转,即为一次请求,所以数据会被保留。而重定向需要两次请求,数据保留在第一次请求中,即采用重定向到跳转到的页面访问不到第一次请求时的数据。