天天看点

java学习路程(javaEE)之获取表单数据、获取参数、request域、会话技术(Cookie)

一.获取表单数据

//设置浏览器数据格式
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	response.setContentType("text/html;charset=utf-8");
	//解决请求过来的数据乱码
	request.setCharacterEncoding("utf-8");
	// 获取请求过来的参数
	String username = request.getParameter("username");
	String password = request.getParameter("password");
	System.out.println(username +" "+ password);
}
// Servlets设置
<servlet>
  	<servlet-name>demo01</servlet-name>
  	<servlet-class>com.lanou3g.Demo01</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>demo01</servlet-name>
  	<url-pattern>/demo01</url-pattern>
  </servlet-mapping>
           

二.获取参数

1.获取表格中的数据

String username = request.getParameter("username");
String password = request.getParameter("password");
String sex = request.getParameter("sex");
String[] values = request.getParameterValues("hobby");
for (String string : values) {
	System.out.println(string);
}
String city = request.getParameter("city");
           

2.获取参数的map集合

Map<String, String[]> map =request.getParameterMap();
for (String key : map.keySet()) {
	String[] values = map.get(key);
	for (String string : values) {
		System.out.println(key +"="+ string);
	}
}
           

3.获取参数的所有name

Enumeration<String> names =request.getParameterNames();
while(names.hasMoreElements){
	System.out.println(names.nextElement());
}
           

4.将获得参数封装成对象

方法一:

创建users类将参数都声明为成员变量,放入对象中

注意:

1).使用的实体类对象 必须符合Javabean规范

2).实体类的成员变量要跟获取的参数一样

3).成员变量的名和name标签的名要相同

html

<body>
    //action 要提交的地址 从8080开始填 需要带上工程名
	<form action="/sh-web-03/demo01" method="post">
		// name标签相当于使用request获取参数方法的key
		账号:<input type="text" name="username"></br>
		密码:<input type="text" name="password"></br>
		<input type="submit" value="提交">
	</form>
</body>
           
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"); 
// 放入对象中
Users users = new Users(username, password, sex, hobby, city);
           

方法二:利用BeanUtils直接将请求的参数分装成对象

Users users = new Users();
try {
BeanUtils.populate(users, request.getParameterMap());
	System.out.println(users);
} catch (IllegalAccessException e) {
	e.printStackTrace();
} catch (InvocationTargetException e) {
	e.printStackTrace();
}
           

三.request 域对象

作用范围: 只在一次请求中有效

response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("utf-8");
PrintWriter writer = response.getWriter();
request.setAttribute("lisi", "man"); 
//直接使用request对象进行请求转发
//获取请求转发器
RequestDispatcher dispatcher = request.getRequestDispatcher("/demo04");
dispatcher.forward(request, response);
writer.write("123");
System.out.println("我是demo03响应回浏览器");
           

请求重定向(不用状态码)两次请求超出Request范围

response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("utf-8");
PrintWriter writer = response.getWriter();
request.setAttribute("lisi", "man"); 
response.sendRedirect("/sh-web-03/demo04");
//获取转发器
RequestDispatcher dispatcher = request.getRequestDispatcher("/demo04");
// 包含方法
dispatcher.include(request, response);
writer.write("123");
System.out.println("我是demo03响应回浏览器");
           
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("lisi");
		System.out.println(attribute);
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}
           

四.会话技术

1.含义:

指的是客户端(用户/浏览器)和服务端(Servlet)进行的交互

注意:当关闭浏览器时这次回话才会结束

客户端技术(浏览器实现)Cookie

2.Cookie的使用流程:

1).当用户第一次访问服务器时,服务器会创建一个Cookie并且添加到响应中,响应回浏览器

2).当浏览器接收到携带Cookie的响应后,会将Cookie保存到浏览器的本地文件

3).当用户再次访问服务器是会携带着Cookie一起去访问,这时服务端拿到 Cookie可以使用

4).默认浏览器关闭 会话结束,浏览器销毁保存Cookie(可设置cookie的存活时间)

3.Cookie的使用:

1).每个网站最多可以保存20个Cookie到浏览器中

2).每个Cookie最多4kb(只能保存小数据)

3).每个浏览器最多可以保存300个Cookie

4).Cookie中不能保存中文

4.setMaxAge()

正值: Cookie到时间销毁;

负值: 浏览器不会保存Cookie,回话结束直接销毁 ;

0值:立即删除Cookie;

显示上一次(最后)的登录时间

public class Demo05 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 = new Cookie("lastTime", System.currentTimeMillis() +"");
		// 设置存活时间
		cookie.setMaxAge(5 * 60);
		// 设置保存路径
		//  / 表示工程下所有的Servlet类都能拿到这个Cookie
		//  /sh-web-03/servlet 表示只有访问路径是servlet下的类才能获取到Cookie
		cookie.setPath("/sh-web-03/servlet");
		// cookie添加到响应
		response.addCookie(cookie);
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}
           

Servlet设置

<servlet>
  	<servlet-name>demo05</servlet-name>
  	<servlet-class>com.lanou3g.Demo05</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>demo05</servlet-name>
  	<url-pattern>/servlet/demo05</url-pattern>
  </servlet-mapping>