JavaWeb学习笔记4

6.7 HttpServletRequest

获取参数,请求转发

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<html>
<body>
<h2>Hello World!</h2>
<form action="${pageContext.request.contextPath}/login" method="post">
    用户名:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    爱好:
    <input type="checkbox" name="hobbies" value="跳舞">跳舞
    <input type="checkbox" name="hobbies" value="唱歌">唱歌
    <input type="checkbox" name="hobbies" value="看电影">看电影
    <br>
    <input type="submit">
</form>
</body>
</html>
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Array;
import java.util.Arrays;

public class RequestTest 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("hobbies");
        System.out.println(username+":"+password);
        System.out.println(Arrays.toString(hobbys));
        //通过请求转发
        req.getRequestDispatcher("success.jsp").forward(req,resp);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

7 Cookie、Session

7.1 会话

会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话
有状态会话:一个同学来过教室,下次过来,我们会知道他曾经来过,称之为有状态会话
一个网站,怎么证明你来过
客户端 服务端
1.服务端给客户端一个信件,客户端下次访问服务端带上信件就可以:cookie
2.服务器登记你来过了,下次你来的时候,服务器匹配你:session

7.2 保存会话的两种技术

cookie:客户端技术,响应,请求
session:服务器技术,利用这个技术,可以保存用户的会话信息?我们可以把信息或者数据放在session中
常见场景:网站登录之后,你下次不用再登录了,第二次访问直接就上去了

7.3 cookie

1.从请求中拿到cookie信息
2.服务器响应给客户端cookie

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

cookie:一般会保存在本地的用户目录下appdata
例子

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

public class Cookie1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决中文乱码
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("gbk");
        PrintWriter out=resp.getWriter();
        //从客户端获取cookie
        Cookie[] cookies=req.getCookies();
        //判断cookies是否存在
        if(cookies!=null)
        {
            out.write("您上一次访问时间是");
            for (int i = 0; i < cookies.length; i++) {
                Cookie cookie=cookies[i];
                if(cookie.getName().equals("lastLoginTime"))
                {
                    long lastLoginTime=Long.parseLong(cookie.getValue());
                    Date date=new Date(lastLoginTime);
                    out.write(date.toLocaleString());
                }
            }
        }
        else
        {
            out.write("这次您第一次访问本站!");
        }
        //服务器给客户端响应一个cookie
        Cookie cookie=new Cookie("lastLoginTime",System.currentTimeMillis()+"");
        //设置cookie有效期
        cookie.setMaxAge(24*60*60);
        //响应给客户端一个cookie
        resp.addCookie(cookie);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

一个网站cookie是否存在上限
一个cookie只能保存一个信息
一个web站点可以给浏览器发送多个cookie,最多存放20个cookie
cookie大小限制4kb
300个cookie浏览器上限
删除cookie:
不设置有效期,关闭浏览器自动失效
设置有效时间为0
编码解码

String str=URLEncoder.encode("test","utf-8");
URLDecoder.decode("str","utf-8");

7.4 session

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

public class Session1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决乱码问题
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        //得到session
        HttpSession session=req.getSession();
        //给session中存东西
        session.setAttribute("name","小明");
        //获取session的Id
        String id=session.getId();
        //判断session是不是新创建
        if(session.isNew())
        {
            resp.getWriter().write("创建session成功,id为"+id);
        }else{
            resp.getWriter().write("session已经在服务器中存在了,id为"+id);
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

配置文件

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <servlet>
    <servlet-name>cookie</servlet-name>
    <servlet-class>Cookie1</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>cookie</servlet-name>
    <url-pattern>/cookie</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>session1</servlet-name>
    <servlet-class>Session1</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>session1</servlet-name>
    <url-pattern>/session</url-pattern>
  </servlet-mapping>
</web-app>
session.getAttribute("name");
//手动注销session
session.invalidate();
//移除session中的属性
session.removeAttribute("name");
//session第一次创建时,会创建一个cookie保存session的id
Cookie cookie=new Cookie("JSESSION",id);
resp.addCookie(cookie);

session和cookie的区别
cookie是把用户的数据写给用户的浏览器,浏览器保存,可以保存多个
session是把用户的数据写到用户独占session中,服务器端保持(保存重要的信息,减少服务器资源的浪费)
session对象有服务创建
使用场景
保存一个登录用户的信息
购物车信息
在整个网站中经常会使用的数据

<!--  设置session的失效时间-->
 <session-config>
<!--15分钟后session自动失效,分钟为单位-->
   <session-timeout>15</session-timeout>
 </session-config>

当服务器中的servlet执行request.getSession();时如果没有JsessionID或没有id相匹配的session时会创建一个session同时生产一个id并将这个id存到cookie写到用户浏览器中。当用户再次访问服务器时就会带上这个cookie的id.此时服务器在用这个id与内存中的session进行匹配。匹配成功即可使用这个session来服务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值