request

来源:互联网 发布:spss数据预测模型 编辑:程序博客网 时间:2024/06/12 00:25

request常用方法:

Servlet代码:

public class RequestDemo1 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {System.out.println(request.getRequestURI());System.out.println(request.getRequestURL());//返回请求行参数http://localhost:8080/day06/servlet/RequestDemo1?username=aaaSystem.out.println(request.getQueryString());System.out.println("=====================");System.out.println(request.getRemoteAddr());System.out.println(request.getRemoteHost());System.out.println(request.getRemotePort());System.out.println(request.getMethod());}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}

request获取请求头:

Servlet代码:
//获取请求头相关的方法private void test1(HttpServletRequest request) {//如果有多个该头,getHeader只能获得第一个头的值String headValue = request.getHeader("Accept-Encoding");System.out.println(headValue);System.out.println("=======================");//getHeaders可以获得所有同名该头的值Enumeration e = request.getHeaders("Accept-Encoding");while(e.hasMoreElements()){String value = (String)e.nextElement();System.out.println(value);}System.out.println("=======================");//getHeaderNames可以获得所有头的名字e = request.getHeaderNames();while(e.hasMoreElements()){String name = (String)e.nextElement();String value = request.getHeader(name);System.out.println(value);}}

request获取请求数据:
html代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>带数据给RequestDemo2</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">  </head>    <body>    <!-- 向服务器提交数据的两种方式 -->    <a href="/day06/servlet/RequestDemo2?username=xxx">点点</a>        <form action="/day06/servlet/RequestDemo2" method="post">    用户名1:<input type="text" name="username"/></br>    用户名2:<input type="text" name="username"/></br>    密码:<input type="text" name="password"/></br>    <input type="submit" value="提交"/></br>    </form>      </body></html>

Servlet代码:

//User对象,用于封装提交的数据public class User {private String username[];private String password[];public String[] getUsername() {return username;}public void setUsername(String[] username) {this.username = username;}public String[] getPassword() {return password;}public void setPassword(String[] password) {this.password = password;}}
//获取请求数据//获取请求数据时一般来说都要先检查再使用//防止用户吃饱了撑的不输入数据或者只输入空格就提交,报异常public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {System.out.println("==========获取数据方式1===========");//常用:获取指定参数的值String value = request.getParameter("username");if(value!=null&&!value.trim().equals("")){System.out.println(value);}System.out.println("==========获取数据方式2===========");Enumeration e =request.getParameterNames();while(e.hasMoreElements()){String name = (String)e.nextElement();//username passwordvalue = request.getParameter(name);if(value!=null&&!value.trim().equals("")){System.out.println(name+" = "+value);}}System.out.println("==========获取数据方式3===========");//getParameterValues得到所有同名参数的值String[] values = request.getParameterValues("username");for(int i =0;values!=null&&i<values.length;i++){System.out.println(values[i]);}//增强for循环//for(String v : values){//System.out.println(v);//}System.out.println("==========获取数据方式4===========");//常用:将数据封装到对象(user)中去,导入beanutils和logging包Map<String,String[]> map = request.getParameterMap();User user = new User();try {BeanUtils.populate(user, map);//username String[] 用map集合的数据填充bean//bean的拷贝//把表单数据封装到formbean对象中,再将formbean拷贝到user对象//拷贝想成功,属性值必须是String或Buffer基本类型//BeanUtils.copyProperties(user, formbean); } catch (Exception e1) {e1.printStackTrace();}System.out.println((String)user.getUsername()[1]);System.out.println("==========获取数据方式5===========");//实际开发不常用,一般用于文件上传InputStream in = request.getInputStream();int len = 0;byte buffer[] = new byte[1024];while((len=in.read(buffer))>0){System.out.println(new String(buffer,0,len));}}

request常见应用:



通过表单获取客户机数据:

html代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>传数据给requestDemo3</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">      </head>    <body>  <!-- url后面如果跟了中文数据,要编码后再提交 -->    <form action="/day06/servlet/RequestDemo3" 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/>        所在地:    <select name="city">    <option value="beijing">北京</option>    <option value="shanghai">上海</option>    <option value="cs">长沙</option>    </select>    </br>    爱好:    <input type="checkbox" name="likes" value="sing"/>唱歌    <input type="checkbox" name="likes" value="dance"/>跳舞    <input type="checkbox" name="likes" value="basketball"/>篮球    <input type="checkbox" name="likes" value="football"/>足球    </br>    备注:<textarea rows="6" cols="60" name="description"></textarea></br>        大头照:<input type="file" name="image"/></br>        <input type="hidden" name="id" value="12345"/>        <input type="submit" value="提交"/></br>    </form>  </body></html>
Servlet代码:

public class RequestDemo3 extends HttpServlet {public void 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(request.getParameter("city"));String likes[] = request.getParameterValues("likes");for(int i = 0;likes!=null&&i<likes.length;i++){System.out.println(likes[i]);}System.out.println(request.getParameter("description"));System.out.println(request.getParameter("id"));}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
request中文乱码问题:
html代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>中文乱码</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">      </head>    <body>    <form action="/day06/servlet/RequestDemo4" method="post">    用户名:<input type="text" name="username"/></br>    <input type="submit" value="提交"/></br>    </form>        <form action="/day06/servlet/RequestDemo4" method="get">    用户名:<input type="text" name="username"/></br>    <input type="submit" value="提交"/></br>    </form>        <!-- 超链接提交的中文,服务器想不乱码,也只能手工处理,因为超链接也是get提交 -->     <a href="/day06/servlet/RequestDemo4?username=中国">点点</a>  </body></html>

Servlet代码:

public class RequestDemo4 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {test3(request,response);}//测试题private void test3(HttpServletRequest request,HttpServletResponse response)throws IOException {request.setCharacterEncoding("UTF-8");String username = request.getParameter("username");response.setCharacterEncoding("gb2312");response.setHeader("Content-Type", "text/html;charset=gb2312");response.getWriter().write(username);}//解决post提交的乱码private void test2(HttpServletRequest request)throws UnsupportedEncodingException {request.setCharacterEncoding("UTF-8");String username = request.getParameter("username");System.out.println(username);}//解决get提交的乱码(手工处理)private void test1(HttpServletRequest request)throws UnsupportedEncodingException {String username = request.getParameter("username");username = new String(username.getBytes("iso8859-1"),"UTF-8");System.out.println(username);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
request实现请求转发:
Servlet代码:

//请求转发,以及使用request域对象把数据带给转发资源//请求转发的特点://1.客户端只发出一次请求,而服务器端有多个资源调用//2.客户端浏览器地址栏没有变化public class RequestDemo5 extends HttpServlet {//mvc(m model(javabean) v view(jsp) c controller(servlet)) //controller(servlet)收到请求产生数据,使用model(javabean)封装,再把javabean存到request域里面带给view(jsp),有jsp取出数据输出public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String data = "aaaaaa";//不同请求用不同的request域,所以不会覆盖request.setAttribute("data", data);//以前用ServletContext把数据转发到目标页面,但是现在不这样用,以免转发过程中,另一个请求覆盖前一个请求的数据//this.getServletContext().setAttribute("data", data);//request也可以实现转发request.getRequestDispatcher("/message.jsp").forward(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
jsp代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>My JSP 'message.jsp' starting page</title>  </head>    <body>    <!-- 自动从四个域里面找到data并输出,jsp不要出现java代码 -->  ${data }    <%  //和上边jsp代码一样效果  String data = (String)request.getAttribute("data");  out.write(data);   %>  </body></html>
请求转发的细节:

Servlet代码:

//forward的细节,以下代码会抛异常(forward之前,若有内容已经发送到了客户端,则报异常)public class RequestDemo6 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String data = "aaaaaa";PrintWriter writer = response.getWriter();writer.write(data);//数据写到response里writer.close();//关闭流后,则数据真正从response写到客户端if(true){request.getRequestDispatcher("/index.jsp").forward(request, response);//把数据转发到jsp再发送给客户端,也一样属于此异常return;//所以跳转后要return不执行下面转发语句,否则也会报异常}//以下转发会导致:java.lang.IllegalStateException:Cannot forward after response has been committedrequest.getRequestDispatcher("/message.jsp").forward(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}

//forward细节:forward时,会清空response中的数据public class RequestDemo7 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String data = "aaaaaa";response.getWriter().write(data);//forward跳转之前会把response中的数据清空,所以看不到aaaaaarequest.getRequestDispatcher("/index.jsp").forward(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}

request实现页面包含:

head.jsp代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>    head<br/>

foot.jsp代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>   foot<br/>
Servlet代码:
//用include实现页面包含(被包含页面不要出现全局架构标签)public class RequestDemo8 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.getRequestDispatcher("/public/head.jsp").include(request, response);response.getWriter().write("hahahaha<br/>");request.getRequestDispatcher("/public/foot.jsp").include(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}


web工程中各类地址的写法:

Servlet代码:

//web工程中各类地址的写法://所有地址以"/"开头,//若是给服务器用的,"/"就代表当前web应用//若是给浏览器用的,"/"就代表网站public class ServletDemo1 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//1.request.getRequestDispatcher("/form1.html").forward(request, response);//2.response.sendRedirect("/day06/form1.html");//3.this.getServletContext().getRealPath("/form1.html");//4.this.getServletContext().getResourceAsStream("/public/foot.jsp");//5./*   <a href="/day06/form1.html">点点</a> *    <form action="/day06/form1.html">      </form> *///6.response.setHeader("refresh", "3;url='/day06/form1.html'");/*  c:\\硬盘下路径用\\  http://浏览器网址用//*/}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}

利用referer防盗链:
首页index.jsp代码:

<%@ page language="java" import="java.util.*" pageEncoding=UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>My JSP 'index.jsp' starting page</title>  </head>    <body>  <br/>看广告<br/>      <a href="/day06/servlet/RequestDemo9">看凤姐</a>  </body></html>

Servlet代码:

//假设资源链接为http://localhost:8080/day06/servlet/RequsetDemo9//防盗链public class RequestDemo9 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String referer = request.getHeader("referer"); //获取客户机是从哪个资源访问服务器的if(referer==null||!referer.startsWith("http://localhost")){//如果客户机不是从首页访问资源的response.setStatus(302);response.setHeader("Location", "/day06/index.jsp");return;//用return不必用else}response.setCharacterEncoding("UTF-8");response.setHeader("Content-Type", "text/html;charset=UTF-8");String data = "凤姐日记";response.getWriter().write(data);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}