JavaEE基础学习(三)
一.从表单中获取数据
1.获取表单请求过来的参数 getParameter()
传入的参数就是表单中的 name标签
String username = request.getParameter("username");
String password = request.getParameter("password");
2 . 获取参数的所有name getParameterNames()
Enumeration<String> names = request.getParameterNames();
while (names.hasMoreElements()) {
String string = names.nextElement();
System.out.println(string);
}
3 .获取参数的所有集合 getParameterMap()
Map<String, String[]> map = request.getParameterMap();
for (String key : map.keySet()) {
String[] values = map.get(key);
for (String value : values) {
System.out.println(key + "=" + value);
}
}
4 .将获取的参数封装成一个对象
String username = request.getParameter("username");
String password = request.getParameter("password");
String sex = request.getParameter("sex");
// 获取多个值
String[] hobby = request.getParameterValues("hobby");
String city = request.getParameter("city");
// 放入对象中
User user = new User(username, password, sex, hobby, city);
System.out.println(user);
5 . 利用BeanUtils 直接将请求的参数封装成一个对象
User user = new User();
try {
BeanUtils.populate(user, request.getParameterMap());
System.out.println(user);
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
注意:
1.使用的实体类对象必须符合Javabean规范
2.实体类成员变量 要跟获取的参数一样 成员变量名 和 name 标签名要相同
二.Request域对象
作用范围:只在一次请求中有效
先创建demo04方便测试
public class Demo04 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
// 响应回浏览器
response.getWriter().write("456");
// 取出request域中的值
Object attribute = request.getAttribute("wanghong");
System.out.println(attribute);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
1.测试域对象的使用范围
请求转发(一次请求)
// 在request域中保存值
request.setAttribute("wanghong", "男");
// 直接使用request对象 进行请求转发
// 获取请求转发器
RequestDispatcher dispatcher = request.getRequestDispatcher("/demo04");
dispatcher.forward(request, response);
注意:最终响应回浏览器的内容是 转发到的页面的响应
测试请求重定向(两次请求 超出了Request的范围)
response.sendRedirect("/sh-web-03/demo04");
请求包含(一次请求,并且两个页面的响应都会返回给浏览器)
// 获取字符流
PrintWriter writer = response.getWriter();
request.setAttribute("wanghong", "男");
RequestDispatcher dispatcher = request.getRequestDispatcher("/demo04");
// 包含方法
dispatcher.include(request, response);
// 响应回浏览器
writer.write("123");
System.out.println("我是Demo03");
三.会话技术
-
指的是客户端(用户/浏览器)和服务端(servlet)进行的交互
-
一次会话 当关闭浏览器时 这次会话才会结束
-
1.客户端技术(浏览器实现)Cookie
-
2.服务端技术 HttPSession
-
Cookie的使用流程
-
1.当用户第一次访问服务器时
服务器可以创建一个cookie出来
并且 添加到响应中 响应回浏览器 -
2.当浏览器 接收到 携带了cookie的响应后
会将cookie保存到本地文件 -
3.当用户 再一次 访问服务器时
会携带这cookie一起去访问
这时服务器拿到cookie可以使用 -
4.默认当浏览器关闭 会话结束 浏览器销毁保存cookie
(可以设置cookie存活时间 当时间到了 才会销毁) -
cookie的使用
-
1.每个网站最多可以保存20个cookie到浏览器中
-
2.每个cookie最多4kb(只能保存小数据)
-
3.每个浏览器最多可以保存300个cookie
-
4.cookie中不能保存中文
-
setMaxAge 设置cookie存活时间
以秒为单位
正值 cookie到时间被销毁
负值 浏览器不会保存cookie 会话结束 直接销毁cookie
0值 立即删除cookie