servlet web之httpservletrequest

目录

 

request的常用方法

request获取请求头和请求数据

获取用户数据 

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

请求转发,以及使用request域对象把数据带给转发资源

用include实现页面包含  

web工程中各地址的写法 

 request实现防盗链


request的常用方法

package cn.cast.request;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


//request的常用方法  可以用来控制访问权限  ,根据用户访问资源的位置来控制 或者用来统计客户访问资源的次数 
public class RequestDemo1 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println(request.getRequestURI());
		///web1/servlet/RequestDemo1
		
		System.out.println(request.getRequestURL());
		//http://localhost:8080/web1/servlet/RequestDemo1
		
		//获取客户机请求的查询字符串 
		//http://localhost:8080/web1/servlet/RequestDemo1?name=xxx
		//获得 name=xxx
		System.out.println(request.getQueryString());
		//获取客户机ip
		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);
	}

}

控制台:

/web1/servlet/RequestDemo1
http://localhost:8080/web1/servlet/RequestDemo1
name=xxx
127.0.0.1
127.0.0.1
24153
GET

request获取请求头和请求数据

html

<!DOCTYPE html>
<html>
  <head>
    <title>test.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>
    <a href="/web1/servlet/RequestDemo2?username=xxx">aaaa </a>
    <form action="/web1/servlet/RequestDemo2" method="post">
    	用户名<input type="text" name="username"><hr>
    	密码<input type="password" name="passwd"><hr>
    	<input type="submit" value="提交">
    
    </form>
    
  </body>
</html>
package cn.cast.request;

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.lang.reflect.InvocationTargetException;
import java.util.Enumeration;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.BeanUtils;




import cn.cast.User;


//获取请求头和请求数据 
//获取请求数据的时候一般来说都要先检查再使用 
public class RequestDemo2 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		//获取数据方式1
		String u1 = request.getParameter("username");
		if (u1!=null && u1.trim().equals(null)){
			System.out.println(u1);
		}
		
		//获取数据方式2
		Enumeration e= request.getParameterNames();
		while (e.hasMoreElements()){
			String name = (String) e.nextElement();
			String value = request.getParameter(name);
			System.out.println(name+ "=" + value);
		}
		
		//获取数据方式3
		//获取一个字段的多个值 
		String value[] = request.getParameterValues("username");
		for (int i=0 ;value != null && i<value.length;i++){
			System.out.println(value[i]);
		}
		 
		//获取数据方式4
		//将map集合封装到对象 commons-beanutils-1.8.0.jarcommons-logging-1.0.4.jar
		Map map = request.getParameterMap();
		//Map<String, String[]> map = request.getParameterMap();
		User user = new User();
		try {
			BeanUtils.populate(user, map);   //用map集合中的数据填充bean
		} catch (IllegalAccessException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (InvocationTargetException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		System.out.println(user);
		
		//获取数据方式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));
		}
		
		
		
		
		
	}
	private void test1(HttpServletRequest request) { 
		String ae = request.getHeader("Accept-Encoding");
		System.out.println(ae);
		//gzip, deflate
		//假设请求头包含多个值 
		Enumeration em = request.getHeaders("Accept-Encoding");
		while(em.hasMoreElements()){
			String value = (String) em.nextElement();
			System.out.println(value);
		}
		//得到所有请求头的名称
		Enumeration e = request.getHeaderNames();
		while (e.hasMoreElements()){
			String key = (String) e.nextElement();
			String value = request.getHeader(key);
			System.out.println(key + ":" + value);
		}
		
		
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}

访问:http://localhost:8080/web1/test.html

获取用户数据 

html表单

<!DOCTYPE html>
<html>
  <head>
    <title>test.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>
    <a href="/web1/servlet/RequestDemo3?username=mm">aaaa </a>
    <form action="/web1/servlet/RequestDemo3" method="post">
    	用户名:<input type="text" name="username"><hr>
    	密码:<input type="password" name="passwd"><hr>
    	性别:
    	<input type="radio" name="gender" value="male">男
    	<input type="radio" name="gender" value="femal">女<hr>
    	所在地:
    	<select name="city">
    	<option value="beijing">北京</option>
    	<option value="shanghai">上海</option>
    	<option value="changsha">长沙</option>
    	</select>
    	爱好:
    	<input type="checkbox" name="likes" value="sing">唱歌
    	<input type="checkbox" name="likes" value="dance">跳舞
    	<input type="checkbox" name="likes" value="draw">绘画
    	<input type="checkbox" name="likes" value="run">跑步<br/>
    	简介:<textarea rows="6" cols="60" name="description"></textarea><hr/>
    	
    	照片:<input type="file" name="image"><br/>
    	
    	<input type="hidden" name="id", value="123456"><br>
    	<input type="submit" value="提交">
    
    </form>
    
  </body>
</html>
package cn.cast.request;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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("passwd"));
		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(request.getParameter(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.setCharacterEncoding("UTF-8");设置request的查询码表

package cn.cast.request;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RequestDemo4 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//request.setCharacterEncoding("UTF-8");   //只对post请求有效 
		
		test1(request);
		
		
	}
	//post请求中文乱码的解决方案 
	private void test2(HttpServletRequest request)
			throws UnsupportedEncodingException {
		request.setCharacterEncoding("UTF-8");   //只对post请求有效 
		System.out.println(request.getParameter("username"));
		System.out.println(request.getParameter("passwd"));
	}

	//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(request.getParameter(username));
	}


	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request, response);
	}

}

请求转发,以及使用request域对象把数据带给转发资源

由requestDemo5将数据传输到message.jsp

message.jsp

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'message.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
   <%
    String data1 = (String)request.getAttribute("data");
    out.write(data1);
    %>
  </body>
</html>
package cn.cast.request;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


//请求转发,以及使用request域对象把数据带给转发资源 

// mvc (model javabean   v  view jsp     c controller servlet)
public class RequestDemo5 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		 String data = "aaa";
		 
		 //getServletContext() 多个程序访问时数据会发生改变 不安全 
		 //this.getServletContext().setAttribute("data", data);
		 //每个请求都会产生一个request对象 ,通过request传送数据是安全的 
		 request.setAttribute("data", data);
		 //request也可以实现转发 
		 request.getRequestDispatcher("/message.jsp").forward(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request, response);
	}

}

package cn.cast.request;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RequestDemo6 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		 String data = "aaa";
		 PrintWriter  writer = response.getWriter();
		 writer.write(data);
		 writer.close();
		 request.setAttribute("data", data);
		 //以下跳转将发生异常 
		 request.getRequestDispatcher("/message.jsp").forward(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request, response);
	}

}

程序将抛出异常 

java.lang.IllegalStateException: Cannot forward after response has been committed

用include实现页面包含  

package cn.cast.request;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


//用include实现页面包含  
import sun.reflect.ReflectionFactory.GetReflectionFactoryAction;


//用于在在当前页面包含公共页面 
public class RequestDemo7 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		 request.getRequestDispatcher("/public/head.jsp").include(request, response);
		 response.getWriter().write("haha");
		 request.getRequestDispatcher("/public/foot.jsp").include(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request, response);
	}

}

web工程中各地址的写法 

package cn.cast.request;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


//地址的写法 
import sun.reflect.ReflectionFactory.GetReflectionFactoryAction;


public class RequestDemo7 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//1
		request.getRequestDispatcher("/form.html").forward(request, response);
		//2
		response.sendRedirect("/web1/form.html");
		//3
		this.getServletContext().getRealPath("/form.html");
		//4
		this.getServletContext().getResourceAsStream("/public/");
		
		//5
		//<a href="/web1/...">bbb</a>
		//<form action="/web1/..." method=""></form>
		
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request, response);
	}

}

 request实现防盗链

package cn.cast.request;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RequestDemo8 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.sendRedirect("/web1/index.jsp");  //重定向到首页 
			return;  //如果这行地区爱吗执行 后面的代码就不执行 
		}
		String data ="aaa";
		response.getWriter().write(data);
		
	}


	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request, response);
	}

}

猜你喜欢

转载自blog.csdn.net/qq_38125626/article/details/83340216