servlet request response
2016-09-12 17:58
309 查看
今天说一说request和response,servlet中最重要的两个
见上一篇http://blog.csdn.net/daliyuan350649623/article/details/52493977
消息行
消息头:
消息体:
getParameter(String name) getParameterValues(String name)
getParameterNames()
Map< String,String[]>getParameterMap()
PropertyDescr
4000
iptor
ServletInputStream in = getInputStream()–URLDecoder.decode()
以post方式提交表单数据的乱码问题:
request.setCharacterEncoding(“utf-8”);
以get方式提交表单数据的乱码问题:
请求重定向与请求转发的区别:
如果要转到其它应用必须要使用重定向
**HttpServletResponse:** doGet() doPost() 消息行:setStatus(302) 消息头:setHeader("content-disposition") refresh location 消息体:PrintWriter out = response.getWriter() ServletOutputStream st = response.getOutputStream()
见上一篇http://blog.csdn.net/daliyuan350649623/article/details/52493977
**HttpServletRequest:** 消息行:getMethod(),getRequestURL(),getRequestURI(),getContextPath() getQueryString() 消息头:getHeader(),getHeaderNames(),getHeaders() 消息体:getParameter(String name) getParameterValues(String name) getParameterNames(),Map<String,String[]>getParameterMap() PropertyDiscriptor ServletInputStream in = getInputStream()--URLDecoder.decode()
消息行
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { //获取请求消息行中的信息的方法 System.out.println(request.getMethod());//获取请求方式 System.out.println(request.getRequestURL());//获取请求的路径 System.out.println(request.getRequestURI());//获取请求的资源路径 System.out.println(request.getContextPath());//获取当前应用的 目录 /day34_request System.out.println(request.getQueryString());//获取地址后跟的参数 }
消息头:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取请求的头信息的方法 // String value = request.getHeader("User-Agent"); // //判断浏览器类型 // if(value.toLowerCase().contains("msie")) // System.out.println("你使用的是ie浏览器"); // else if(value.toLowerCase().contains("firefox")) // System.out.println("你使用的是火狐浏览器"); // else if(value.toLowerCase().contains("chrome")) // System.out.println("你使用的是谷歌浏览器"); //getHeaderNames()方法的使用 Enumeration enu = request.getHeaderNames(); while(enu.hasMoreElements()) { String name = (String) enu.nextElement(); String v = request.getHeader(name); System.out.println(name+":"+v); } //Enumeration en = request.getHeaders("accept"); //头信息中的name 是可以重复的,这个方法用来得到该名称的所有的值 }
消息体:
getParameter(String name) getParameterValues(String name)
//处理消息体的方法 //告诉服务器客户端使用的编码,以post方式提交表单数据的乱码问题 request.setCharacterEncoding("utf-8"); //得到用户名--表单中的数据默认都是字符串的 String username = request.getParameter("username"); //得到密码 String psw = request.getParameter("pwd"); //得到性别 String sex = request.getParameter("sex"); //得到爱好 String[] hobbys = request.getParameterValues("hobby"); //得到所在城市 String city = request.getParameter("city"); System.out.println(username+" "+psw+" "+sex+" "+city); for(String ss:hobbys) { System.out.print(ss+" "); }
getParameterNames()
//getParameterNames()方法的使用 request.setCharacterEncoding("utf-8"); Enumeration en = request.getParameterNames();//得到所有的name while(en.hasMoreElements()) { String name = (String) en.nextElement();//得到一个参数名 //根据名字获取值 String[] values = request.getParameterValues(name); System.out.print(name); for(int i=0;values!=null && i<values.length;i++) { System.out.print(values[i]+" "); } System.out.println(); }
Map< String,String[]>getParameterMap()
PropertyDescr
4000
iptor
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // try { // request.setCharacterEncoding("utf-8"); // //getParameterMap的使用 // Map<String,String[]> maps = request.getParameterMap();//一次性得到表单上提交过来的所有名称值对儿 // User user = new User(); // // //遍历Map集合 // for(Map.Entry<String, String[]> en:maps.entrySet())// username=冬冬 // { // String name = en.getKey();//得到键 username // String[] value = en.getValue();//得到值 // // //属性描述器 getUsername() setUsername()---Method // PropertyDescriptor des = new PropertyDescriptor(name, User.class); // // //从属性描述器中得到set方法 // Method m = des.getWriteMethod(); // // //执行 set方法 // if(value.length==1) // m.invoke(user, value[0]); // else // m.invoke(user, (Object)value); // } // // System.out.println(user); // // } catch (Exception e) { // // e.printStackTrace(); // } //使用commons-beanutils.jar和commons-logging.jar实现上边的功能 try { request.setCharacterEncoding("utf-8"); User user = new User(); BeanUtils.populate(user,request.getParameterMap()); System.out.println(user); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } }
ServletInputStream in = getInputStream()–URLDecoder.decode()
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //使用getInputStream()获取表单提交的数据 ServletInputStream in = request.getInputStream(); int len = 0; byte[] arr = new byte[1024]; while((len = in.read(arr))!=-1) { //System.out.println(new String(arr,0,len)); System.out.println(URLDecoder.decode(new String(arr,0,len,"utf-8"), "utf-8")); } in.close(); //URLEncoder.encode("",""); }
以post方式提交表单数据的乱码问题:
request.setCharacterEncoding(“utf-8”);
以get方式提交表单数据的乱码问题:
//再编码,再解码功能的函数 public String fun(String str) { String result = ""; try { result = new String(str.getBytes("ISO8859-1"),"utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return result; } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //以get方式提交表单数据的乱码处理---tomcat默认用iso8859-1进行解码,所以乱码 //获取用户名 String name = request.getParameter("username"); // //再编码 // byte[] arr = name.getBytes("ISO8859-1"); // //再解码 // String ss = new String(arr,"utf-8"); String ss = fun(name); System.out.println(ss); }
请求重定向与请求转发的区别:
//请求重定向 response.sendRedirect("/servelt/demo8") //请求转发request.getRequestDispatcher("/servlet/demo8").forward(request, response); public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); //请求转发 //在服务器端执行的 //地址栏只显示一个地址 //客户端只请求了一次 //地址不用写应用名 //不能转到其它应用 System.out.println("demo7---我没钱,我招Demo8借"); //request也是一个域对象 request.setAttribute("hello", "java");//ServletContext----域对象 //请求Demo8:带着 request和 response对象转到demo8 request.getRequestDispatcher("/servlet/demo8").forward(request, response); //不能转到其它应用 //request.getRequestDispatcher("http://www.baidu.com").forward(request, response); System.out.println("demo7---给你钱"); //请求重定向 //在客户端执行的 //地址栏先后显示2个地址 //客户端请求了2次 //地址需要写应用名 //可以转到其它应用 //response.sendRedirect(request.getContextPath()+"/servlet/demo8"); // response.sendRedirect("http://www.baidu.com"); // System.out.println("demo7---给你钱"); } //demo8的内容 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); //使用的request和 response对象是 demo7传过来的 String v = (String) request.getAttribute("hello"); System.out.println(v+" ,demo8--我借给你钱"); }
如果要转到其它应用必须要使用重定向
相关文章推荐
- HttpServletResponse.sendRedirect()方法/RequestDispatcher.forward()方法
- Rails 支持 Response 数据 GZip 压缩 json
- @ResponseBody
- 直接用Response输出可以加批注的Excel (转)
- Response.Redirect 打开新窗体的两种方法
- response响应正文
- Response.Redirect和Server.Transfer
- jsp出现getOutputStream() has already been called for this response异常的原因和解决方法
- 解决HttpServletResponse输出的中文乱码问题
- 提交了协议冲突 Section=ResponseStatusLine的解决
- 火狐浏览器扩展插件报错sec_error_ocsp_old_response解决办法
- spring组件 RestTemplate + @ResponseBody 使用心得
- ASP.NET中在自定义类中使用Session,Request,Response,Server
- liferay ajax 后 renderRequest renderResponse为空的替代解决方案
- Http协议-request/response
- 解决AJAX中使用UpdatePanel后再用Response.Write();等无法弹出对话框问题
- SpringMVC中出现" 400 Bad Request "错误(用@ResponseBody处理ajax传过来的json数据转成bean)的解决方法
- 如何在handler执行后在@responsebody生效前修改返回值
- 在atlas(ajax)中请不要使用Response.Write,请使用ClientScript.RegisterClientScriptBlock替换
- 后台代码里执行弹出脚本方法!(Response.Write), Response.Write()彈窗的方法大全