jsp中request的常见使用方法

HttpServletRequest

HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息

request常用方法

l获得客户机信息

getRequestURL方法返回客户端发出请求时的完整URL

getRequestURI方法返回请求行中的资源名部分。

getQueryString 方法返回请求行中的参数部分。

getRemoteAddr方法返回发出请求的客户机的IP地址

getRemoteHost方法返回发出请求的客户机的完整主机名

getRemotePort方法返回客户机所使用的网络端口号

getLocalAddr方法返回WEB服务器的IP地址。

getLocalName方法返回WEB服务器的主机名

getMethod得到客户机请求方式

URLURI的关系:URIURL的父类,URI描述资源,URL描述互联网的资源

Stringurl = request.getRequestURL().toString();

System.out.println(url);

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

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

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

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

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

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

Request常用方法

l获得客户机请求头

getHead(name)方法

•getHeaders(Stringname)方法

•getHeaderNames方法

l获得客户机请求参数(客户端提交的数据)

•getParameter(name)方法

•getParameterValuesStringname)方法

•getParameterNames方法

•getParameterMap方法//

•getInputStream

获取客户机带过来的数据

String username =request.getParameter("username");

System.out.println(username);

System.out.println("----------------------");

Enumeration e = request.getParameterNames();

while(e.hasMoreElements()){

String name =(String) e.nextElement();

String value = request.getParameter(name);

System.out.println(name+ "=" + value);

}

System.out.println("----------------------");

String values[]=request.getParameterValues("username");

for(int i=0;values!=null&&i<values.length;i++){

System.out.println(values[i]);

}

System.out.println("----------------------");

//http://localhost:8080/day05/servlet/RequestDemo3?username=aaa&username=bbb&password=123

Map<String,String[]>map = request.getParameterMap();

Set<Map.Entry<String,String[]>> set =map.entrySet();

for(Map.Entry<String,String[]>entry : set){

username =entry.getKey();

values =entry.getValue();

for(int i=0;values!=null&&i<values.length;i++){

System.out.println(username+"=" + values[i]);

}

}

request常见应用1

l防盗链

Stringreferer =request.getHeader("referer");

if(referer==null||!referer.startsWith("http://localhost")){

response.sendRedirect("/day05/index.html");

return;

}

String data = "凤姐日记";

response.setCharacterEncoding("UTF-8");

response.setHeader("content-type","text/html;charset=UTF-8");

response.getWriter().write(data);

l各种表单输入项数据的获取

•textpasswordradiocheckbox

•fileselecttextareahidden

•imagebuttonjs编程用

packagecn.itcast.request;

importjava.io.IOException;

importjava.util.Arrays;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

//获取不同类型表单的数据(获取客户机表单提交的数据)

publicclass RequestDemo5 extends HttpServlet {

publicvoid doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

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

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

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

System.out.println(Arrays.asList(request.getParameterValues("like")==null?newString[]{}:request.getParameterValues("like")));

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

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

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

String username=request.getParameter("username");//"" null

if(username==null ||username.trim().equals("")){

System.out.println("您没有提交数据");

}

request.getParameter("gender"); //null

request.getParameterValues("like");//null

}

publicvoid doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}

form表单:

<!DOCTYPEHTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN">

<html>

<head>

<title>form.html</title>

<meta http-equiv="keywords"content="keyword1,keyword2,keyword3">

<meta http-equiv="description"content="this is my page">

<meta http-equiv="content-type"content="text/html; charset=UTF-8">

<!--<link rel="stylesheet"type="text/css"href="./styles.css">-->

</head>

<body>

<form action="/day05/servlet/RequestDemo5"method="post">

用户名:<input type="text"name="username"><br/>

密码:<input type="password"name="password"><br/>

性别:<input type="radio"name="gender" value="male">

<input type="radio"name="gender" value="female">

<br/>

爱好:<input type="checkbox"name="like" value="basketball">蓝球

<input type="checkbox"name="like" value="football">足球

<input type="checkbox"name="like" value="java">java

<input type="checkbox"name="like" value=".net">.net

<br/>

所在地:<select name="city">

<option value="bj">北京</option>

<option value="sh">上海</option>

<option value="cs">长沙</option>

</select><br/>

简历:<textarea rows="5"cols="60" name="resume"></textarea><br/>

大头照:<input type="file" name="image"><br/>

<input type="hidden"name="xx" value="yyy">

<input type="submit"value="提交">

</form>

<form action="/day05/servlet/RequestDemo6"method="get">

用户名:<input type="text"name="username"><br/>

<input type="submit"value="提交">

</form>

<form action="/day05/servlet/RequestDemo7"method="post">

用户名:<input type="text"name="username"><br/>

<input type="submit"value="提交">

</form>

<!-- 超链接后面带中文数据一定要经过url编码-->

<a href="/day05/servlet/RequestDemo8?name=方立勋">点点</a>

</body>

</html>

如果都没有添或选择,输入项默认为空串“”,选择项为NUll

所以最好用这种方式进行比较判断:if(username==null||username.trim().equals("")){

l请求参数的中文乱码问题

importjava.io.IOException;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

//request的乱码问题:get\post

publicclassRequestDemo6 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponseresponse)

throwsServletException, IOException {

//以下代码可以解决post提交的乱码

request.setCharacterEncoding("UTF-8"); //只对post方式有效

//String username1=request.getParameter("username");

//System.out.println(username1);

//以下代码可能解决get提交的乱码

String username2=request.getParameter("username");

//username2 = newString(username2.getBytes("iso8859-1"),"UTF-8");

System.out.println(username2);

}

public void doPost(HttpServletRequest request,HttpServletResponse response)

throwsServletException, IOException {

doGet(request,response);

}

}

importjava.io.IOException;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

//思考题:下面程序有乱码吗????

publicclassRequestDemo7 extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponseresponse)

throwsServletException, IOException {

request.setCharacterEncoding("UTF-8");

String username =request.getParameter("username"); //方立

response.setCharacterEncoding("gb2312");

response.setContentType("text/html;charset=gb2312");

response.getWriter().write(username);

}

public void doPost(HttpServletRequest request,HttpServletResponse response)

throwsServletException, IOException {

doGet(request,response);

}

}

lURL地址的编码

importjava.io.IOException;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

//超链接提交中文数据在服务器端获取的代码

/*

*<!-- 超链接后面带中文数据一定要经过url编码-->

<ahref="/day05/servlet/RequestDemo8?name=方立勋">点点</a>

*

*/

publicclass RequestDemo8 extendsHttpServlet {

publicvoid doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

Stringname = request.getParameter("name");

name= new String(name.getBytes("iso8859-1"),"UTF-8");

System.out.println(name);

}

publicvoid doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}

request常见应用2

lrequest对象实现请求转发:请求转发指一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理。

l请求转发的应用场景:MVC设计模式

lrequest对象提供了一个getRequestDispatcher方法,该方法返回一个RequestDispatcher对象,调用这个对象的forward方法可以实现请求转发。

lrequest对象同时也是一个域对象,开发人员通过request对象在实现转发时,把数据通过request对象带给其它web资源处理。

setAttribute方法

getAttribute方法

removeAttribute方法

getAttributeNames方法

*请求转发的特点:

*1.请求转发对浏览器而言只发了一次请求,并且浏览器的地址栏不会发生变化

*2.请求转发下,服务器只会创建一个request response

*

*请求转发应用场景mvc设计模式

*mvc设计模式下,都是servlet处理请求,处理请求产生数据后,servlet会把数据存储request域,然后转发给jsp显示

*

String data = "aaaa";

request.setAttribute("data", data);

request.setAttribute("data", data);

RequestDispatcher rd =request.getRequestDispatcher("/view.jsp");

rd.forward(request, response);

请求转发的细节

lforward方法用于将请求转发到RequestDispatcher对象封装的资源。

l如果在调用forward方法之前,在Servlet程序中写入的部分内容已经被真正地传送到了客户端,forward方法将抛出IllegalStateException异常。

l如果在调用forward方法之前向Servlet引擎的缓冲区(response)中写入了内容,只要写入到缓冲区中的内容还没有被真正输出到客户端,forward方法就可以被正常执行,原来写入到输出缓冲区中的内容将被清空,但是,已写入到HttpServletResponse对象中的响应头字段信息保持有效

String data = "aaa";

response.getWriter().write(data); //浏览器不会看到这个数据的输出

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

String data2 = "bbb";

response.getWriter().write(data2); //浏览器不会看到这个数据的输出

请求重定向和请求转发的区别

l一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理,称之为请求转发。

l一个web资源收到客户端请求后,通知浏览器去访问另外一个web资源,称之为请求重定向。

lRequestDispatcher.forward方法只能将请求转发给同一个WEB应用中的组件;而HttpServletResponse.sendRedirect方法还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。

l如果传递给HttpServletResponse.sendRedirect方法的相对URL“/”开头,它是相对于整个WEB站点的根目录;如果创建RequestDispatcher对象时指定的相对URL“/”开头,它是相对于当前WEB应用程序的根目录。

l调用HttpServletResponse.sendRedirect方法重定向的访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;调用RequestDispatcher.forward方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。

lHttpServletResponse.sendRedirect方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求;RequestDispatcher.forward方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。

lRequestDispatcher.forward方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;而HttpServletResponse.sendRedirect方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。

RequestDispatcher

linclude方法:

•RequestDispatcher.include方法用于将RequestDispatcher对象封装的资源内容作为当前响应内容的一部分包含进来,从而实现可编程的服务器端包含功能。

被包含的Servlet程序不能改变响应消息的状态码和响应头,如果它里面存在这样的语句,这些语句的执行结果将被忽略

//动态包含

request.getRequestDispatcher("/servlet/HeadServlet").include(request,response);

String data = "aaa<br/>";

response.getWriter().write(data);

request.getRequestDispatcher("/servlet/FootServlet").include(request,response);

工程中“\”的用法:

服务器端“\”代表Web应用,客户端代表整个网站

this.getServletContext().getRealPath("/download/日本.jpg");

this.getServletContext().getResourceAsStream("/download/日本.jpg");

request.getRequestDispatcher("/login.html");

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

/*

<a href="/day05/message.jsp">点点</a>

<form action="/day05/servlet/FootServlet">

</form>

<img src="/day05/download/日本纽.jpg">

*/

}

你可能感兴趣的:(request)