zoukankan      html  css  js  c++  java
  • Java的HttpServletRequest

    1、HttpServletRequest
    (1)获得请求行:
    method:getMethod();POST/GET;
    URI:getRequestURI();可以是网址可以是相对地址也可以是绝对地址;
    URL:getRequestURL();只能是网址;
    重要:WEB应用名称:getContextPath();应用于重定向;
    url后面的字符串:只适用于get方式;post方式没有;getQueryString();
    IP:可以获取IPv4或者是IPv6;getRemoteAddr();

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!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>login.jsp</title>
    </head>
    <body>
            <form action="/WEB04/LineServlet" method="post">
                    用户名:<input type="text"  name = "username"><br>
                    密码:<input type="password" name = "password"><br>
                    <input type="submit"  value="提交">
            </form>
            <a href = "/WEB04/ReferServlet">鼓励企业家</a>
    </body>
    </html>
    package com.oracle.web;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class LineServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
            //获取请求方式
            String  method = request.getMethod();
            //获取请求资源
            String  URI = request.getRequestURI();
            StringBuffer URL = request.getRequestURL();
            //获取WEB应用名称
            String webname = request.getContextPath();
            //获取url后面的字符串(get方式)
            String str = request.getQueryString();
            //获取客户端的请求ip
            String IP = request.getRemoteAddr();
            System.out.println("请求方式"+method);
            System.out.println("URI"+URI);
            System.out.println("URL"+URL);
            System.out.println("WEB名称"+webname);
            System.out.println("url后面的字符串"+str);
            System.out.println("请求IP"+IP);
            response.getWriter().write("hello world!");
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }

     


    (2)获得请求头:
    重要:getHeader("referer");用于做防盗链

    package com.oracle.web;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class ReferServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
            //获取请求头中的referer
            String referer = request.getHeader("referer");
            if(referer !=null&&referer.startsWith("http://localhost")){
                response.getWriter().write("hello world!");
            }else{
                response.getWriter().write("你好世界");
            }
        }
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }

     但是:

    (3)获得请求体:
    获得单个参数:getParameter("name");
    获得多个参数:Map<String,String[]> getParameterMap();键值对

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!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>
            <form action="/WEB04/BodyServlet" method="get">
                  用户名:<input type="text"  name="username"><br>
                  密码:<input type="password" name="passworwd"><br>
                  爱好:
                  <input type="checkbox" name="hobby" value="zq">足球
                  <input type="checkbox" name="hobby" value="ppq">乒乓球
                  <input type="checkbox" name="hobby" value="lq">篮球
                  <input type="checkbox" name="hobby" value="ymq">羽毛球
                  <br>
                  <input type="submit" value="提交">
            </form>
    </body>
    </html>
    package com.oracle.web;
    
    import java.io.IOException;
    import java.util.Map;
    import java.util.Map.Entry;
    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 BodyServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //get方式解决中文乱码
            String username = request.getParameter("username");
            String  password = request.getParameter("password");
            System.out.println(username+"..."+password);
            //获取表单所有元素的值
            //hobby,{zq,ppq,lq,ymq}
            Map<String,String[]> map = request.getParameterMap();
            response.setContentType("text/html;charset=UTF-8");
            response.getWriter().write("hello world!");
            /*Set<String> set = map.keySet();//hobby只有一个hobby
            //增强for(变量类型:容器标识)
            for (String s : set) {
                    String key = s;
                    String[]  value = map.get(key);
                    for(String s1:value){
                        System.out.println(s+".."+s1);
                    }
            }*/
            Set<Entry<String, String[]>> set = map.entrySet();
            for(Entry<String, String[]> s:set){
                for(String str:s.getValue()){
                    System.out.println(s.getKey()+"..."+str);
                }
            }
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }


    (4)中文乱码:
    解决post提交方式的乱码:request.setCharacterEncoding("UTF-8");
    解决get,post提交的方式的乱码:只能作用一个,用一个写一个;
    parameter = new String(parameter.getbytes("iso8859-1"),"utf-8");


    (5)request是一个域对象,作用范围:

    一次请求中;访问时创建,响应结束时request销毁;
    (6)请求转发:
    getRequestDispatcher("/Servlet01")不用写项目名字;
    requestDispathcer.forward(ServletRequest request, ServletResponse response);

    package com.oracle.web01;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class Servlet01 extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
            request.setAttribute("name", "西红猫");
            //请求转发
            request.getRequestDispatcher("/Servlet02").forward(request, response);
            response.getWriter().write("你好世界!");
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }
    package com.oracle.web01;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class Servlet02 extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String  name = (String)request.getAttribute("name");
            response.setContentType("text/html;charset=UTF-8");
            response.getWriter().write("hello world!"+name);
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }

    当改变时:

    package com.oracle.web01;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class Servlet01 extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
            request.setAttribute("name", "西红猫");
            //请求转发
            /*request.getRequestDispatcher("/Servlet02").forward(request, response);*/
            response.getWriter().write("你好世界!");
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    }

    (7)重定向和请求转发区别:
    重定向两次请求,转发一次请求;
    重定向地址栏地址变化,转发地址不变;
    重定向可以访问外部网站,转发只能访问内部资源
    转发的性能要优于重定向;

  • 相关阅读:
    爬虫杂七杂八
    pycharm使用技巧
    python杂七杂八
    mysql杂七杂八
    mysql常见函数总结:
    CF1030F Putting Boxes Together
    AT2688 [ARC080C] Young Maids
    P5280 [ZJOI2019]线段树
    雨的味道
    P2572 [SCOI2010]序列操作
  • 原文地址:https://www.cnblogs.com/scw123/p/9945724.html
Copyright © 2011-2022 走看看