summarize

httpServletResponse跟 Request一个是响应一个是请求,获得客户端请求方式 用getMethod 得到的是String类型,

response:属于重定向请求、地址栏URL会发生改变、想服务器发送两次请求 response解决中文乱码:response.setContentType("text/html;charset=utf-8");

request:属于请求转发,成对创建,客户端请求一次,地址栏不改变,真正给资源的是Servlet02 。获取请求转发可以直接写转发的路径,无需写项目目录,因服务器内部行为,这也是与重定向的区别

何时用重定向 何时用请求转发?看需求,如果从servlet01带数据给servlet02 就用请求转发 ,若不带数据用重定向或看地址拦:需要地址栏改变用重定向,不需要改变用请求转发

HttpServletRequest

request代表请求,通过该对象,分别获得HTTP请求的 请求行、请求头、请求体

1.通过request获得请求行

步骤:

获得客户端请求方式:String getMethod()

获取请求资源:

String getRequestURI()返回除去host(域名或者ip)部分的路径

StringBuffer getRequestURL():返回全路径

 String getContextPath():获取web应用名称(项目名)

String getQueryString():获取get提交url地址后的参数字符串  例如:username=zhangsan&password=123

新建个项目 WEB06-在建login.jsp 页面--在建一个Servlet

请求行 代码演示

<%@ 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="/WEB06/LineServlet" method="get"><input type="text" name="username"><br><input type="password" name="pwd"><br><input type="submit" value="提交"></form>
</body>
</html>
------------------------------------
package com.oracle.demo01;
//通过request获得请求行里面的信息
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 {
//        获取请求方式String method=request.getMethod();System.out.println("请求方式为"+method);
//        获取请求 URIString URI=request.getRequestURI();System.out.println("URI为"+URI);
//        获取获取 URLStringBuffer URL=request.getRequestURL();System.out.println("URL为"+URL);
//        获取WEB应用名称String name=request.getContextPath();System.out.println("WEB应用名称为"+name);
//        获取get请求后url后的字符串String query=request.getQueryString();System.out.println("get请求参数为:"+query);
//        获取客户端的IP地址String ip=request.getRemoteAddr();System.out.println("ip地址为: "+ip);}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

以上代码的方法就是请求行里获取的信息

URI和URL的区别

URI:uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。

URL:uniform resource locator,具体的URI,可以用来标识一个资源,指明了如何locate这个资源

总结:URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI是抽象概念,可以是绝对,也可以是相对,而URL则必须提供足够的信息来定位,so,是绝对的

request获得请求头

referer头的作用 做防盗链 代码:

<%@ 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>
<!-- 防盗链 --><a href="/WEB06/RefereServlet">我就是我</a>
</body>
</html>
--------------------------------新建个Servlet让jsp指向这个Servlet
package com.oracle.demo01;
//通过request的 防盗链
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 RefereServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//        获取refere头String refere=request.getHeader("Referer");String content=null;
//        判断refere地址以什么开头  必须加上http://
        if(refere.startsWith("http://localhost:8080")){content="真的离婚了!";}else{content="你是小偷";}
//        解决response的中文乱码response.setContentType("text/html;charset=utf-8");response.getWriter().write(content);}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

请求头的作用就是,可做防盗链,当在网页打开一个链接,为了防止打开的这链接会被盗链,可以给地址设置一个地址的开头:看图得知

当我们点开这个链接时,会进入另一个地址,判断这个刚要打开的地址是以谁开头,用.startsWith后面必须+ http://localhost:8080,如果是它开头则是真的,如果不是,则显示你是小偷

通过request获得请求体

以上面参数为例,通过一下方法获得请求参数

String getParameter(String name)  ---获得单个值

String[] getParameterValues(String name)   -----获得多个值

Enumeration getParameterNames()

代码:

  ------------->通过getparametermap获取所有参数,得到map集合

<%@ 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="/WEB06/BodyServlet" method="post"><input type="text" name="username"><input type="radio" name="sex" value="woman">女<input type="radio" name="sex" value="man">男<br><input type="checkbox" name="hobby" value="pqq">乒乓球<input type="checkbox" name="hobby" value="pq">皮球<input type="checkbox" name="hobby" value="wq">网球<br><input type="submit" value="提交"></form>
</body>
</html>
--------------------------------------------
package com.oracle.demo01;
//request获得请求体的方法获得参数
import java.io.IOException;
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;
import javax.swing.plaf.synth.SynthSeparatorUI;public class BodyServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//        post解决中文乱码        request.setCharacterEncoding("utf-8");//在获取参数前修改就是把整个请求体里的乱码//        获取请求参数//        1.获取单个值的参数  获取单个的值就parameter方法        String name=request.getParameter("username");//name属性名//        get方式解决乱码: 必须每一个带中文的都来一遍   表单提交:正常人不用get//        name=new String(name.getBytes("ISO-8859-1"),"UTF-8");        String sex=request.getParameter("sex");//获得单选框的值        System.out.println(name+"..."+sex);//打印上面俩名字//        2.获取多个值        String[] hobbys=request.getParameterValues("hobby");        System.out.println(hobbys);//打印数组//        3.获取所有请求参数Map        Map<String,String[]> map=request.getParameterMap();//        遍历        Set<String> set=map.keySet();        for(String str:set){            String[] value=map.get(str);            for(String v:value){                System.out.println(str+"..."+v);            }        }    }

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

解决post提交中文乱码:

解决中文乱码:在获取参数之前+一行代码

 request.setCharacterEncoding("utf-8"); 注意:在获取参数以前设置

在最顶上设置中文乱码后,解决整个请求体里所有参数都可接收中文   看加上代码后的效果显示图

解决get提交乱码:parameter = new String(parameter.getbytes("iso8859-1"),"utf-8");

一般人不会用这个 麻烦

pm

request其他功能

1.request 是一个域对象----存储数据的区域对象  Servlet一共三个域对象,功能一样,作用域范围不一样。

方法:

setAttribute(String name, Object o)  存值

getAttribute(String name)    取值

removeAttribute(String name)

注意:request域的作用范围:一次请求中

request 请求转发  原理图:

重定向:特点:1客户端请求两次 2地址栏改变 举例原理:客户端向servlet01借钱,servlet01回复客户端没钱,并告诉客户端Servlet 02有钱,然后servlet又向02发送请求借钱

请求转发:跟重定向功能一样:客户端发送一次请求,地址栏不变。举例原理:客户端向servlet01请求借钱,servlet01没钱,但他又向servlet02借钱给客户端,实际上是servlet02借给客户端,这种行为是服务器内部行为,servlet01请求servlet02,客户端只发送一次

(1)request完成请求转发

获得请求转发器----path是转发的地址

RequestDispatcher  getRequestDispatcher(String path)

通过转发器对象转发

requestDispathcer.forward(ServletRequest request, ServletResponse response)

package com.oracle.demo02;
//request完成请求转发
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 {//        请求转发                                        获得转发器 forward方法        request.getRequestDispatcher("/Servlet02").forward(request, response);//因为是服务器内部行为,无需写/WEB目录,so:是重定向区别

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        doGet(request, response);    }}
------------------------------------
package com.oracle.demo02;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 {
//        从request域中取值 get是取值String name=(String)request.getAttribute("name");
//        解决resonance中文乱码response.setContentType("text/html;charset=utf-8");response.getWriter().write("hello sensen..."+name);}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

做一个注册web页面

创建 Shop动态项目

导入3个包

创建三层包

register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head></head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>会员注册</title>
<link rel="stylesheet" href="css/bootstrap.min.css" type="text/css" />
<script src="js/jquery-1.11.3.min.js" type="text/javascript"></script>
<script src="js/bootstrap.min.js" type="text/javascript"></script>
<!-- 引入自定义css文件 style.css -->
<link rel="stylesheet" href="css/style.css" type="text/css" /><style>
body {margin-top: 20px;margin: 0 auto;
}.carousel-inner .item img {width: 100%;height: 300px;
}font {color: #3164af;font-size: 18px;font-weight: normal;padding: 0 10px;
}
</style>
</head>
<body><!-- 引入header.jsp --><jsp:include page="/header.jsp"></jsp:include><div class="container"style="width: 100%; background: url('image/regist_bg.jpg');"><div class="row"><div class="col-md-2"></div><div class="col-md-8"style="background: #fff; padding: 40px 80px; margin: 30px; border: 7px solid #ccc;"><font>会员注册</font>USER REGISTER<form class="form-horizontal" style="margin-top: 5px;" action="/Shop/RegisterServlet" method="post"><div class="form-group"><label for="username" class="col-sm-2 control-label">用户名</label><div class="col-sm-6"><input type="text" class="form-control" id="username"placeholder="请输入用户名" name="username"></div></div><div class="form-group"><label for="inputPassword3" class="col-sm-2 control-label">密码</label><div class="col-sm-6"><input type="password" class="form-control" id="inputPassword3"placeholder="请输入密码" name="password"></div></div><div class="form-group"><label for="confirmpwd" class="col-sm-2 control-label">确认密码</label><div class="col-sm-6"><input type="password" class="form-control" id="confirmpwd"placeholder="请输入确认密码"></div></div><div class="form-group"><label for="inputEmail3" class="col-sm-2 control-label">Email</label><div class="col-sm-6"><input type="email" class="form-control" id="inputEmail3"placeholder="Email" name="email"></div></div><div class="form-group"><label for="usercaption" class="col-sm-2 control-label">姓名</label><div class="col-sm-6"><input type="text" class="form-control" id="usercaption"placeholder="请输入姓名" name="name"></div></div><div class="form-group opt"><label for="inlineRadio1" class="col-sm-2 control-label">性别</label><div class="col-sm-6"><label class="radio-inline"> <input type="radio" name="sex" id="sex1" value="male">男</label> <label class="radio-inline"> <input type="radio" name="sex" id="sex2" value="female">女</label></div></div><div class="form-group"><label for="date" class="col-sm-2 control-label">出生日期</label><div class="col-sm-6"><input type="date" class="form-control" name="birthday"></div></div><div class="form-group"><label for="date" class="col-sm-2 control-label">验证码</label><div class="col-sm-3"><input type="text" class="form-control" name="checkCode"></div><div class="col-sm-2"><img src="./image/captcha.jhtml" /></div></div><div class="form-group"><div class="col-sm-offset-2 col-sm-10"><input type="submit" width="100" value="注册" name="submit"style="background: url('./images/register.gif') no-repeat scroll 0 0 rgba(0, 0, 0, 0); height: 35px; width: 100px; color: white;"></div></div></form></div><div class="col-md-2"></div></div></div><!-- 引入footer.jsp --><jsp:include page="/footer.jsp"></jsp:include></body>
</html>

 RegisterServlet

package com.oracle.web;
RegisterServlet
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
import java.util.UUID;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.beanutils.BeanUtils;import com.oracle.domain.Users;
import com.oracle.service.UserService;public class RegisterServlet extends HttpServlet {private UserService userService=new UserService();public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//        解决request的中文乱码 request.setCharacterEncoding("UTF-8");
//        获取所有请求参数的map集合Map<String,String[]> map=request.getParameterMap();
//        创建Users对象Users users=new Users();
//        用BeanUtiles中的方法将map集合中的参数封装到Users对象中
//        原理:根据map中的key跟user对象中的属性名一一映射try {BeanUtils.populate(users,map);} catch (IllegalAccessException e) {// TODO Auto-generated catch block
            e.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch block
            e.printStackTrace();}
//        封装uid 唯一一个随机产生36位不重复字符串
        users.setUid(UUID.randomUUID().toString());
//        调用Service方法
        userService.register(users);
//        认为注册成功,重定向登录页面response.sendRedirect(request.getContextPath()+"/login.jsp");}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

JDBCUtils

package com.oracle.tools;import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;//JDBC工具类
public class JDBCUtils {//获取连接对象的方法public static Connection getConn(){Connection conn=null;    Properties pro=new Properties();try {//1.注册驱动Class.forName("com.mysql.jdbc.Driver");//2.获取链接对象String url="jdbc:mysql://localhost:3306/store_v1.0?useUnicode=true&characterEncoding=UTF-8";//0603后面插这句=红娘String user="root";String password="123456";conn=DriverManager.getConnection(url,user,password);} catch (ClassNotFoundException | SQLException e) {            e.printStackTrace();}return conn;            }//释放资源1public static void close(Connection conn,Statement sta){if(sta!=null){try {sta.close();} catch (SQLException e) {// TODO Auto-generated catch block
                e.printStackTrace();}}if(conn!=null){try {conn.close();} catch (SQLException e) {// TODO Auto-generated catch block
                e.printStackTrace();}}        }//释放资源2public static void close(Connection conn,Statement sta,ResultSet rs){if(rs!=null){try {rs.close();} catch (SQLException e) {e.printStackTrace();}}if(sta!=null){try {sta.close();} catch (SQLException e) {e.printStackTrace();}}if(conn!=null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}
}

Users

package com.oracle.domain;public class Users {private String uid;private String username;private String password;private String name;private String email;private String telephone;private String birthday;private String sex;private int state;private String code;public String getUid() {return uid;}public void setUid(String uid) {this.uid = uid;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getTelephone() {return telephone;}public void setTelephone(String telephone) {this.telephone = telephone;}public String getBirthday() {return birthday;}public void setBirthday(String birthday) {this.birthday = birthday;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getState() {return state;}public void setState(int state) {this.state = state;}public String getCode() {return code;}public void setCode(String code) {this.code = code;}@Overridepublic String toString() {return "Users [uid=" + uid + ", username=" + username + ", password=" + password + ", name=" + name + ", email="+ email + ", telephone=" + telephone + ", birthday=" + birthday + ", sex=" + sex + ", state=" + state+ ", code=" + code + "]";}}

创建 UsersDao

package com.oracle.dao;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;import com.oracle.domain.Users;
import com.oracle.tools.JDBCUtils;public class UsersDao {
//    登录  需要导包public void register(Users users) throws SQLException{//        获得连接对象Connection conn=JDBCUtils.getConn();
//        获得sql语句
//        String sql="insert into users(uid,username,password,email,name,sex,birthday) values(?,?,?,?,?,?,?)";String sql="insert into users(uid,username,"+ "password,email,name,sex,birthday) "+ "values(?,?,?,?,?,?,?)";PreparedStatement pst=conn.prepareStatement(sql);pst.setString(1,users.getUid());pst.setString(2,users.getUsername());pst.setString(3,users.getPassword());pst.setString(4,users.getEmail());pst.setString(5,users.getName());pst.setString(6,users.getSex());pst.setString(7,users.getBirthday());
//        执行sql
        pst.executeUpdate();
//        释放资源
        JDBCUtils.close(conn,pst);}
}

创建 UserService

package com.oracle.service;import java.sql.SQLException;import com.oracle.dao.UsersDao;
import com.oracle.domain.Users;public class UserService {private UsersDao usersDao=new UsersDao();
//    注册public void register(Users users){try {usersDao.register(users);} catch (SQLException e) {// TODO Auto-generated catch block
            e.printStackTrace();}}
//    登录public int login(String username,String password){
//        处理异常int count=0;try {count=usersDao.login(username, password);} catch (SQLException e) {// TODO Auto-generated catch block
            e.printStackTrace();}return count;}
}

转载于:https://www.cnblogs.com/zs0322/p/11125656.html

HttpServletrequest 注册和登录、request域对象、web动态shop相关推荐

  1. 转发和重定向和request域对象

    利用请求域传递对象(request域对象) 重定向和转发的区别(转发)(*****)* 域对象ServletContext:服务器一启动,为每个web应用创建一个ServletContext对象,所有 ...

  2. SpringMVC学习总结(四)使用ModelAndView、Model、Map、ModelMap向request域对象共享数据/向session、application域对象共享数据

    我们知道,四大域对象包括:pageContext.request.session和application,而pageContext有效范围为一个jsp页面,太小了,而application有效范围为整 ...

  3. request域对象和请求转发

    request的其他功能 request是一个域对象 request对象也是一个存储数据的区域对象,所以也具有如下方法: setAttribute(String name, Object o) get ...

  4. Java-Web JSP、Cookie和Session域对象

    一.JSP入门 1.什么是JSP JSP(Java Server Pages)是JavaWeb服务器端的动态资源.它与html页面的作用是相同的,显示数据和获取数据. 2.JSP的组成 JSP = h ...

  5. SpringMVC视图及如何在域对象中共享数据

    SpringMVC 回顾原生Servlet 获取请求参数 通过 Servlet API 获取 案例 通过控制器方法的形参获取请求参数 设置字符编码格式 CharacterEncodingFilter ...

  6. Servlet的学习之Request请求对象(3)

    本篇接上一篇,将Servlet中的HttpServletRequest对象获取RequestDispatcher对象后能进行的[转发]forward功能和[包含]include功能介绍完. 首先来看R ...

  7. javaweb:request请求对象(5)

    1.请求和响应的概述: 什么请求:在浏览器地址栏输入地址,点击回车请求服务器,这个过程就是一个请求过程. 什么响应:服务器根据浏览器发送的请求,返回数据到浏览器在网页上进行显示,这个过程就称之为响应. ...

  8. SpringMVC使用域对象共享数据

    文章目录 四.SpringMVC使用域对象共享数据 4.1 使用ServletAPI向request域对象共享数据 4.2 使用ModelAndView向request域对象共享数据(官方推荐使用这个 ...

  9. java request获取域,Java Web - Servlet(13)HttpServletRequest详解(获取请求数据、请求分派、请求域)(二)...

    Java Web -- Servlet(13)HttpServletRequest详解(获取请求数据.请求分派.请求域)(2) HttpServletRequest ----------------- ...

最新文章

  1. 教你轻松将springboot打包成exe程序
  2. 次小生成树(Prim + Kruaskal)
  3. electron-vue模仿网易云桌面应用体验
  4. 常用API-2(字符串与数组)
  5. android滚动条布局横向,Android自定义ViewGroup实现可滚动的横向布局(2)
  6. 常用正则表达式(?i)忽略字母的大小写!
  7. Apollo进阶课程㉟丨Apollo ROS原理—4
  8. javascript Array类型 方法大全
  9. linux下获取微秒级精度的时间【转】
  10. python机器学习应用mooc_(1)KNN
  11. 抓取scrapy中文文档 第一个Scrapy项目实现
  12. 计算机用户没有管理员权限,电脑没有管理员权限怎么办
  13. openwrt utc时区修改
  14. 课堂作业:首尾相连求最大子数组
  15. 华三防火墙安全策略配置
  16. Webpack5快速入门 (二) CSS相关loader的使用及兼容性处理 手把手带你打开前端工程化的大门
  17. Qt源码解析之QThread
  18. 中国平安增持华夏幸福5.69%股权
  19. 纠正你读错的电脑英文词汇--(1)
  20. 计算机怎样看配置高低,笔记本电脑配置怎么看 查询配置参数高低教程

热门文章

  1. 嵌入式系统(四):STM32微控制器及最小系统(1)
  2. 激活虚拟环境从source activate变成conda activate
  3. 回忆那些楼市成交的黄金岁月(全)
  4. C# 线程手册 第三章 使用线程 实现一个数据库连接池(实战篇)
  5. Virtualbox共享文件夹链接
  6. 0基础C语言入门路线汇总
  7. printf()终极详解
  8. 免费天气预报的WebService服务接口
  9. 均热板 热管_代替热管好产物 均热板散热技术解析
  10. 如何分辨一个程序员是不是水货?