Request对象

1、request对象
	*HttpServletRequest 父接口 ServletRequest

	
	*方法
		-获取到客户机信息
			--获取表单提方式
				String getMethod() 
			--获取到请求地址
				StringBuffer getRequestURL() 。
			--获取到请求的项目名称
				String getContextPath() 
			--获取道请求的客户端的ip地址
				String getRemoteAddr() 

		-获取到请求的头信息
			--使用方法getHeader("头");
				Referer User-Agent If-Modified-Since 

		-获取通过表单提交的数据
			-String getParameter(String name)
			根据标签name属性的值 ,获取提交的值
			
			-Map<String , String[]> getParameterMap() 
			获取表单输入项的name的值和输入项的值		
			
			-String[] getParameterValues(String name) 
			针对复选框,获取多个提交的数据,参数是复选框的name属性值

			-Enumeration<String> getParameterNames() 
			获取所有表单输入项name属性的值

		-在表单提交中文乱码的问题
			--因为request也存在缓冲区,且缓冲区的编码是iso8859-1不支持中文,所以需要设置编码方式。表单提交方式 get post
			
			--post提交方式中文乱码解决方式
				setCharacterEncoding("编码方式");

			--get提交中文乱码方式
				---因为get提交方式会在地址栏,但是输入的内容会被进行编码,所以获取的时候是乱码
				
				---三种解决方式:
					**在tomcat里面配置
						找到conf下server.xml
						-配置端口的地方,最后加属性URLEncoding="utf-8"(不建议用)
					**首先先对中文编码,到servlet里面解码(逆向编解码)
						username = URLEncoder.encode(username,"iso8859-1")
						username = URLEncoder.decode(username,"utf-8")
					**使用String构造方法编码转换(常用)
						username = new String(username.getByte("iso8859-1"),"utf-8")
			
			
			--乱码总结:
				**向页面输出中文乱码
					-字节流
						设置浏览器编码和字节数组的编码一致
					--字符流
						设置response缓冲区的编码和浏览器编码一致
				**获取表单提交的数据中文乱码
					--post
						设置request缓冲区的编码

					--get
						**String构造函数完成转换
						**配置tomcat配置
						**编码解码

		-request是一个域对象
			--在一定的范围内可以存值和取值。
				ServletContext域:整个项目
					setAttribute()
					getAttribute()
			
			--request域
				范围:一次请求
					setAttribute()
					getAttribute()
				request域对象经常和转发一起使用
					request.getRequestDispatcher("不带项目名称的转发路径").forward();
			
			--创建Demo1的servlet的request域色设置一个值,msg itcast, 获取,通过demo2的request域获取设置的值
				
				**代码演示
					--Demo1  Servlet
						/**
						 *通过demo1的request域设置一个值
						 */
						public void doGet(HttpServletRequest request, HttpServletResponse response)
								throws ServletException, IOException {
								//设置值
							request.setAttribute("msg", "xia");
							//转发到damo2
					//		request.getRequestDispatcher("/Demo2").forward(request, response);
							
							//重定向
					//		response.sendRedirect("/day09/Demo2");
						}
					
					--Demo2 Servlet
						/**
						 *获取通过demo1里面设置的值
						 */
						public void doGet(HttpServletRequest request, HttpServletResponse response)
								throws ServletException, IOException {
								//获取值
							response.getWriter().print(request.getAttribute("msg"));
						}


		-转发和重定向
				--转发:在服务器内部进行的转发,       在地址栏访问的时候,地址栏不会跳转        ,而是服务器内部会进行相应的转发操作,注意区别重定向。写路径的时候不需要写项目的名称,因为是在内部进行转发的,所以不到外层。
				request.getRequestDispatcher("/Demo2").forward(request, response);



				--重定向:通过浏览器访问,  地址栏访问时,会进行跳转。     因为重定向会指向新的地址即重新发送请求,写路径的时候需要写项目名称。
				response.sendRedirect("/day09/response/Login.html");

				--对比两个的区别,从代码路径可以看出,具体理解转发和重定向的区别

				-重定向和转发区别
				--在一个请求里面,又做了一次请求
				--重定向:比如找小文借钱10万,小文没有钱,告诉我小温有钱,我再去找小温,把钱拿到
					---请求两次,响应两次

				--转发:比如找张三借钱,但是张三没有钱,张三去帮我找李四借钱,最终把钱给我
					---请求一次,响应一次

				

	*代码演示
		-方法演示
		/**
		 *实现获取表单提交的数据
		 *@author xiayujie
		 */
		public void doGet(HttpServletRequest request, HttpServletResponse response)
				throws ServletException, IOException {

		}
		private void test1(HttpServletRequest request) throws Exception{
			
			String username = request.getParameter("username");
			System.out.println("GET中文乱码解决:"+new String(username.getBytes("ISO8859-1"),"utf-8"));
			
			
		}
		
		
		private void test(HttpServletRequest request)
				throws UnsupportedEncodingException {
			System.out.println("获取客户机信息-------------------------------------------------");
			//获取客户机信息
			//获取请求的方式
			System.out.println(request.getMethod());
			//获取项目名称
			System.out.println(request.getContextPath());
			//获取请求地址
			System.out.println(request.getRequestURI());
			System.out.println(request.getHeader("Referer"));
			//获取ip
			System.out.println(request.getRemoteAddr());
			System.out.println(request.getRemoteHost());
			
			System.out.println("获取请求的头信息-------------------------------------------------");
			
			//获取请求的头信息
			String referer = request.getHeader("Referer");
			String useragent = request.getHeader("User-Agent");
			String ifModifiedSince = request.getHeader("If-Modified-Since");
			System.out.println(referer);
			System.out.println(useragent);
			System.out.println(ifModifiedSince);
				
			System.out.println("获取表单提交信息-------------------------------------------------");
			//使用getParameter()
			
			//request获取通过post提交的数据,会把数据放到request缓冲区里面
			//request缓冲区默认编码四iso8859-1和response缓冲区的编码一致
			//所以需要把request缓冲区编码设置一下
			request.setCharacterEncoding("utf-8");
		
			String username = request.getParameter("username");
			System.out.println(username);
			
			//获取复选框的值getParameterValues()
			String[] s = request.getParameterValues("love");
			System.out.println(Arrays.toString(s));
				
			//获取表单输入项的name和输入的值getParameterMap()
			Map<String,String[]> map = request.getParameterMap();
			
			Set<Entry<String, String[]>> set = map.entrySet();
			for (Entry<String, String[]> entry : set) {
				String key = entry.getKey();
				String[] value = entry.getValue();
				System.out.println(key+" : "+Arrays.toString(value));
			}
			/*
			Set<String> keySet = map.keySet();
			
			Iterator<String> it = keySet.iterator();
			while(it.hasNext())
			{
				String key = it.next();
				String[] value = map.get(key);
				System.out.println(key+" : "+Arrays.toString(value));
			}*/
		}

		/**
		 *
		 */
		public void doPost(HttpServletRequest request, HttpServletResponse response)
				throws ServletException, IOException {
			doGet(request, response);
		}

2、使用转发完成 登录操作
	*如果用户名或者密码错误,回到登录页面,但是携带错误提示在登录页面显示出来

	*引入知识点:
		jsp:sun公司提供用于开发动态网站的技术 servlet

		el表达式:获取域对象里面的值
		语法:${域对象名称}
	
	*代码演示
		--RequestDemo3
		public void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
			String username = request.getParameter("username");
			String password = request.getParameter("password");
			if("admin".equals(username) && "123456".equals(password))
			{
				response.getWriter().write("SUCCESS!");
			}
			else
			{
				//向request页面域里面设置一个值
				request.setAttribute("msg1", "用户名或密码错误!");
				//转发到登录页面
				request.getRequestDispatcher("/request/login.jsp").forward(request, response);
			}
		}

		--login.jsp
			<body>
			  <h1>Login Page</h1>
				<form action="/day09/RequestDemo3" method="post"> 		
					username:<input type="text" name="username"/><br> 
					password:<input type="password" name="password"/><br>
					<input type="submit" value="login"/>	
				</form>
				  <h2><font color="red">${msg1}</font></h2>
			  </body>

3、debug调试web项目
	*需要在tomcat启动的位置旁边的小蜘蛛 debug server,才可以进行调试

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值