声明
文章大部分内容转载自公众号(Java3y),如需转载请关注Java3y公众号联系作者 ;本文已经获得转载声明

 httpServletRequest对象代表客户端请求,当客户端通过http协议访问服务器时,http请求头中的所有信息都封装在这个对象中,请求对象会随着请求的结束而结束,资源会被回收

获得浏览器信息

getRequestURL方法返回客户端发出请求时的完整URL。
getRemoteAddr方法返回发出请求的客户机的IP地址
getParameter方法、getParameterValues(String name)方法获取请求参数
...

防盗链--Referer

 指定资源的入口网站

//获取到网页是从哪里来的
String referer = request.getHeader("Referer");
//如果不是从我的首页来或者从地址栏直接访问的,
if ( referer == null || !referer.contains("localhost:8080/zhongfucheng/index.jsp") ) {
//回到首页去
    response.sendRedirect("/zhongfucheng/index.jsp");
    return;
}
//能执行下面的语句,说明是从我的首页点击进来的,那没问题,照常显示
    response.setContentType("text/html;charset=UTF-8");
    response.getWriter().write("需要访问的资源");

表单提交数据

<form action="/zhongfucheng/Servlet111" method="post">
    <table>
        <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="gender" value="男">男
                <input type="radio" name="gender" value="女">女
            </td>
        </tr>
        <tr>
            <td>爱好</td>
            <td>
                <input type="checkbox" name="hobbies" value="游泳">游泳
                <input type="checkbox" name="hobbies" value="跑步">跑步
                <input type="checkbox" name="hobbies" value="飞翔">飞翔
            </td>
        </tr>
        <input type="hidden" name="aaa" value="my name is zhongfucheng">
        <tr>
            <td>你的来自于哪里</td>
            <td>
                <select name="address">
                    <option value="广州">广州</option>
                    <option value="深圳">深圳</option>
                    <option value="北京">北京</option>
                </select>
            </td>
        </tr>
        <tr>
            <td>详细说明:</td>
            <td>
                <textarea cols="30" rows="2" name="textarea"></textarea>
            </td>
        </tr>
        <tr>
            <td><input type="submit" value="提交"></td>
            <td><input type="reset" value="重置"></td>
        </tr>
    </table>
</form>

 在Servlet111中获取提交的数据

//设置request字符编码的格式,设置Tomcat以utf-8编码处理数据
request.setCharacterEncoding("UTF-8");
//通过html的name属性,获取到值
String username = request.getParameter("username");
String password = request.getParameter("password");
String gender = request.getParameter("gender");
//复选框和下拉框有多个值,获取到多个值
String[] hobbies = request.getParameterValues("hobbies");
String[] address = request.getParameterValues("address");
//获取到文本域的值
String description = request.getParameter("textarea");
//得到隐藏域的值
String hiddenValue = request.getParameter("aaa");

 get方式提交数据:超链接、sendRedirect()重定向

sendRedirect("servlet的地址?参数名="+参数值 &"参数名="+参数值);
<a href="/zhongfucheng/Servlet111?username=xxx">使用超链接将数据带给浏览器</a>

Get/Post请求

Post参数传递

 点击提交按钮的时候,数据封装进了Form Data中,http请求中把实体主体带过去了【传输的数据称之为实体主体】,request对象封装了http请求,所以request对象可以解析到发送过来的数据

request.setCharacterEncoding("UTF-8");

Get参数传递

 数据是从消息行带过去的,没有封装到request对象里面

//username是使用get方法提交的
//得到的数据是Tomcat使用的编码iso8859-1 编码后的字符串
String name = request.getParameter("username");
//得到原始二进制数据
byte[] b = name.getBytes("ISO8859-1");
//通过原始的数据,设置正确的码表
String value = new String(b,"UTF-8");

转发

 获取requestDispatcher对象跳转到指定页面

//传参
request.setAttribute("username","tom");
//跳转到index.jsp页面
RequestDispatcher requestDispatcher = 
request.getRequestDispatcher("/index.jsp");
//实用requestDispatcher的forward方法传入request、response实现转发
requestDispatcher.forward(request,response);
//index.jsp显示参数内容
String username = (String)request.getAttribute("username");
response.getWriter().write(username);

转发和重定向的区别

  • 转发发生在服务器
    • 转发后,浏览器的地址栏没有发生变化,转发对浏览器透明的,浏览器不知道该跳转动作.只发送一次http请求,response和request对象都是同一个
  • 重定向发生在浏览器
    • 地址栏会发生变化,重定向发出了两个http请求,request对象不是同一个
  • 跳转时间
    • 转发时:执行到跳转语句时就会立刻跳转
    • 重定向:整个页面执行完之后才执行跳转
  • 传递数据类型不同
    • 转发的request对象可以传递各种类型的数据,包括对象
    • 重定向只能传递字符串