JSP数据交互:request、response对象

JSP数据交互之request对象

JSP内置对象是 Web 容器创建的一组对象

一、request对象主要用于处理客户端请求
1、什么是request?
request是Servlet.service()方法的一个参数,
类型为javax.servlet.http.HttpServletRequest。在客户端发出每个请求时,服务器都会创建一个request对象,并把请求数据封装到request中,然后在调用Servlet.service()方法时传递给service()方法,这说明在service()方法中可以通过request对象来获取请求数据。

通过request获得请求行

获得客户端的请求方式:String getMethod()
String getContextPath() ---web应用的名称
request.getRemoteAddr() --- 获得访问的客户端IP地址

通过request获得请求头

String getHeader(String name)

通过request获得请求体

String getParameter(String name) 
String[] getParameterValues(String name)
Map<String,String[]> getParameterMap()

解决post提交方式的乱码:request.setCharacterEncoding("UTF-8");
解决get提交的方式的乱码:

parameter = new String(parameter.getbytes("iso8859-1"),"utf-8");

request是一个域对象
request对象也是一个存储数据的区域对象,所以也具有如下方法:

setAttribute(String name, Object o)
getAttribute(String name)
removeAttribute(String name)

request完成请求转发
1、获得请求转发器----path是转发的地址

RequestDispatcher getRequestDispatcher(String path)

2、通过转发器对象转发

requestDispathcer.forward(ServletRequest request, ServletResponse response)

示例:JAVA代码

@WebServlet("/ser05")
public class Servlet05 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //设置请求的编码格式
        req.setCharacterEncoding("UTF-8");
        String uname=req.getParameter("userName");
        String upwd=req.getParameter("userPwd");
        //判断用户名
        if(uname==null||!"admin".equals(uname)){
            //设置request作用域
            req.setAttribute("msg","用户名不正确!");
            //请求转发
            req.getRequestDispatcher("login.jsp").forward(req,resp);
            return;
        }
        //判断密码
        if(upwd==null||!"123456".equals(upwd)){
            //设置request作用域
            req.setAttribute("msg","用户密码不正确!");
            //请求转发
            req.getRequestDispatcher("login.jsp").forward(req,resp);
            return;
        }
        //登录成功
        //将用户名设置到request作用域
        req.setAttribute("userName",uname);
        //请求转发  跳转到首页
        req.getRequestDispatcher("mian.jsp").forward(req,resp);
    }
}

JSP代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户登录</title>
</head>
<body>
<form method="post" action="ser05">
    姓名:<input type="text" name="userName">
    密码:<input type="password" name="userPwd">
    <button type="submit">登录</button> <%=request.getAttribute("msg")%>
</form>
</body>
</html>

请求转发

request.getRequestDispatcher("路径").forward(req,resp);

服务端跳转,地址栏不发生改变 只有一次请求 request作用域数据可以共享

request作用域
用来存放数据的特殊范围,存放的数据可以在动态页面中获取

设置作用域  request.setAttribute("参数名","参数值");
获取作用域  Object o=request.getAttribute("参数名");
移除作用域  request.removeAttribute("参数名");

response对象用于响应客户请求并向客户端输出信息
1、什么是response?
response是Servlet.service方法的一个参数,类型为javax.servlet.http.HttpServletResponse。在客户端发出每个请求时,服务器都会创建一个response对象,并传入给Servlet.service()方法。response对象是用来对客户端进行响应的,这说明在service()方法中使用response对象可以完成对客户端的响应工作。
2、response对象的功能分为以下四种:
l 设置响应头信息;
l 发送状态码;
l 设置响应正文;
l 重定向;

response是响应对象,向客户端输出响应正文(响应体)可以使用response的响应流,repsonse一共提供了两个响应流对象(两种流不能同时使用)

PrintWriter out = response.getWriter():获取字符流;字符输出流(只能响应字段)
ServletOutputStream out = response.getOutputStream():获取字节流;字节输出流(能够响应任何类型的数据)

@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //设置服务端的编码格式
    response.setCharacterEncoding("UTF-8");
    //设置客户端的编码格式
    response.setHeader("content-type","text/html;charset=UTF-8");
    //同时设置服务端与客户端的编码格式
    response.setContentType("text/html;charset=UTF-8");
    //字符输出流
    PrintWriter writer= response.getWriter();
    writer.write("<h2>Hello</h2>");
    writer.flush();
    writer.close();
    //字节输出流
    ServletOutputStream out=response.getOutputStream();
    out.write("<h2>Hello</h2>".getBytes());
    out.flush();
    out.close();
}
response.setStatus(200):设置状态码;
response.sendError(404, “您要查找的资源不存在”)

重定向是服务器通知浏览器去访问另一个地址,即再发出另一个请求。
重定向的实现
响应码为200表示响应成功,而响应码为302表示重定向。
所以完成重定向的第一步就是设置响应码为302。
因为重定向是通知浏览器再第二个请求,所以浏览器需要知道第二个请求的URL,所以完成重定向的

重定向是两次请求;
重定向的URL可以是其他应用,不局限于当前应用;
重定向的响应头为302,并且必须要有Location响应头;
重定向就不要再使用response.getWriter()或response.getOutputStream()输出数据,不然可能会出现异常;

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值