Request对象
程序员文章站
2022-06-11 15:46:52
...
文章目录
Request对象
Request对象概述
Request对象获取客户端的请求数据, 接口ServletRequest,子接口HttpServletRequest继承ServletRequest.
HttpServletRequest接口的实现类是Tomcat引擎提供.
Request对象获取请求行
- String getMethod() 获取提交的方式 (GET,POST)
- String getRequestURI() 获取请求的参数,请求服务器路径
- StringBuffer getRequestURL() 获取请求的参数,请求服务器路径
- String getQueryString()获取请求行 问号后面的参数 (GET)
- String getContextPath() 获取WEB应用名称
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//request对象方法 getMethod()获取客户端的请求方式
String method = request.getMethod();
System.out.println(method);
//方法 String getRequestURI() 获取请求服务器路径
//方法 StringBuffer getRequestURL() 获取请求服务器路径
String URI = request.getRequestURI();
StringBuffer URL = request.getRequestURL();
System.out.println("URI=="+URI);// /WEB04/line
System.out.println("URL=="+URL);// http://localhost:8080/WEB04/line
//方法 String getQueryString()获取请求行,?后面的所有参数
String query = request.getQueryString();
System.out.println(query);//username=kjhgf&pass=32erg&hobby=on&hobby=on
//获取WEB应用名称 String getContextPath()
String path = request.getContextPath();
System.out.println(path);// /WEB04
//response.sendRedirect(request.getContextPath()+"/ddd");
}
Request对象获取请求头
请求头数据格式键值对, k:v
指导性信息,指导服务器
- String getHeader(String key)返回对应键的值
- Enumeration getHeaderNames()
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
* request获取请求头
*/
//方法 String getHeader(String key)
String key = request.getHeader("Referer");
System.out.println(key);
/*
* Enumeration getHeaderNames() 获取所有的请求头的键
* 返回值Enumeration接口 (向量枚举)
* 集合:1.0-1.1 Enumeration 集合1.2 迭代器
* Iterator迭代器接口: hasNext() next()
* Enumeration接口: hasMoreElement() nextElement()
*/
Enumeration<String> enums = request.getHeaderNames();
while (enums.hasMoreElements()){
key = enums.nextElement();
String value = request.getHeader(key);
System.out.println(key+"=="+value);
}
}
Request获取请求参数
- String getParameter(“表单中的name值”)获取指定的请求参数
- String[] getParameterValues(“表单中的name值”)获取参数中的一键多值
- Map<String,String[]> getParameterMap()获取提交的所有参数
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
* request 获取客户端提交数据
*/
//方法getParameter(String key)指定表单中的参数
String username = request.getParameter("username");
String password = request.getParameter("pass");
System.out.println(username+"=="+password);
//方法getParameterValues()获取一键多值 checkbox radio
String[] hobby = request.getParameterValues("hobby");
System.out.println(Arrays.toString(hobby));
System.out.println("=============");
//方法 getParameterMap()获取提交的所有参数
Map<String,String[]> map = request.getParameterMap();
for (String key : map.keySet()){
String[] value = map.get(key);
System.out.println(key+"="+Arrays.toString(value));
}
}
Request域对象
作用域: Request域对象的作用域比较小,范围是一次请求有效
再一次请求无效
- 域对象存储数据: setArratibute(String key, Object value)
- 取出域对象数据: Object getAttribute(String key)
- 移除域对象数据: removeAttribute(String key)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//向域对象 ,request 存储数据
request.setAttribute("heima","java");
//取出域对象数据
Object value = request.getAttribute("heima");
System.out.println("servlet1="+value);
}
转发
转发的实现步骤
- request对象方法获取转发器 RequestDispatcher getRequestDispatcher(“转发地址”)返回值就是转发器
- 使用转发器对象的方法 forward
//获取转发器对象,传递转发的路径
RequestDispatcher dispatcher = request.getRequestDispatcher("/servlet2");
//转发器方法
dispatcher.forward(request,response);
转发和重定向区别
用户注册功能
开发步骤
- 创建数据库数据表
- 创建新Module
- 复制页面
- 创建包
- 添加需要jar
- 配置文件
- 功能,编写服务器程序
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
* 获取客户端提交的数据 Map
* 数据封装到JavaBean对象中 (User)
* 调用业务层的方法,传递User
* 页面重定向到登录页面
*/
request.setCharacterEncoding("utf-8");
//获取客户端提交的数据 Map
Map<String,String[]> map = request.getParameterMap();
//集合中数据封装到User中
User user = new User();
//apache 开发工具类,简化JavaBean开发
//BeanUtils类,静态方法 populate(JavaBean,map集合)
try {
BeanUtils.populate(user, map);
}catch (Exception ex){ex.printStackTrace();}
//调用业务层方法,传递JavaBean,完成注册
UserService service = new UserService();
service.register(user);
//注册完成,页面到达登录页面,cdx
response.sendRedirect( request.getContextPath()+"/login.jsp" );
}
/**
* 注册方法
* 接收web层传递JavaBean对象
* 将JavaBean传递dao层
*/
public void register(User user){
UserDao dao = new UserDao();
try {
dao.register(user);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 注册方法
* 接收service传递JavaBean
* 取出JavaBean数据,写入数据表
*/
public void register(User user) throws SQLException {
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
//拼写添加数据SQL语句
String sql = "insert into user values(?,?,?,?,?,?,?)";
//创建数组,存储User对象的数据
Object[] params = {null,user.getUsername(),user.getPassword(),user.getEmail(),
user.getName(),user.getGender(),user.getBirthday()};
//执行SQL
qr.update(sql,params);
}
用户登录
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
* 实现登录Servlet
* 接收客户端提交用户名密码
* 提交参数传递业务层
* 接收业务层返回结果 (boolean)
* 判断结果: true 登录成功
* 页面重定向到首页
*
* 判断结果: false 登录失败
* 错误数据存储到request域中
* 转发回原有的登录页面
*/
String username = request.getParameter("username");
String password = request.getParameter("password");
//调用业务层方法,获取返回值,传递用户名密码
UserService service = new UserService();
boolean flag = service.login(username, password);
//判断flag值,是true,登录成功,重定向首页
if(flag){
response.sendRedirect( request.getContextPath() );
}else{
//flag值是false,登录失败,错误信息存储到request域
request.setAttribute("msg","用户名或密码错误");
//转发回登录页面
request.getRequestDispatcher("/login.jsp").forward(request,response);
}
}
/**
* 登录方法
* 接收Web层传递用户名和密码
* 参数传递dao层(数据验证)
* 获取dao返回值,User
* 结果,返回web层boolean
*/
public boolean login(String username,String password){
UserDao dao = new UserDao();
User user = null;
try {
user = dao.login(username,password);
} catch (SQLException e) {
e.printStackTrace();
}
//判断user对象,是null,登录失败返回false
if(user==null)
return false;
return true;
}
/**
* 登录方法
* 接收service层传递用户名和密码
* 查询数据表,获取结果集
* 结果集封装User对象,返回业务层
*/
public User login(String username,String password) throws SQLException {
QueryRunner qr = new QueryRunner(C3P0Utils.getDataSource());
//拼写登录查询语句
String sql = "select * from user where username=? and password=?";
User user = qr.query(sql,new BeanHandler<User>(User.class),username,password);
return user;
}
login.jsp
<div style="color: red">
<!--
显示服务器中存储数据
数据存储到request域中
写Java代码
标记: < % 任意Java代码 %>
需要,在页面中显示数据
域取出数据,没有数据,显示null
-->
<%= request.getAttribute("msg")==null?"":request.getAttribute("msg") %>
</div>