Servlet 入门②

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/besonn/article/details/100536182

1、Request
作用:封装 HTTP 请求消息。
方法:
1)getParameter(String):获取参数
2)getParameterValues (String):获取参数值
3)getParameterNames():获取参数名称列表
例:

 login.jsp:
	<form action="C" method="post">
	姓名:<input type="text" name="name"><br>
	爱好:<input type="checkbox" name="hobby" value="read">读书
   			<input type="checkbox" name="hobby" value="football">足球
   			<input type="checkbox" name="hobby" value="run">跑步 <br>
	性别:<input type="radio" name="sex" value="male">男
   			<input type="radio" name="sex" value="female">女<br>
	<input type="submit" value="提交">
	</form>
      CServlet:
	// 获取名字<input type="text" name="name">的值
	String name = request.getParameter("name");
	// 爱好<input type="checkbox" name="hobby" value="read">
	String[] hobbys = request.getParameterValues("hobby");
	// 性别<input type="radio" name="sex" value="male">
	String sex = request.getParameter("sex");
	// 显示到页面上
	response.setContentType("text/html;charset=utf-8");
	PrintWriter out = response.getWriter();
	out.print("你叫:" + name + "<br/>");
	out.print("你的爱好是:<br/>");
	for (String h : hobbys) {
	  out.print(h + "<br/>");
	}
	out.print("你的性别是:" + sex + "<hr/>");

注意:乱码问题
i)如果是get方法提交的请求(无论get还是post都可)
String name = request.getParameter(“name”);
//获取指定格式的字节码
byte[] bt = name.getBytes(“iso-8859-1”);
//根据utf-8重新编码
String name1 = new String(bt, “utf-8”);
ii)只针对post请求有效
request.setCharacterEncoding(“utf-8”);
String name = request.getParameter(“name”);
注意:一定要在第一次调用getParameter()之前设置编码。
4)getRequestDispatcher():返回一个RequestDispatcher对象。
5)setAttribute()|getAttribute()|removeAttribute()
概念:转发是将请求在服务器内部交给另一个组件再去执行,同时共享request中的数据。
特点:客户端只提交了一次请求。浏览器中的url不发生变化。转发是发生在同一个web服务器项目中的资源。
例:

 FirstServlet:		
		System.out.println("我是黄牛!");
		// 借助request可以进行数据共享
		request.setAttribute("money", 15);
		// 请求转发
		RequestDispatcher rdDispatcher =  request.getRequestDispatcher("/Second");
		rdDispatcher.forward(request, response);
	    SecondServlet:
		System.out.println("我是黄牛的亲戚!");
		// 可以获取request域中的数据
		int money = (int)request.getAttribute("money");
		System.out.println("收到:"+money+"块钱!");
		request.removeAttribute("money");
		// 响应
		response.setContentType("text/html;charset=utf-8");
		response.getWriter().write("车票!");

注意:request作为域对象,(一次请求开始,到该次请求结束),只能在同一次请求中进行数据的共享,即只有在转发时可用。

2、Response
作用:主要是发送响应消息,重定向。
方法:
1)getWriter().write():向客户端发送响应消息。
2)sendRedirect():重定向
概念:重定向就是将请求发送回浏览器。然后由浏览器再重新向服务器自动的发送一个请求。
特点:用户发送了两次请求。浏览器url会发生变化。重定向可以发生在不同的服务器之间。
例1:
response.sendRedirect(“http://news.baidu.com”);
注意:重定向的url必须是服务器路径,或者是当前服务器的相对路径。
例2:
response.sendRedirect(getServletContext().getContextPath()+"/F");
转发和重定向的区别?
3、Session
会话:从打开浏览器开始,包含多次请求和响应,到关闭浏览器为止。
注意:会针对不同客户端浏览器创建不同的Session。一个常见的错误是以为session在有客户端访问时就被创建,然而事实是直到某server端程序(如Servlet)调用HttpServletRequest.getSession(true) 或者 HttpServletRequest.getSession()这样的语句时才会被创建。
例:

  AServlet:
		HttpSession hSession = request.getSession();
		hSession.setAttribute("name", name);
		response.getWriter().write("welcome:"+hSession.getAttribute("name"));
	  BServlet:
		HttpSession hSession = request.getSession();
		response.getWriter().write("I am R, welcome:"+hSession.getAttribute("name"));
	注意:程序调用HttpSession.invalidate()时销毁session对象,或者超过30分钟(可以自己设定)。

猜你喜欢

转载自blog.csdn.net/besonn/article/details/100536182
今日推荐