HttpServletRequest

简介: HttpServletRequest

HttpServletRequest(请求)

HttpServletResponse(响应)

web服务器接收到客户端的http请求,针对这个请求分别创建一个代表请求的HttpServletRequest对象,一个代表响应的HttpServletResponse对象;

如果要获取客户端请求过来的参数:找HttpServletRequest

如果要给客户响应一些信息:找HttpServletResponse

简单分类

负责向浏览器发送数据的方法:ServletoutputStream getoutputStream() throws IOException;

PrintWriter getWriter() throws IOException;

常见应用:向浏览器输出消息,

下载文件:

获取下载文件路径

下载的文件名是什么

设置想办法让浏览器能够支持(Content-disposition)下载我们需要的东西

获取下载文件的输入流

创建缓冲区

获取OutputStream对象

将FileOutStream流写入到Buffer缓冲区

使用OutputStream将缓冲区中的数据输出到客户端

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      //获取下载文件路径
    String realPath = this.getServletContext().getRealPath("/11.jpg"); //这里是路径
    System.out.println("获取的要下载文件的路径是:"+realPath);
      //下载的文件名是什么
    String fileName = realPath.substring(realPath.lastIndexOf("\\")+1);
      //设置想办法让浏览器能够支持(Content-disposition)下载我们需要的东西,中文文件URLEncoder.encode编码,要不然会乱码
    resp.setHeader("Content-disposition","attachment;filename="+ URLEncoder.encode(fileName,"utf-8"));
      //获取下载文件的输入流
    FileInputStream in = new FileInputStream(realPath);
      //创建缓冲区
    int len = 0;
    byte[] buffer = new byte[1024];
     //获取OutputStream对象
    ServletOutputStream out = resp.getOutputStream();
     //将FileOutStream流写入到Buffer缓冲区
    while((len=in.read(buffer))>0){
        out.write(buffer,0,len);
    }
    in.close();
    out.close();
     //使用OutputStream将缓冲区中的数据输出到客户端
}


Response重定向

B一个web资源收到客户端A请求后,B他会通知客户端去访问另一个web资源C,这个过程叫重定向

常见场景:

用户登录:这个方法

public void sendRedirect(String location) throws IOException;
public class RedirectServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //处理请求,把前端的账号密码打印到了后台
        String username = resp.getParameter("username");
        String password = resp.getParameter("password");
       //重定向
        resp.sendRedirect("/r/success.jsp"); //提交之后跳转到这里,重定向的时候一定注意路径问题,要不然404
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
jsp代码
<%--这里提交的路径需要寻找项目的路径--%>
<%--${pageContext.request.contextPath}代表当前项目--%>
<form action="${pageContext.request.contextPath}/login" method="get">
    用户名:<input type="text" name="username">
    密码:<input type="password" name="password">
    <input type="submit">
</form>
wen.xml代码
<servlet>
    <servlet-name>re</servlet-name>
    <servlet-class>com.qiqi.servlet.RedirectServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>re</servlet-name>
    <url-pattern>/login</url-pattern>
</servlet-mapping>


HttpServletRequest(请求)应用

HttpServletRequest代表请求,用户通过Http协议访问服务器 Http请求中的所有信息全会被封装到HttpServletRequest中,通过这个HttpServletRequest方法,获得客户端的所有信息

req.getPart()   //可以返回字符串和字符串数组
登录实现:获取参数请求转发
public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");  //处理后台乱码问题
        resp.setCharacterEncoding("utf-8");
     String username =  req.getParameter("username");
     String password =  req.getParameter("password");
     String[] hobbys =  req.getParameterValues("hobbys");
     System.out.println("====================================");
     System.out.println("username:"+username);
     System.out.println("password:"+password);
     System.out.println(Arrays.toString(hobbys));
     System.out.println("====================================");
     //通过请求转发
        resp.setCharacterEncoding("utf-8");
        req.getRequestDispatcher("/succeess.jsp").forward(req,resp);
    }
    jsp文件
<body>
<h1>登录:</h1>
<div style="text-align: center">
    <%--这里表单的意思是,会以post方式提交表单,提交到login请求--%>
    <form action="${pageContext.request.contextPath}/login" method="post">
        用户名:<input type="text" name="username"><br>
        密码:<input type="password" name="password"><br>
        爱好:
        <input type="checkbox" name="hobbys" value="女孩">女陔
        <input type="checkbox" name="hobbys" value="唱歌">唱歌
        <input type="checkbox" name="hobbys" value="电影">电影
        <input type="checkbox" name="hobbys" value="代码">代码
        <br>
        <input type="submit">
    </form>
</div>
</body>
</html>
web.xml文件
<servlet>
  <servlet-name>LoginServlet</servlet-name>
  <servlet-class>com.kuang.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>LoginServlet</servlet-name>
  <url-pattern>/logir</url-pattern>
</servlet-mapping>


Cookie Session

会话:用户打开一个浏览器,点击了很多超链接,访问了多个web资源,关闭浏览器,这个过程称之为会话

有状态会话:客户端曾经访问过服务器,下次来服务器记住了,曾经来过称之为有状态会话

怎么证明客户端来过服务端?

1,服务端给客户端一个新建,客户端下次访问带上新建就可以;cookie

2,服务器等级你来过了下次你来的时候我来匹配;seesion

保存会话的两种技术(Cookie Session)

cookie:

客户端技术(响应,请求)

session:

服务器技术,利用这个技术可以保存用户的会话信息,我们可以把信息或数据放在session中

Cookie[] cookies1 = req.getCookies();  //获得Cookie
cookies1.getName();                  //获得Cookie中得key
cookies1.getValue();                 //获得Cookie中得Vlaue
new Cookie("lastLoginTime",System.currentTimeMillis()+"");//新建一个Cookie
cookies1.setMaxAge(24*60*60);        //设置Cookie有效期
resp.addCookie(cookies1);           //响应给客户端一个Cookie


Cookie:一般保存在本地的用户目录下的appdata;

一个网站得Cookie存在上限

一个Cookie只能保存一个信息

一个web可以给浏览器发送多个Cookie,浏览器最多300个,最多存放20个Cookie

Cookie大小校址4kb

删除Cookie(不设置有效期,关闭浏览器自动失效;设置有效期时间为0 setMaxAge(0))

Cookie cookie = new Cookie("name","琪琪"); //编码
out.write(URLDecoder.decode(cookie.getValue(),"utf-8"));  //解码


相关文章
|
7月前
HttpServletRequest类
HttpServletRequest类
45 0
|
应用服务中间件 容器
【JavaWeb】知识总结Ⅹ(HttpServletRequest, HttpServletResponse)
请求行信息:可以使用getMethod()方法获取请求方法(如GET、POST等),使用getRequestURI()方法获取请求的URI(统一资源标识符),使用getProtocol()方法获取请求使用的协议(如HTTP/1.1)。 请求头信息:可以使用getHeader(String name)方法获取指定名称的请求头的值,使用getHeaderNames()方法获取所有请求头的名称的枚举。 请求参数:可以使用getParameter(String name)方法获取指定名称的请求参数的值,使用getParameterNames()方法获取所有请求参数的名称的枚举。
|
JSON 编解码 前端开发
认识HttpServletRequest和HttpServletResponse
认识HttpServletRequest和HttpServletResponse
|
应用服务中间件
HttpServletRequest 类
HttpServletRequest 类
HttpServletRequest 类
|
应用服务中间件
HttpServletResponse 类
HttpServletResponse 类
HttpServletResponse 类
Servlet—HttpServletRequest与HttpServletResponse对象常用方法
Servlet—HttpServletRequest与HttpServletResponse对象常用方法
Servlet—HttpServletRequest与HttpServletResponse对象常用方法
|
前端开发 应用服务中间件 程序员
HttpServletRequest接口
HttpServletRequest接口
154 0
HttpServletRequest接口
|
编译器 应用服务中间件
HttpServletResponse接口
HttpServletResponse接口
178 0
HttpServletResponse接口
|
XML 缓存 Java
HttpServletRequest 对象
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。 其他的具体方法就不详细描述了,具体方法上的使用看API,或者网上查查,有很多的。这里就介绍一下 请求方式 和 获取参数 的问题
|
XML 数据格式 容器
HttpServletRequest:Get Session
接口HttpServletRequest继承自ServletRequest。
228 0