Servlet5 - request

2017-04-08  本文已影响19人  老茂在北京

HttpServletRequest对象代表客户端的请求


HTTP协议之请求 继承关系

通过Request对象进行的常用操作

获取客户机信息
获取客户机信息

获取请求头信息

获取请求头信息
/**
 * 获取客户机的内容 和请求头内容
 * @author limaoquan
 *
 */
public class RequestServlet1 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //获取IP
        String ip = request.getRemoteAddr();
        String method = request.getMethod();
        String path = request.getContextPath();
        
        System.out.println("IP地址" + ip);
        System.out.println("虚拟路径是 "+ path);
        System.out.println("请求方式"+ method);
        
        //获取请求头
        String referer=request.getHeader("referer");//网页来源(防盗链)
        String agent = request.getHeader("user-agent");//判断浏览器(文件下载)
        //遍历所有请求头
        Enumeration<String> names = request.getHeaderNames();
        while(names.hasMoreElements()){
            String name = names.nextElement();
            System.out.println(name + ":" + request.getHeader(name));
        }
        System.out.println("------------");
        System.out.println("您使用浏览器:"+ request.getHeader("user-agent"));
        
        //判断referer是否存在和有效
        if(referer!=null&&referer.startsWith("http://localhost/day")){
            //不属于盗链
            response.setContentType("text/html;charset=utf-8");
            response.getWriter().println("机密信息");
        }else{
            //盗链
            response.setContentType("text/html;charset=utf-8");
            response.getWriter().println("您的请求盗链");
        }
    }

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

获取请求参数(重要)

获取请求参数
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

<form action="/day10/reg" method="post">
        <table border="1" width="50%">
            <tr>
                <td>输入姓名</td>
                <td><input type="text" name="username"></td>
            </tr>
            <tr>
                <td>输入密码</td>
                <td><input type="password" name="password"></td>
            </tr>
            <tr>
                <td>选择性别</td>
                <td>
                    <input type="radio" name="sex" value="man"/>男
                    <input type="radio" name="sex" value="woman"/>女
                </td>
            </tr>
            <tr>
                <td>选择爱好</td>
                <td>
                    <input type="checkbox" name="love" value="lq"/>篮球
                    <input type="checkbox" name="love" value="zq"/>足球
                    <input type="checkbox" name="love" value="pq"/>排球
                </td>
            </tr>
            <tr>
                <td>选择城市</td>
                <td>
                    <select name="city">
                        <option value="none">--请选择--</option>
                        <option value="bj">北京</option>
                        <option value="sh">上海</option>
                        <option value="sz">深圳</option>
                    </select>
                </td>
            </tr>
            <tr>        
                <td colspan="2"><input type="submit" value="提交"></td>
            </tr>
        </table>
    </form>

</body>
</html>
html界面
public class RegServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        /**
         * request获取中文的乱码
         *  post请求
         *      setCharacterEncoding(String env) 设置request缓冲区编码
         *  
         *  get请求
         *      
         */
        //设置request缓冲区编码
        request.setCharacterEncoding("UTF-8");
        //获取内容,做其他操作
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String sex = request.getParameter("sex");
        
        //获取爱好,有过个值
        String[] loves = request.getParameterValues("love");
        String city = request.getParameter("city");
        
        System.out.println("用户名:" + username);
        System.out.println("密码:" + password);
        System.out.println("性别:" + sex);
        System.out.println("爱好:" + Arrays.toString(loves));
        System.out.println("城市:" + city);
        System.out.println("==========================");
        //获取map集合
        Map<String,String[]> map = request.getParameterMap();
        //循环遍历
        Set<String> keys = map.keySet();
        for(String key:keys){
            String[] values = map.get(key);
            System.out.println(Arrays.toString(values));
        }
        
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}
乱码问题解决

重定向和转发

域对象 ServletContext 与 request 的区别:

两者方法相似:

public class RequestServlet2 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //request域设置内容
        request.setAttribute("name", "Mango");
        
        //转发(路径服务器端的绝对路径) 转发可以共享request域
        request.getRequestDispatcher("/request3").forward(request, response);
        
        //完成重定向(客户端路径) 重定向无法共享request域
        //response.sendRedirect("/day10/request3");
                
    }

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




public class RequestServlet3 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //获取
        String value = (String)request.getAttribute("name");
        
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().write("访问到 了 3 " + value);
    }

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

}
转发和重定向的区别

转发

  RequestDispatcher rd = request.getRequestDispatcher("/request3");
  rd.forward(request, response);
上一篇下一篇

猜你喜欢

热点阅读