请求对象和相应对象

已有 71 次阅读2017-5-12 17:55 |个人分类:javaWeb|系统分类:学习纪录| names

请求对象获取参数

MicrosoftInternetExplorer402DocumentNotSpecified7.8 磅Normal0

获得客户及请求头

getHead(name)方法

getHeadsString names)方法

getHeaderNames方法

 

获取客户机请求参数(客户机提交的数据)

getParameter方法

getParameterValuesString name)方法

getParameterNames方法

getParaMeterMap方法

 

代码:

System.out.println(request.getMethod());

System.out.println(request.getRequestURI());

System.out.println(request.getRequestURL());

System.out.println(request.getContextPath());

System.out.println(request.getLocalAddr());

结果:

GET

/secondWeb/test/TestServlet

http://localhost:8080/secondWeb/test/TestServlet

/secondWeb

0.0.0.0



参数的三种传递方式

MicrosoftInternetExplorer402DocumentNotSpecified7.8 磅Normal0

表单中实现参数的传递:

表单元素中name对应参数名

表单中输入的值对应输入值

getParameter(“参数名”);

 

A链接一定是进入doGet方法,通过地址栏访问的也是doGet方法

 

URL实现参数传递:?参数名=参数值&参数名=参数值


 

 

隐藏域实现参数传递:

表单代码:

doPost方法代码:


 

 

参数传递

  用户的请求信息封装在request请求对象里面

  使用request一系列的方法得到用户请求信息


MicrosoftInternetExplorer402DocumentNotSpecified7.8 磅Normal0

Get请求和Post请求

MicrosoftInternetExplorer402DocumentNotSpecified7.8 磅Normal0

1.如何选取

      Get用户得到某些东西,简单的获取,不会对服务器做任何的修改

      Post:发送数据来进行处理,经常将其考虑为一个更新

 

  2.区别

     2.1安全性

地址栏

Get:URL

        Post:request对象

     2.2提交的内容

Get内容少

Post内容多

 

     2.3编码问题处理

Post:设定请求对象的编码

Get:URL设定请求对象的编码是不起作用的,手动编码

 

     2.4表单中?传参

           Get不能传递的

Post是可以传递的

 

 3.doPost和doGet

  doPost-------处理post类型的请求

  doGet--------处理get类型的请求

 

Get和post对于请求信息的封装是有差别的

 

Method=get/post

 

A-----get

 

地址栏访问----get


中文乱码问题

MicrosoftInternetExplorer402DocumentNotSpecified7.8 磅Normal0

设定请求和响应对象编码

response.setContenType(text/html;charset=utf-8);

request.setCharacterEncoding(utf-8);

手动强制编码:

Name = new String(name.getBytes(ISO-8859-1),utf-8);

修改TomcatURL的编码

Connector URLEncoding=utf-8 useBodyEncodingForURL=true


响应对象


响应从服务器端--------管道,数据流---------------------客户端


发送数据流

response.getWriter().writer("hello world");




重定项和请求转发


MicrosoftInternetExplorer402DocumentNotSpecified7.8 磅Normal0

转发:

浏览器发送HTML请求-------服务器接收请求---------调用内部的servlet完成请求和转发动作---将目标资源发送给客户

转发的路径是同一个web容器下的URL,中间传递容器内的request,浏览器地址栏仍然显示第一次访问的路径

浏览器感受不到转发,因为浏览器只发送一次请求

重定向:

浏览器发送HTTP请求------服务器接收请求处理后发送302状态码及新的location给客户端------客户端接收到302响应,自动发送一个新的http请求,URL是新的location---服务器根据location处理新的请求

重定向可以到任何的URL。浏览器地址栏显示的是重定向的路径

浏览器做两次请求


MicrosoftInternetExplorer402DocumentNotSpecified7.8 磅Normal0

重定向:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

System.out.println("进入jumpServlet");

//跳转到jsp页面,servlet请求jspservlet---------jsp

response.sendRedirect("response.jsp");

}

运行结果:


 

 

请求转发:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

System.out.println("进入jumpServlet2");

request.getRequestDispatcher("response.jsp").forward(request, response);

}

运行结果:


 

A.重定向发起两次请求,请求转发一次请求

B.客户发起http://localhost:8088/secondWeb/JumpServlet,客户第一次发起了response.sendRedirect("response.jsp")AA不接受,第二次向B发起response.jsp请求;请求转发:客户发送http://localhost:8088/secondWeb/JumpSerletAA转发给B

C.重定向:客户发送请求信息给AJumpSerlet),但是不能发送给Bresponse.jsp

  请求转发:客户发发送请求信息给AA在转给B

 

Request.jsp

<a href="JumpServlet?param=test">测试</a>

 

JumpServlet.java

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

System.out.println("进入jumpServlet");

//System.out.println("进入jumpServlet2");

System.out.println(request.getParameter("param"));

//request.getRequestDispatcher("response.jsp").forward(request, response);//请求转发

//跳转到jsp页面,servlet请求jspservlet---------jsp

response.sendRedirect("response.jsp");//重定向

}

 

Response.jsp

this is response  <%=request.getParameter("param") %>

 

Request----jumpServlet------response

 

重定向:

response.sendRedirect("response.jsp");

运行结果:


 

 

请求转发:

request.getRequestDispatcher("response.jsp").forward(request, response);

运行结果:


 

 

信息共享区域


 

Request.setAttribute(key,values);

request.getAttribute(key,values);

 

沿用上述request.jsp,JumpServlet.java,response.jsp代码

 

JumpServlet.java,

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

System.out.println("进入jumpServlet");

//request.jsp--------JumpServet------------response.jsp

//                    request1             request2

//当为重定向的时候:两个请求request.jsp-----请求1---JumpServet-----请求2-------response.jsp

//当为请求转发的时候,一个请求request.jsp-----请求1---JumpServet------请求1------response.jsp

request.setAttribute("name", "admin");

//System.out.println("进入jumpServlet2");

//System.out.println(request.getParameter("param"));

request.getRequestDispatcher("response.jsp").forward(request, response);

//跳转到jsp页面,servlet请求jspservlet---------jsp

//response.sendRedirect("response.jsp");

}

 

Response.jsp

 

 <body>

  this is response  

  <%--=request.getParameter("param") --%>

  <%=request.getAttribute("name") %>

</body>

 

重定向:

response.sendRedirect("response.jsp");

运行结果:


请求转发:

request.getRequestDispatcher("response.jsp").forward(request, response);

运行结果:


 

重定向:两个请求,放的信息共享区域 = 取得信息共享区域

请求转发:一个请求,放的信息共享区域== 取得信


MicrosoftInternetExplorer402DocumentNotSpecified7.8 磅Normal0






路过

鸡蛋

鲜花

握手

雷人

全部作者的其他最新日志

评论 (0 个评论)

facelist

doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

Copyright;  ©2015-2017  知了堂学习社区  Powered by  知了堂Edu!     ( 蜀ICP备16011312号-1 )