zoukankan      html  css  js  c++  java
  • JavaWeb学习笔记(10)

    获得客户端请求参数(客户端提交的数据)

    • getParameter(name)方法
    • getParameterValues(String name)方法    获取一个参数的多个值
    • getParameterNames方法
    • getParameterMap方法  //做框架用,非常实用
    • getInputStream
    package com.zx.web.servlet;
    
    import java.io.IOException;
    import java.util.Enumeration;
    import java.util.Map;
    import java.util.Map.Entry;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @WebServlet("/Lesson01Servlet")
    public class Lesson01Servlet extends HttpServlet{
        
        @Override
        protected void doGet(HttpServletRequest requset, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            /*Enumeration<String> e= requset.getParameterNames();
            while (e.hasMoreElements()) {
                System.out.println(e.nextElement());
            }*/
            
            Map<String, String[]> map= requset.getParameterMap();
            for (Entry<String,String[]> entry:map.entrySet()) {
                System.out.println("参数名字:"+entry.getKey());
                
                System.out.print("参数的值:  ");
                for (String value:entry.getValue()) {
                    System.out.println(value);
                }
            }
        }
    }

     获取表单数据1

    package com.zx.web.servlet.lesson02;
    
    import java.io.IOException;
    import java.util.Arrays;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @WebServlet("/Lesson02Servlet")
    public class Lesson02Servlet extends HttpServlet{
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // TODO Auto-generated method stub
            String username=req.getParameter("username");
            String password=req.getParameter("password");
            String gender=req.getParameter("gender");
            String remark=req.getParameter("remark");
            String[] hobbies = req.getParameterValues("hobby");
            
            System.out.println(username);
            System.out.println(password);
            System.out.println(gender);
            System.out.println(remark);
            System.out.println(Arrays.toString(hobbies));
        }
    }
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
    <!--  表单的请求有get/post两种方式 ,
    默认是get请求,如果是这样的话,在后台Servlet要写doGet方法
    如果是post请求,后台要写post方法
    -->
    <form action="/day10Web/Lesson02Servlet">
        用户名:<input type="text" name="username"><br>
        密码:<input type="password" name="password"><br>
        性别:
        <input type="radio" name="gender" value="male"><input type="radio" name="gender" value="female"><br>    
        爱好:
        <input type="checkbox" name="hobby" value="学习">学习
        <input type="checkbox" name="hobby" value="赚钱">赚钱
        <input type="checkbox" name="hobby" value="游戏">游戏
        <input type="checkbox" name="hobby" value="玩耍">玩耍<br>
        备注:
        <textarea rows="5" cols="50" name="remark"></textarea><br>
        <input type="submit" value="提交">
    </form>
    </body>
    </html>

    post请求时,中文会乱码,解决方法setCharacterEncoding,只针对post有效

    @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // TODO Auto-generated method stub
            //post请求时,中文会乱码,解决方法
            req.setCharacterEncoding("UTF-8");//只针对post 请求
            
            String username=req.getParameter("username");
            String password=req.getParameter("password");
            String gender=req.getParameter("gender");
            String remark=req.getParameter("remark");
            String[] hobbies = req.getParameterValues("hobby");
            
            System.out.println(username);
            System.out.println(password);
            System.out.println(gender);
            System.out.println(remark);
            System.out.println(Arrays.toString(hobbies));
        }

    get和post请求的区别:

    • get请求是把请求参数放在url?后面进行拼接,
    • post请求在url中是看不到参数
    • post请求比较安全点

    getInputStream【获取不到参数】-----针对post请求有效

    使用InputStream读取数据时,发现中文变成百分号形式

    post请求会对中文进行URL编码【中文变成百分号形式】

    【url解码】:百分号形式变成中文

    反射:当一个字节码文件加载到内存的时候,jvm会对该字节码j进行解剖,然后会创建y一个对象的class对象,把字节码文件的信息全部存储到该Class对象中,我们只要获取到Class对象,就可以使用很多操作

    获取class对象方式一:Class.forName("包名.类名")

    获取Class对象方式二:通过类名获取  类名.Class

    获取Class对象方式三:通过对象获取  new 类名().getClass();

    在反射中,如果想要获取到私有的东西,需要在get上加Declared即可

    invoke  执行方法,第一个参数:执行的对象,第二个参数:方法需要的参数

    获取表单二:

    package com.zx.web.servlet.lesson04;
    
    import java.io.IOException;
    import java.lang.reflect.InvocationTargetException;
    import java.util.Arrays;
    import java.util.Map;
    import java.util.Map.Entry;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.commons.beanutils.BeanUtils;
    
    import com.zx.web.model.User;
    
    @WebServlet("/Lesson04Servlet")
    public class Lesson04Servlet extends HttpServlet{
        
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // TODO Auto-generated method stub
            req.setCharacterEncoding("UTF-8");
            User user=new User();
            try {
                BeanUtils.populate(user, req.getParameterMap());
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            System.out.println(user);
        }
    }

    重定向:需要添加一个项目路径=上下文路径

     forward:假设是Servlet1转发给Servlet2,只有2的数据可以响应给客户端(浏览器)

    include:也是请求转发,假设是Servlet1转发给Servlet2,1和2的数据都可以响应给客户端(浏览器)

    转发地址栏不变,重定向地址栏改变

    post请求有请求体,get请求没有请求体,因为参数在url后面

    maxAge:cookie的缓存时间。默认是-1,默认存在浏览器的缓存中。单位是秒

    • 负数:表示cookie的数据存在浏览器缓存中
    • 0:表示删除cookie
    • 正数:缓存在持久化磁盘上的时间
    package com.zx.web.servlet.lesson09;
    
    import java.io.IOException;
    import java.lang.reflect.InvocationTargetException;
    import java.util.Arrays;
    import java.util.Map;
    import java.util.Map.Entry;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.commons.beanutils.BeanUtils;
    
    import com.zx.web.model.User;
    
    @WebServlet("/Lesson09Servlet")
    public class Lesson09Servlet extends HttpServlet{
        
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // TODO Auto-generated method stub
            //Cookie应用场景:记录上次访问时间
            //设置响应时乱码的问题
            resp.setHeader("content-type", "text/html;charset=utf-8");
            //获取请求头的Cookie
            Cookie[] cks=req.getCookies();
            if (cks!=null) {
                for(Cookie c:cks) {
                    System.out.println(c.getName()+":"+c.getValue());
                    resp.getWriter().write("上次访问的时间:"+c.getValue());
                }
            }
            
            //1.创建一个Cookie对象
            Cookie cookie=new Cookie("lastAccessTime", System.currentTimeMillis()+"");
            
            //2.设置cookie的存活时间【单位是秒】
            cookie.setMaxAge(60*20);
            
            //3.把Cookie返回给客户端【通过响应头传给客户端】
            resp.addCookie(cookie);
        }
    }

    Cookie细节

    • 一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。
    • 一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie。
    • 浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB
    • 如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器的内存中),用户退出浏览器之后即被删除。若希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie。
    • 在setMAxAge(0)后还要加上response》addCookie(c)的,要响应回去,才能生效

    记住用户名详解

     Servlet返回给客户端的数据可以是html标签数据,也就是可以write(“<a></a>”)

    常识:从客户端/浏览器获取的所有数据都是字符串类型

    查看书的浏览记录

  • 相关阅读:
    掌控像素的虚实
    多用组合,少用继承
    HTML5的语法变化和新增加元素
    又逢六月
    设计心情之心情设计
    web2.0生成器(超过100个)[转]
    css+div CSS教程——元素定位
    项目进度
    清华大学统一认证接口与PHP的调用
    将51JOB的求职意向选择框Down了
  • 原文地址:https://www.cnblogs.com/zhangwugai/p/11351071.html
Copyright © 2011-2022 走看看