一:从表单中获取数据
public class Demo01 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
//防止请求过来的数据乱码(解决post请求乱码)
request.setCharacterEncoding("UTF-8");
//获取表单请求过来的参数
//传入的参数 就是表单中 name标签
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println(username+" "+password);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
二:利用beanuitls封装一个对象
public class Demo02 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
//利用beanuitls直接将请求的参数封装成一个对象
//参数2 从请求中获取的参数的map集合
//注意:1.使用的实体类对象 必须符合javabean规范
// 2.实体类的成员变量 要跟获取的参数一样
// 3.实体类的成员变量名 和 name标签名要相同
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();
}
}
private void fun4(HttpServletRequest request) {
//将获取的参数 封装成一个对象
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);
}
private void fun3(HttpServletRequest request) {
//获取参数的map集合
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);
}
}
}
private void fun2(HttpServletRequest request) {
//获取参数的所有name
Enumeration<String> names = request.getParameterNames();
while (names.hasMoreElements()) {
System.out.println(names.nextElement());
}
}
private void fun1(HttpServletRequest request) {
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");
System.out.println(username);
System.out.println(password);
for (String string : hobby) {
System.out.println(string);
}
System.out.println(city);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
三:request域对象 作用范围 只在一次请求中有效
public class Demo03 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/hyml;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
//获取字符流
PrintWriter writer = response.getWriter();
request.setAttribute("feifei", "pang");
//请求包含(一次请求 并且两个页面的响应都会返回给浏览器)
//获取转发器
RequestDispatcher dispatcher = request.getRequestDispatcher("/demo04");
//包含方法
dispatcher.include(request, response);
//响应回浏览器
writer.write("123");
System.out.println("是demo03");
}
private void fun2(HttpServletResponse response) throws IOException {
//测试请求重定向(两次请求 超出request的范围)
response.sendRedirect("/sh-web-03/demo04");
}
private void fun1(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//测试域对象的使用范围
//请求转发(一次请求)
//注意 最终响应回浏览器的内容是 转发到的页面的响应
//在request域中保存值
request.setAttribute("feifei", "pang");
//使用request对象 进行请求转发
//获取请求转发器
RequestDispatcher dispatcher = request.getRequestDispatcher("/demo04");
dispatcher.forward(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
四:会话技术
-
指的是客户端(用户/浏览器)和服务端(servlet)进行的交互
-
一次会话 只有当关闭浏览器时 这次会话算结束
-
1.客户端技术(浏览器实现) Cookie
-
Cookie使用流程
-
1.当用户第一次访问服务器时 服务器可以创建一个Cookie出来
-
并且添加到响应中 响应回用户(浏览器)
-
2.当浏览器 接收到 携带了Cookie的响应后 会将cookie保存到本地文件
-
3.当用户再次访问服务器时 会携带着cookie一起去访问 这时服务端拿到cookie可以使用
-
4.默认当浏览器关闭时 会话结束 浏览器销毁保存cookie(可以设置cookie存活时间 时间到 才销毁)
-
Cookie的使用
-
1.每个网站最多可以保存20个cookie到浏览器中
-
2.每个cookie最多只能保存4kb(只能保存小数据)
-
3.每个浏览器最多可以保存300个cookie
-
4.cookie中不能保存中文
-
设置cookie的存活时间
-
setMaxAge 以秒为单位
-
正值 cookie到时间被销毁
-
负值 浏览器不会保存cookie 会话结束 直接销毁cookie
-
0值 立即删除cookie
-
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”);//从请求中获取cookie Cookie[] cookies = request.getCookies(); if (cookies!=null) { for (Cookie cookie : cookies) { //找出刚才保存的lastTime的cookie if (cookie.getName().equals("lastTime")) { //获取cookie保存的值 String value = cookie.getValue(); //字符串转long型 long time = Long.parseLong(value); //字符串转时间 Date date=new Date(time); //将日期对象格式化 SimpleDateFormat sdf=new SimpleDateFormat("yyyy:MM:dd HH:mm:ss"); //格式化 String stringTime = sdf.format(date); //将时间显示到浏览器 response.getWriter().println(stringTime); } } } //创建cookie Cookie cookie=new Cookie("lastTime", System.currentTimeMillis()+""); //设置存活时间 cookie.setMaxAge(60*1); //设置保存路径 // /表示工程下所有的servlet类都能拿到这个cookie // /sh-web-03/servlet表示只有访问路径是servlet下的类才能获取到cookie cookie.setPath("/sh-web-03/servlet"); //保存到响应中 response.addCookie(cookie);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}