欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Request

程序员文章站 2022-03-13 23:30:26
...

 

获得表单值

protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		//1、获得单个表单值
		String username = request.getParameter("username");
		System.out.println(username);
		String password = request.getParameter("password");
		System.out.println(password);
		//2、获得多个表单的值
		String[] hobbys = request.getParameterValues("hobby");
		for(String hobby:hobbys){
			System.out.println(hobby);
		}
		//3、获得所有的请求参数的名称
		Enumeration<String> parameterNames = request.getParameterNames();
		while(parameterNames.hasMoreElements()){
			System.out.println(parameterNames.nextElement());
		}
		System.out.println("------------------");
		//4、获得所有的参数 参数封装到一个Map<String,String[]>
		Map<String, String[]> parameterMap = request.getParameterMap();
		for(Map.Entry<String, String[]> entry:parameterMap.entrySet()){
			System.out.println(entry.getKey());
			for(String str:entry.getValue()){
				System.out.println(str);
			}
			System.out.println("---------------------------");
		}
		
	}

 

其中需要笔记的是:

1.获得单个表单的值,比如姓名,性别之类,只需要request.getParameter("名字");返回一个String

2.获得多个表单的,比如复选框,比如爱好,有复选框,很多个爱好,那么

Enumeration<String> parameterNames = request.getParameterNames();
		while(parameterNames.hasMoreElements()){
			System.out.println(parameterNames.nextElement());
		}

 

3.获得所有的请求参数,并且封装到map里面

request.getParamaterMap();

返回值是一个Map类型,Map<String, String[]>

比如这里可能就是,爱好对应的足球,篮球,乒乓球,所以后面可能是String[]数组

for(Map.Entry<String, String[]> entry:parameterMap.entrySet()){
			System.out.println(entry.getKey());
			for(String str:entry.getValue()){
				System.out.println(str);
			}
			System.out.println("---------------------------");
		}

上面是它的遍历方式,遍历方式比较特殊

关于转发和重定向的问题

request可以再request域里面存储东西,具体操作是

添加属性:request.setAttribute(“name”,"tom");

将请求转发,从本链接发到另一个地方RequestDispatcher dispatcher = request.getRequestDispatcher("/servlet2");

执行转发的方法:dispatcher.forward(request,response);

这里是将本request和response作为参数传过去,传到servlet2,让那个Servlet去处理。里面存储着这里获得的信息

Servlet2可以读取到这个request的信息.

防盗链操作:

假如有个界面叫做A,里面有个超链接指向B,但是B不希望除了A还有界面可以访问到它。可以用到referer

//对该新闻的来源的进行判断
		String header = request.getHeader("referer");
		if(header!=null&&header.startsWith("http://localhost")){
			//是从我自己的网站跳转过来的 可以看新闻
			response.setContentType("text/html;charset=UTF-8");
			response.getWriter().write("中国确实已经拿到100块金牌....");
		}else{
			response.getWriter().write("你是盗链者,可耻!!");
		}

请求行:

protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		//1、获得请求方式
		String method = request.getMethod();
		System.out.println("method:"+method);
		//2、获得请求的资源相关的内容
		String requestURI = request.getRequestURI();
		StringBuffer requestURL = request.getRequestURL();
		System.out.println("uri:"+requestURI);
		System.out.println("url:"+requestURL);
		//获得web应用的名称
		String contextPath = request.getContextPath();
		System.out.println("web应用:"+contjq
  extPath);
		//地址后的参数的字符串
		String queryString = request.getQueryString();
		System.out.println(queryString);
		//3、获得客户机的信息---获得访问者IP地址
		String remoteAddr = request.getRemoteAddr();
		System.out.println("IP:"+remoteAddr);
	}

 

乱码问题:

1.设置request的编码,只适合post方式,get不行

request.setCharacterEncoding("UTF-8");优点,一行搞定

2.get方式处理,方法,需要找到原因,然后编码解码的方式去解决,示意图

 

 

看到这个图就很简单了,request按照ISO8859-1方Request式解码。

那么我们可以先把王五,用ISO8859-1的方式去编码,然后再选择UTF-8的方式去解码

 

//例如
String name = request.getParamater("name");
//此时是乱码
name = new String(name.getBytes("iso8859-1"),"utf-8");
//先用ISO8859-1编码,后用UTF-8解码

Response:

resonse,的乱码问题,响应的乱码,可以用

response.setContextType("text/html;charset=UTF-8");

当然大多数情况下,是不会用到get的,都是用post方式,所以基本都是用setCharacterEncoding();

BeanUtils:

作用,一个人的信息,通过表单提交,有名字,有性别,有学号,有很多,这样的话我们每一个都获取一下太蛮烦了,所以我们想到能不能把所有的东西放一起。

很简单,前面提到过有一个request.getParamaterMap();

Map<String ,String[]> properties = request.getParamaterMap();

所有的信息都封装在这里了,封装的目的是简单。用到JavaBean,创建一个User

只要满足 map中的key=User的属性

就可以自动封装到实体中

Map<String, String[]> properties = request.getParameterMap();
		User user = new User();
		try {
			BeanUtils.populate(user, properties);
		} catch (IllegalAccessException | InvocationTargetException e) {
			e.printStackTrace();
		}

 

用这种方式,记住,是BeanUtils 的populate方法,如上daima

UUID介绍:

假如说想每次都生成一个不一样的数字,那么就可以用UUID,用法是

UUID.randomUUID().toString();

注意UUID是32位的,但是UUID再java里面,有四个杠!所以java里面是36位的

36位的varchar(),所以varchar不得低于36.否则会出现问题

页面跳转:

如果register界面提交成功,处理了以后也没有问题了,那么就可以跳转到login界面

1.转发:

转发步骤是:RequestDispatcher dispatcher = request.getRequestDispatcher("/servlet2"); //获得转发器,参数是路径

dispatcher.forward(request,response);//将这两个发送出去

转发和重定向的区别是:转发出去的地址是不会变的

另外:如果地址没有变化,就意味着,如果用户想要刷新,则会回到原来的界面。这很影响用户体验,所以建议使用重定向

2.重定向

response.setRedirect(request.getContextPath()+"/login.jsp");

request.getContextPath()可以动态的获取--当前工程的名称!!!!也就是说如果要改名字的话,就不需要在代码里再重新改了。

Request

 

相关标签: JAVAWEB