• Servlet系列教材 (十)- 基础


     

    request对象的类是HttpServletRequest,提供了很多有实用价值的方法

    步骤1:先运行,看到效果,再学习
    步骤2:模仿和排错
    步骤3:request的常见方法
    步骤4:获取参数
    步骤5:获取头信息
    步骤6:服务端传参

    示例 1 : 先运行,看到效果,再学习

    老规矩,先下载下载区(点击进入)的可运行项目,配置运行起来,确认可用之后,再学习做了哪些步骤以达到这样的效果。

    示例 2 : 模仿和排错

    在确保可运行项目能够正确无误地运行之后,再严格照着教程的步骤,对代码模仿一遍。 
    模仿过程难免代码有出入,导致无法得到期望的运行结果,此时此刻通过比较正确答案 ( 可运行项目 ) 和自己的代码,来定位问题所在。 
    采用这种方式,学习有效果,排错有效率,可以较为明显地提升学习速度,跨过学习路上的各个槛。 

    推荐使用diffmerge软件,进行文件夹比较。把你自己做的项目文件夹,和我的可运行项目文件夹进行比较。 
    这个软件很牛逼的,可以知道文件夹里哪两个文件不对,并且很明显地标记出来 
    这里提供了绿色安装和使用教程:diffmerge 下载和使用教程

    示例 3 : request的常见方法

    request.getRequestURL(): 浏览器发出请求时的完整URL,包括协议 主机名 端口(如果有)" 
    request.getRequestURI(): 浏览器发出请求的资源名部分,去掉了协议和主机名" 
    request.getQueryString(): 请求行中的参数部分,只能显示以get方式发出的参数,post方式的看不到
    request.getRemoteAddr(): 浏览器所处于的客户机的IP地址
    request.getRemoteHost(): 浏览器所处于的客户机的主机名
    request.getRemotePort(): 浏览器所处于的客户机使用的网络端口
    request.getLocalAddr(): 服务器的IP地址
    request.getLocalName(): 服务器的主机名
    request.getMethod(): 得到客户机请求方式一般是GET或者POST

    request的常见方法

    import java.io.IOException;

    import java.io.PrintWriter;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    public class LoginServlet extends HttpServlet {

        protected void service(HttpServletRequest request, HttpServletResponse response)

                throws ServletException, IOException {

            String name = request.getParameter("name");

            String password = request.getParameter("password");

            System.out.println("浏览器发出请求时的完整URL,包括协议 主机名 端口(如果有): " + request.getRequestURL());

            System.out.println("浏览器发出请求的资源名部分,去掉了协议和主机名: " + request.getRequestURI());

            System.out.println("请求行中的参数部分: " + request.getQueryString());

            System.out.println("浏览器所处于的客户机的IP地址: " + request.getRemoteAddr());

            System.out.println("浏览器所处于的客户机的主机名: " + request.getRemoteHost());

            System.out.println("浏览器所处于的客户机使用的网络端口: " + request.getRemotePort());

            System.out.println("服务器的IP地址: " + request.getLocalAddr());

            System.out.println("服务器的主机名: " + request.getLocalName());

            System.out.println("得到客户机请求方式: " + request.getMethod());

            String html = null;

            if ("admin".equals(name) && "123".equals(password))

                html = "<div style='color:green'>登录成功</div>";

            else

                html = "<div style='color:red'>登录失败</div>";

            response.setContentType("text/html; charset=UTF-8");

            PrintWriter pw = response.getWriter();

            pw.println(html);

        }

    }

    示例 4 : 获取参数

    request.getParameter(): 是常见的方法,用于获取单值的参数
    request.getParameterValues(): 用于获取具有多值的参数,比如注册时候提交的 "hobits",可以是多选的。
    request.getParameterMap(): 用于遍历所有的参数,并返回Map类型。

    本例准备了一个注册的例子
    包括一个注册页面 register.html
    服务端的 RegisterServlet

    分别演示了获取单值参数,多值参数以及遍历所有的参数

    获取参数

    <!DOCTYPE html>

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <form action="register" method="get">

        账号 : <input type="text" name="name"> <br>

        爱好 : LOL<input type="checkbox" name="hobits" value="lol"

            DOTA<input type="checkbox" name="hobits" value="dota"> <br>

           

             <input type="submit" value="注册">

    </form>

    import java.io.IOException;

    import java.util.Arrays;

    import java.util.Map;

    import java.util.Set;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    public class RegisterServlet extends HttpServlet {

        protected void service(HttpServletRequest request, HttpServletResponse response)

                throws ServletException, IOException {

            System.out.println("获取单值参数name:" + request.getParameter("name"));

            String[] hobits = request.getParameterValues("hobits");

            System.out.println("获取具有多值的参数hobits: " + Arrays.asList(hobits));

            System.out.println("通过 getParameterMap 遍历所有的参数: ");

            Map<String, String[]> parameters = request.getParameterMap();

            Set<String> paramNames = parameters.keySet();

            for (String param : paramNames) {

                String[] value = parameters.get(param);

                System.out.println(param + ":" + Arrays.asList(value));

            }

        }

    }

    <?xml version="1.0" encoding="UTF-8"?>

    <web-app>

        <servlet>

            <servlet-name>HelloServlet</servlet-name>

            <servlet-class>HelloServlet</servlet-class>

            <load-on-startup>10</load-on-startup>

        </servlet>

        <servlet-mapping>

            <servlet-name>HelloServlet</servlet-name>

            <url-pattern>/hello</url-pattern>

        </servlet-mapping>

         

        <servlet>

            <servlet-name>LoginServlet</servlet-name>

            <servlet-class>LoginServlet</servlet-class>

        </servlet>

        <servlet-mapping>

            <servlet-name>LoginServlet</servlet-name>

            <url-pattern>/login</url-pattern>

        </servlet-mapping>    

        <servlet>

            <servlet-name>RegisterServlet</servlet-name>

            <servlet-class>RegisterServlet</servlet-class>

        </servlet>

        <servlet-mapping>

            <servlet-name>RegisterServlet</servlet-name>

            <url-pattern>/register</url-pattern>

        </servlet-mapping>    

    </web-app>

    示例 5 : 获取头信息

    request.getHeader() 获取浏览器传递过来的头信息。 
    比如getHeader("user-agent") 可以获取浏览器的基本资料,这样就能判断是firefox、IE、chrome、或者是safari浏览器
    request.getHeaderNames() 获取浏览器所有的头信息名称,根据头信息名称就能遍历出所有的头信息

    在本例,修改HelloServlet,使其获取头信息
    访问HelloServlet获取如下头信息:
    host: 主机地址
    user-agent: 浏览器基本资料
    accept: 表示浏览器接受的数据类型
    accept-language: 表示浏览器接受的语言
    accept-encoding: 表示浏览器接受的压缩方式,是压缩方式,并非编码
    connection: 是否保持连接
    cache-control: 缓存时限

    获取头信息

    import java.io.IOException;

    import java.util.Date;

    import java.util.Enumeration;

    import javax.servlet.ServletConfig;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    public class HelloServlet extends HttpServlet{

         

        public void init(ServletConfig config){

            System.out.println("init of Hello Servlet");

        }

        public void doGet(HttpServletRequest request, HttpServletResponse response){

         

            Enumeration<String> headerNames= request.getHeaderNames();

            while(headerNames.hasMoreElements()){

                String header = headerNames.nextElement();

                String value = request.getHeader(header);

                System.out.printf("%s %s%n",header,value);

            }

             

            try {

                response.getWriter().println("<h1>Hello Servlet!</h1>");

                response.getWriter().println(new Date().toLocaleString());

            catch (IOException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

         

    }

    示例 6 : 服务端传参

    setAttribute和getAttribute可以用来在进行服务端跳转的时候,在不同的Servlet之间进行数据共享

    MVC章节会提供更好实例帮助大家理解这两个方法的用途


    更多内容,点击了解: https://how2j.cn/k/servlet/servlet-request/555.html

  • 相关阅读:
    多表连接查询
    从0开始独立完成企业级Java电商网站开发(服务端)
    ThreadLocal小试牛刀
    svn版本控制
    策略模式和工厂模式搭配使用
    MyBatis-Plus
    github骚操作
    【测试】 Java如何优雅的生成测试数据
    【随笔】开源之殇
    【Maven】maven 插件开发实战
  • 原文地址:https://www.cnblogs.com/Lanht/p/12615415.html
Copyright © 2020-2023  润新知