一、servletContext对象和request对象的比较
ServletContext
- 何时创建:服务器启动
- 何时销毁:服务器关闭
- 域的作用范围:整个web应用
request
- 何时创建:访问时创建request对象
- 何时销毁:响应结束,request对象销毁
- 域的作用范围:一次请求中
二、转发与重定向的区别
- 重定向是两次请求,转发是一次请求(在内部转发的)
- 重定向地址栏地址会变化,转发地址栏地址不变
- 重定向可以访问外部网站资源,转发只能访问内部资源
- 转发的性能要优于重定向
三、客户端地址与服务器端地址的写法
- 客户端地址
- 是客户端去访问服务器端的地址,服务器外部的地址。
- 特点:写上web应用名称
- 服务器端地址
- 服务器内部资源的跳转地址
- 特点:不需要写web应用名称
四、注册功能的实现
- 获取表单数据
- 将数据存储到数据库(中文乱码的解决)
- BeanUtils的使用:将map中的数据映射到实体中,将map的key与实体的属性进行对比。
使用BeanUtils进行自动映射,导入commons-beanutils-1.9.3.jar和依赖包commons-logging-1.2.jar、commons-collections-3.2.2.jar
BeanUtils工作原理:将map中的数据,根据key与实体属性的对应关系封装,只要key的名字与实体的属性名字一样,就自动封装到实体中。
平常我们需要这样写:
1String username = request.getParameter("username"); 2String password = request.getParameter("password"); 3 4User user = new User(); 5user.setUsername(username); 6user.setPassword(password); 7......
但是这样写,如果有一百个参数我们就要写一百遍这样的代码。于是BeanUtils诞生了
1Map<String, String[]> properties = request.getParameterMap(); 2 3// 2将散装的数据封装到JavaBean 4User user = new User(); 5 6try { 7 BeanUtils.populate(user, properties); 8} catch (IllegalAccessException | InvocationTargetException e1) { 9 e1.printStackTrace(); 10} 11// 现在这个位置user对象已经封装好了 12 13// 手动封装uid--uuid--随机不重复的字符串32位的--Java代码生成后是36位的 14user.setUid(UUID.randomUUID().toString()); 15 16// 3将参数传递给业务操作方法,将JavaBean中的数据存到数据库 17register(user);
UUID工具类
import java.util.UUID;
随机不重复的字符串32位的--Java代码生成后是36位的
request注册存数据库中文的乱码解决
1 // 设置request的编码--只适合post提交方式 2 request.setCharacterEncoding("UTF-8"); 3 4 // get提交方式的乱码解决 5 // 先使用iso8859-1编码,再使用utf-8解码 6 String username = request.getParameter("username"); 7 username = new String(username.getBytes("iso8859-1"), "UTF-8"); 8 9 // 这种方式也适用于post提交 10 // 但是这种方式一旦数据很多就不方便,所以get方式不适合表单提交,一般用 request.setCharacterEncoding("UTF-8");就可以了
完成注册成功的跳转回显
response.sendRedirect(request.getContextPath()+"/login.jsp");
五、request总结
-
request获得请求行的内容
1request.getMethod() 2request.getRequestURI(); 3request.getContextPath();//获得应用的名称 4request.getRemoteAddr(); -
request 获得头的内容
request.getHeader(String name); -
request 获得请求体的内容(请求参数)
1String request.getParameter(String name); 2Map<String, String[]> request.getParameterMap(); 3String[] request.getParameterValues(String name);
注意:客户端发送的参数到服务器端都是字符串。
获得中文乱码的解决
- post提交:request.setCharacterEncoding("UTF-8");
- get提交:parameter = new String(parameter.getBytes("iso8859-1"),"UTF-8")
requeset转发和域
request.getRequestDispather("转发的地址,在服务器内部,不用些应用的名称").forward(request,response);- 转发时可以向request域中存一些数据,例如错误信息,使用方法:
request.setAttribute(String name, Object value);取时用方法:request.getAttribute(name);