1:request对象
是从客户端向服务器端发出请求,包括用户提交的信息以及客户端的一些信息。request对象是javax.servlet.http.HttpServletRequest类的实现实例。
request对象封装了浏览器的请求信息,通过request对象的各种方法可以获取客户端以及用户提交的各项请求信息。
使用request对象获取客户端提交的请求参数的常用方法如下:
1.String getParameter(String name),获取上一页面所提交的参数值的参数值,并以字符串形式返回指定参数的值,如果参数不存在则返回空值。用于表单、链接或网址栏传递参数时,使用此方法。
例如,获取客户端name的参数值:
String name = request.getParameter("name");
2.String[ ] getParameterValues(String name),获取以相同名称命名的表单组件提交的数据,主要用于获取复选框的值,返回值类型是字符串数组String[ ]
例如,获取客户端hobby复选框的所有取值:
String[ ] hobbys = request.getParameterValues("hobby");
if(hobbys != null)
{
out.println("您的爱好有:");
for(int i=0;i
out.println(hobbys[i]);
}
3.void setCharacterEncoding(String encoding),设置字符编码方式,用来解决传递非英文字符所出现的乱码问题。
对于以post提交的表单数据
在第一行写:
request.setCharacterEncoding("UTF-8");
对于以get提交的表单数据
提交的数据作为查询字符串被附加到URL 的末端发送到服务器,此时字服务器端调用
setCharacterEncoding()方法就没有作用了,我们需要得到请求参数值之后,进行编码转换
String name=request.getParameter("name");
name=new String(name.getBytes("ISO-8859-1"),"UTF-8");
也可以通过TomCat目录下的conf下的server.xml文件,在
port="8080"
protocol="HTTP/1.1"
reidrectPort="8433"
URIEncoding ="UTF-8"
/>
4.RequestDispatcher getRequestDispatcher(String path)----获取请求分配器
返回一个javax.servlet.RequestDispatcher对象该方法的forward()方法用于 转发请求
例如,request.setCharacterEncoding("UTF-8");
实例:使用request对象实现用户注册功能
zhuce.html源代码如下:
个人信息注册
<form action="zhuce.jsp" method="post">
姓名:
密码:
请选择你的职业:
农民
工人
学生
教师
你喜欢的城市:
请选择你的爱好:
旅游
看书
游戏
琴棋书画
自我介绍:
zhuce.jsp源代码如下:
<%@ page language="java" import="java.util.*" contentType="text/html;charset=UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%request.setCharacterEncoding("UTF-8"); %>
您的姓名是:<%=request.getParameter("name") %>
您的密码是:<%=request.getParameter("pwd") %>
您的职业是:<%=request.getParameter("career") %>
您喜欢的城市是:<%=request.getParameter("city") %>
您的爱好有:<%String[] hobbys = request.getParameterValues("hobby");
if(hobbys != null)
{
out.println("您的爱好有:");
for(int i=0;i
out.print(hobbys[i]);
}
%>
自我介绍:<%=request.getParameter("intro") %>
1.request.getRequestDispatcher()是请求转发,前后页面共享一个request ;
response.sendRedirect()是重新定向,前后页面不是一个request。
2.RequestDispatcher.forward()是在服务器端运行;
HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完成.
3.ServletContext.getRequestDispatcher(String url)中的url只能使用绝对路径; 而
ServletRequest.getRequestDispatcher(String url)中的url可以使用相对路径。因为
ServletRequest具有相对路径的概念;而ServletContext对象无此概念。
RequestDispatcher对象从客户端获取请求request,并把它们传递给服务器上的servlet,html或
jsp。它有两个方法:
2.void include(ServletRequest request,ServletResponse response)
用来记录保留request和response,以后不能再修改response里表示状态的信息。
二者区别:
contextName
name
....
name
Kitty
2 //加载顺序排第二
Servlet在编译的代码之外有初始化参数,当参数改变时,不需要重新编译Servlet ,每个servlet都有一个与之相联的对象ServletConfig; (在servletConfig对象中包含了servlet的初始化参数信息。)
得到指定的参数value:String value= getServletConfig().getInitParameter(“name");
也可以这么写:String value= this.getInitParameter(“name"); //this可省
得到所有的所有的参数value:需要应用一个ServletConfig中的一个方法:getInitParameterNmes():返回一个Enumeration(枚举)对象,里面包含了所有的初始化参数。
…
…
在Servlet中共享信息
servletContext.setAttribute("password", "tiger");
String password = (String) servletContext.getAttribute("password");
虚拟路径转换为物理路径:
getResourcePaths(java.lang.String path):返回一个集合,路径必须从Web应用程序的根“/”开始;
getResourceAsStream(java.lang.String path):返回一个InputStream对象。当一个资源需要逐字节读取的时候该方法比较适用。
getResource(java.lang.String path):返回一个Web资源列表。
回顾上一章的知识:
Java Servlet是运行在Web服务器或应用服务器上的Java程序
Servlet规范对Servlet功能进行了严格定义
Servlet API与容器进行通讯
Servlet的编码和部署
Servlet需要在容器中进行注册和映射
容器管理Servlet的生命周期
SevletConfig对象为Servlet提供初始化参数
ServletContext对象属于整个Web应用程序
本章学习知识:
设置响应状态行:
HTTP状态码:
HTTP状态码:
100-199:表示信息性代码,标示客户端应该采取的其他动作,请求正在进行。
200-299:表示客户请求成功。
300-399:表示用于已经移走的资源文件,指示新的地址。
400-499:表示由客户端引发的错误。
500-599:表示由服务器端引发的错误
servlet设置状态码一般使用HttpServletResponse的setStatus()方法;
setContentType(String mimetype);
addCookie(Cookie c);
使用sendRedirect(String URL)方法实现重定向,
response.setHeader("Refresh", "time; URL=url" );
总结:何时使用GET/POST方法:
1:请求一个静态页面或图形文件时使用GET方法,因为仅仅需要发送文件名;
2:发送大数据的时候,使用POST方法;
3:上传文件时,使用POST方法;
4:发送用户名、密码或其他保密信息的时候使用POST方法;-getRequestURI():获取请求的URI资源
Enumeration enum = request.getHeaderNames();
while (enum.hasMoreElements()) {
String headerName = (String) enum.nextElement();
String headerValue = request.getHeader(headerName);
out.print(""+headerName + ": ");
out.println(headerValue + "
");
}
获取请求消息体:
1:对用户在网站上的访问进行会话跟踪。
2:为服务器端程序提供预定义的输入。
3:存储动态产生的页面上下文信息。
隐藏字段存在一个主要的缺点,即只有每当每个页面都是动态生成的时候才有效。
B:表单是在生成动态时才有效,那么我们就使用HTTP Cookie来固定的保存在某个地方,需要是读取。
使用HTTP Cookie可以很好的维护和保留用户的状态信息,但是Cookie涉及到一些敏感的隐私问题,一些用户会禁用Cookie,这时我们需要另一个方法来解决
C:URL重写
D:Servlet提供了出色的解决方案,HttpSessionAPI,这种高级接口建立在Cookie和URL重写之上。
Session对象就是服务器为客户端创建并维护的用于存放客户状态数据的对象
一:Cookie
1:Cookie原理:
Cookie cookie = new Cookie("cool", "tiger!");
response.addCookie(cookie);
2:在Serlvet中管理Cookie
HttpSession session = request.getSession(); //getSession(false)方法使用已经存在的会话,而不必创建新会话
6:Session持久化管理
三:URL重写
URL重写方法:
response.encodeURL()
response.encodeRedirectURL(“/lovobook/sucess.html” )
URL重写是容器自动完成的,但需要我们对URL进行编码才有效
总结: