文章目录
request和response和四大作用域
1.响应对象
1.1什么是响应?
响应:它表示服务器收到了请求,同时已经把请求处理完毕了。把处理结果告知用户。在B/S架构中响应就是把结果发送到浏览器。
1.2常用的响应对象
响应对象也是Servlet规范中定义的。servlet中包含了有协议和无协议的两种对象
协议有关的:HttpServletResponse接口
协议无关的:ServletResponse接口
Servlet提供这两个对象都是接口,没有具体的实现。Tomcat是真正的实现。而且tomcat同时还会帮助我们把对象创建出来并且传入到doGet和doPost方法中。
1.3 常用的方法和状态码
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletOutputStream os = resp.getOutputStream();
//响应内容的编码集
/*resp.setHeader("Content-Type", "text/html; charset=UTF-8");
resp.setCharacterEncoding("UTF-8");*/
/*os.write("测试一下".getBytes());*/
//重定向:相当于重新发送了一次请求 url地址发生了改变 请求参数丢失
//参数是jsp的路径:跳转到对应的页面
//参数是另外一个请求地址
resp.sendRedirect("test2");
}
200 执行成功
302 用于重定向的状态码
404 请求的资源找不到
405 请求的方式不被支持
500 服务内部运行错误
4XX:客户端错误
5XX:服务端错误
2.请求对象
2.1 什么是请求?
请求:就是客户希望从服务器端获取一些资源,向服务器发出询问。在B/S架构中就是客户使用浏览器访问页面
2.2常用的方法
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取服务器地址
//String localAddr = req.getLocalAddr();
//获取服务器名称
String localName = req.getLocalName();
System.out.println(localName);
//服务器端口
int localPort = req.getLocalPort();
System.out.println(localPort);
//来访者的IP
String remoteAddr = req.getRemoteAddr();
System.out.println(remoteAddr);
//来访者的主机
String remoteHost = req.getRemoteHost();
System.out.println(remoteHost);
//记住:获取访问的URL
String requestURI = req.getRequestURI();
System.out.println(requestURI);
}
2.3 获取请求参数(重点)
//获取请求的参数getParameter("参数的名称")
String uname = req.getParameter("uname");
System.out.println(uname);
String pwd = req.getParameter("pwd");
System.out.println(pwd);
String pwd2 = req.getParameter("pwd2");
System.out.println(pwd2);
//获取表单中同一个name多个value
String[] parameterValues = req.getParameterValues("hobby");
for (String s : parameterValues) {
System.out.println(s);
}
2.4 转发和重定向
//转发
req.getRequestDispatcher("转发的地址").forward(req, resp);
//重定向
resp.sendRedirect("重定向的地址");
//转发和重定向的区别
//1.转发url地址不会改变 重定向会改变url地址
//2.转发多少次都是一次请求 重定向一次就相当于重新发送了一次请求
//3.转发参数不会丢失 重定向会丢失参数
3.四大作用域
3.1application(ServletContext)
作用范围:所有的用户都可以获取此信息。此信息在整个服务器被保存。
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取application作用域对象:getServletContext()
ServletContext sc = this.getServletContext();
//从application作用域中获取值getAttribute(key)
String cname = (String)sc.getAttribute("cname");
if(cname==null||cname.equals("")) {
//设置/存储application作用域中的值setAttribute(key,value)
sc.setAttribute("cname", "小鸡跳动");
}
//获取用户请求的用户名参数
String uname = req.getParameter("uname");
ServletOutputStream os = resp.getOutputStream();
String message = uname+",欢迎加入"+(String)sc.getAttribute("cname");
os.write(message.getBytes());
//这个流不需要人工关闭。 因为Tomcat服务器会自动关闭这个流
}
3.2session(会话)
会话:当用户使用浏览器访问第一次访问应用,服务器就对其创建了一个会话对象。当用户关闭浏览器的时候,会话结束。一次会话期间只会创建一个session对象。
作用域:浏览器会话结束。
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String uname = req.getParameter("uname");
//获取session对象
HttpSession session = req.getSession();
//把用户名放入在session作用域中
session.setAttribute("uname", uname);
}
3.3request
作用域:它表示一个请求。只要发送一次请求就会创建一个request对象。仅在当前请求中有效
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String uname = req.getParameter("uname");
//放uname放入在request作用域中
req.setAttribute("uname", uname);
//转发 转发的时候request作用域中的值不会丢失
//req.getRequestDispatcher("test2").forward(req, resp);
//重定向
resp.sendRedirect("test3");
}
3.4pageContext
作用范围:整个JSP页面。是四大作用域中最小的。
生命周期:当对JSP页面请求的时候开始,当响应结束的时候销毁。
作用:获取其他的八大隐式对象。