Servlet之请求包含与会话技术获取表单信息(Cookie)

news/2024/5/18 12:40:37 标签: Cookie, include, response, 会话技术

request获取form表单中提交的数据

用ServletContext获取
ServletContext context = this.getServletContext();
String username = context.getInitParameter("username");
用request获取
request获取表单中的信息时自己不用创建对象,request比ServletContext更常用
1.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form action="/sh-web-servlet06/demo01" method="get">
        用户名:<input type="text" name="username" /><br/>
        密码:<input type="text" name="password" /><br/><input type="radio" name="sex" value="男" checked="checked"><br/><input type="radio" name="sex" value="女"><br/>
        <input type="checkbox" name="hobby" value="篮球">篮球<br/>
        <input type="checkbox" name="hobby" value="唱歌">唱歌<br/>
        <input type="checkbox" name="hobby" value="画画">画画<br/>
        <select name="city">
            <option>--- 请选择城市 ---</option>
            <option name="bj">北京</option>
            <option name="sh">上海</option>
            <option name="tj">天津</option>
        </select><br/>
        <input type="submit" value="提交">
    </form>
</body>
</html>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>sh-web-servlet06</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

  <servlet>
    <servlet-name>demo01</servlet-name>
    <servlet-class>com.lanou3g.Demo01</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>demo01</servlet-name>
    <url-pattern>/demo01</url-pattern>
  </servlet-mapping>
</web-app>
Demo01
public class Demo01 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        System.out.println(username);
        String password = request.getParameter("password");
        System.out.println(password);
        String sex = request.getParameter("sex");
        System.out.println(sex);
        String[] hobbys = request.getParameterValues("hobby");
        for (String hobby : hobbys) {
            System.out.println(hobby);
        }
        String city = request.getParameter("city");
        System.out.println(city);

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}
结果截图

这里写图片描述
这里写图片描述
这里写图片描述

getParameterNames()方法

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Enumeration<String> names = request.getParameterNames();
    while(names.hasMoreElements()) {
        String name = names.nextElement();
        String[] values = request.getParameterValues(name);
        for (String value : values) {
            System.out.println(value);
        }
    }

}
结果截图

这里写图片描述
这里写图片描述

导包调用包中的方法

导入两个包commons-beanutils-1.9.3.jar和commons-logging-1.2.jar,其中
commons-beanutils-1.9.3.jar依赖 commons-logging-1.2.jar,调用commons-beanutils-1.9.3.jar
包中的方法,来获取form表单中的数据
调用request方法getParameterMap()来获取map集合
BeanUtils.populate(user, map);
把表单数据封装到对象中
参数1 要封装的对象 注意:该对象要符合javabean规范
参数2 map集合
建立实体类users

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Map<String, String[]> map = request.getParameterMap();
    User user = new User();
    try {
        BeanUtils.populate(user, map);
        System.out.println(user);
    } catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
结果截图

这里写图片描述

请求转发 重定向 请求包含

请求包含:只能站内访问 相当于把两个页面的响应合成一个响应 返回给浏览器
请求转发:只能站内访问 一次请求 只是服务器内部的访问 不管你怎么写路径 始终都在项目路径下
重定向:站内站外都可以访问 重定向既可以访问本地服务器 也可以访问非本地服务器 两次请求

如果在AServlet中请求转发到BServlet,那么在AServlet中不允许再输出响应体,即不能使用response.getWriter() 和
response.getOutputStream() 向客户端输出,这一工作交由BServlet来完成;如果是由AServlet请求包含BServlet,则没有这个限制

请求转发

private void fun1(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.getRequestDispatcher("/demo03").forward(request, response);
    PrintWriter writer = response.getWriter();
    writer.write("我是demo02");
    System.out.println("我是demo02...");
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    request.setCharacterEncoding("UTF-8");
    PrintWriter writer = response.getWriter();
    writer.write("我是demo03");
    System.out.println("我是demo03...");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doGet(request, response);
}

这里写图片描述
这里写图片描述

重定向

private void fun2(HttpServletResponse response) throws IOException {
    response.sendRedirect("/sh-web-servlet06/demo03");
    PrintWriter writer = response.getWriter();
    writer.write("我是demo02");
    System.out.println("我是demo02...");
}

这里写图片描述
这里写图片描述

请求包含

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    request.setCharacterEncoding("UTF-8");
    request.getRequestDispatcher("/demo03").include(request, response);
    PrintWriter writer = response.getWriter();
    writer.write("我是demo02");
    System.out.println("我是demo02...");
}

这里写图片描述
这里写图片描述

cookie

 会话技术
 客户端(浏览器)和服务端进行交互(会话)
 当浏览器关闭的时候 这次交互(会话)结束
 例如打电话
 会话中的两个技术
 1.cookie(客户端技术)
 cookie是保存在浏览器中的缓冲数据
 当我发起一个请求 请求一个servlet
 然后进行逻辑处理(添加一个商品进购物车)
 处理完成后给客户端(浏览器)一个响应
 响应中携带着记录了购买了什么商品的cookie
 让浏览器保存起来 可以保存在内存当中(结束会话 cookie被清除)
 也可以保存在硬盘中(结束会话 依然存在 就是个文件)
 当用浏览器再一次访问购物车的时候
 会携带着之前保存的cookie

 每个网站可以保存20个cookie 整个浏览器可以保存 300个
 注意:第一次访问服务器的时候 是不会携带cookie去访问的
 因为cookie还没有产生,只有当第一次请求后的响应中可以把cookie
 写回到浏览器中
每次刷新页面时,输出的时间都会改变
public class Demo04 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置响应编码格式
        response.setContentType("text/html;charset=UTF-8");
        // 防止服务器传过来的中文乱码
        request.setCharacterEncoding("UTF-8");

        // 读取cookie
        Cookie[] cookies = request.getCookies();
        if(cookies != null) {
            // 遍历数组
            for (Cookie cookie : cookies) {
                if(cookie.getName().equals("lastTime")) {
                    // 取出cookie的值
                    String value = cookie.getValue();
                    // 字符串转long
                    long time = Long.parseLong(value);
                    // 转成日期 Date
                    Date date = new Date(time);
                    // 创建一个显示的日期格式
                    // 参数就是你想要显示的日期格式
                    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    // 格式化时间
                    String lastTime = dateFormat.format(date);
                    // 响应回浏览器显示
                    response.getWriter().write("上次的访问时间:" + lastTime);
                }
            }
        }

        // 创建cookie 记录当前的时间
        Cookie cookie = new Cookie("lastTime", System.currentTimeMillis() + "");
        // 设置一下cookie的保存路径 工程名+配置网址路径
        // 读取cookie是按 请求的地址 寻找cookie的
        // 如果你配置请求路径没有一级目录
        // 所有的网址都能找到你这个cookie
        // cookie.setPath("/");
        cookie.setPath("/sh-web-servlet05/servlet");
        // 设置cookie存活时间 Integer.MAX_VALUE
        // 负值 浏览器关闭 cookie消失
        // 正值表示存活的时间
        // 0表示删除cookie
        cookie.setMaxAge(60 * 5);
        // 把cookie进响应当中
        response.addCookie(cookie);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}

这里写图片描述

Demo05中获取Demo04中设置的时间时,该时间不会改变,因为demo05中只有时间的获取,没有时间的设置
public class Demo05 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        Cookie[] cookies = request.getCookies();
        if(cookies != null) {
            for (Cookie cookie : cookies) {
                if(cookie.getName().equals("lastTime")) {
                    String value = cookie.getValue();
                    long long1 = Long.parseLong(value);
                    Date date = new Date(long1);
                    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    String format = dateFormat.format(date);
                    response.getWriter().write(format);
                }
            }
        }
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

这里写图片描述

demo06

package com.lanou3g;
/*
 * 登录后 记录用户名
 */
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Demo06 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        // 防止服务器传过来的中文乱码
        request.setCharacterEncoding("UTF-8");
        String username = "";
        // 读取cookie
        Cookie[] cookies = request.getCookies();
        if(cookies!=null) {
            for (Cookie cookie : cookies) {
                if(cookie.getName().equals("username")) {
                    username=cookie.getValue();
                }
            }
        }
        System.out.println(username);
        // 设置页面
        response.getWriter().write("<form action='demo07' method='post'>");
        response.getWriter().write("用户名:<input type='text' name='username' /><br/>");
        response.getWriter().write("密码:<input type='text' name='password' /><br/>");
        response.getWriter().write("记住:<input type='checkbox' name='remember' /><br/>");
        response.getWriter().write("<input type='submit' value='提交'><br/>");

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

demo07

package com.lanou3g;

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

public class Demo07 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置响应编码格式
        response.setContentType("text/html;charset=UTF-8");
        // 防止服务器传过来的中文乱码
        request.setCharacterEncoding("UTF-8");
        // 获取请求的参数
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String remember = request.getParameter("remember");
        // 创建一个cookie
        Cookie cookie = new Cookie("username", username);
        // 设置cookie路径
        cookie.setPath("/sh-web-servlet05/servlet");
        // 处理业务逻辑
        if(username.equals("wwwww")&&password.equals("123")) {
            // 判断是否点 记住按钮
            if(remember!=null) {
                // 需要记住(设置存活时间)
                cookie.setMaxAge(Integer.MAX_VALUE);

            }else {
                // 删除原来的cookie
                cookie.setMaxAge(0);
            }
            // 添加到响应中
            response.addCookie(cookie);
            response.getWriter().write("登录成功");
        }else {
            response.getWriter().write("登录失败");
            // 3秒后 回去登录页面
            response.setHeader("refresh", 
                    "3;url=/sh-web-servlet05/servlet/demo06");
        }
        // 请求分发
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

这里写图片描述


http://www.niftyadmin.cn/n/1828863.html

相关文章

uva11181Probability|Given

枚举&#xff0c;条件概率。 2^20次方等于100w&#xff0c;是大约可以没准还能过的。 二进制枚举时&#xff0c;如果买东西的人恰好为r个&#xff0c;设概率为p&#xff0c;就将sum[i]p&#xff08;sum[i]为r个人买东西时第i个人买东西的概率&#xff09;&#xff0c;totp&…

Servlet之Session域

HttpSession-服务端会话技术 HttpSession 域对象 可以存东西 服务器会为每一个用户创建一个独立的HttpSessionHttpSessionn 原理 当Servlet第一次访问Servlet的时候 服务器端会给该用户创建一个独立的Session 并且生成一个SessionID,这个Session在响应浏览器的时候 会被装进co…

mysql5.6+主从集的版本号(mysql5.5主机和从机载带后,5.5在设置有一定的差距)

怎么安装mysql数据库。这里不说了&#xff0c;仅仅说它的主从复制&#xff0c;过程例如以下 在进行主从设置之前 首先确保mysql主从server之间的数据库port防火墙互相打开&#xff0c; 尽量确保主从数据库账户一致性(主从切换使用)。否则将操作失败&#xff0c; 其次是确保mys…

TestNG之执行顺序

如果很有个测试方法&#xff0c;并且这几个方法又有先后顺序&#xff0c;那么如果让TestNG按照自己想要的方法执行呢 一、通过Dependencies 1.在测试类中添加Dependencies Testpublic void test1() {System.out.println("this is test1");}Test(dependsOnMethods { …

部署虚拟后网卡不能启动问题

启动系统后不能上网&#xff0c;通过ifconfig查看网卡没启动&#xff0c;遂启动网卡服务&#xff0c;但是出错&#xff0c;就是&#xff1a;device eth0 does not seem to be present, delaying initialization&#xff0c;然后想到是不是ifcfg-eth0的配置文件里保存了以前的MA…

获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列

获取一个数二进制序列中所有的偶数位和奇数位&#xff0c;分别输出二进制序列 比如11的二进制为01011 输出为 奇数序列:0 0 1 偶数序列:1 1 代码如下: 1 void print_num(unsigned value)2 {3 int count 0;//计算二进制 位数4 int a[32] { 0 };5 int i 0;6 w…

编译安装fcgiwrap

为什么80%的码农都做不了架构师&#xff1f;>>> git clone https://github.com/gnosek/fcgiwrap.git autoconf -i 如果发生以下报错&#xff0c; configure.ac:32: error: possibly undefined macro: AC_DEFINE If this token and others are legitimate, please u…

脱壳_详细_使用的方法_04

PS: 开始 难度中高级的壳 1、第16课 基础脱壳教程16&#xff1a;脱 ACProtect 1.32 (无Stolen Code)  1、设置异常&#xff0c;隐藏OD  2、SE处下内存访问断点  3、SHIFTF9&#xff0c;F2&#xff0c;再一次SHIFTF9&#xff0c;下断&#xff0c;再一次SHIFTF9  4、取消…