JAVAEE——request对象(三)

这篇具有很好参考价值的文章主要介绍了JAVAEE——request对象(三)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. request对象

1.1 知识点

(1)乱码问题的两种解决方式

(2)post和get提交的区别

(3)request接收同名参数的问题

1.2 具体内容

  ·使用request接收参数

<%@page contentType="text/html; charset=utf-8"%>
<form action="requestDemo02.jsp" method="post">
	输入姓名:<input type="text" name="name">
	输入公司:<input type="text" name="cname">
	<input type="submit" value="提交">
</form>
<%@page contentType="text/html; charset=utf-8"%>
<h1>姓名:<%=request.getParameter("name") %></h1>
<h1>公司名称:<%=request.getParameter("cname") %></h1>

  运行完代码发现,页面上本身的中文不会乱码,而传递过来的中文参数,无法显示,非中文则正常显示。意思就是说使用request去接收参数的过程会产生乱码。

分析乱码产生的原因:

         在这个web执行的流程中,是先从服务器上去取得requestDemo01.jsp,之后通过页面把表单进行提交,提交给服务器(tomcat),之后requestDemo02.jsp也发送一个请求,服务再讲内容返回给requestDemo02.jsp.我们现在页面的编码是utf-8,而服务器的编码是ISO8859-1,就等于说一个只懂中文的人和一个只懂英文的人对话,那么肯定是无法沟通。为了解决这个乱码问题,需要将字符串重新的变成byte数组,再讲byte数组转换成字符串。

<%@page contentType="text/html; charset=utf-8"%>
<%
	String name = request.getParameter("name");
	String cname = request.getParameter("cname");
	byte bName[] = name.getBytes("ISO8859-1");//让服务器认识你
	name = new String(bName);
	
	byte bCname[] = cname.getBytes("ISO8859-1");
	cname = new String(bCname);
	
 %>

<h1>姓名:<%=name %></h1>
<h1>公司名称:<%=cname%></h1>

通过转换之后发现还是乱码。因为浏览器只认识utf-8。

<%@page contentType="text/html; charset=utf-8"%>
<%
	String name = request.getParameter("name");
	String cname = request.getParameter("cname");
	byte bName[] = name.getBytes("ISO8859-1");//让服务器认识你
	name = new String(bName,"utf-8");//再次转换成浏览器能认识的编码
	
	byte bCname[] = cname.getBytes("ISO8859-1");
	cname = new String(bCname,"utf-8");
	
 %>

<h1>姓名:<%=name %></h1>
<h1>公司名称:<%=cname%></h1>

代码运行完观察发现可以正常显示,但是这种转换非常麻烦,最好的做法就是设置统一编码,之后的参数就按照这个统一的编码进行接收。如果说想要完成这个操作,必须使用HttpServletRequest中的一个方法:

void setCharacterEncoding(java.lang.String env) throws java.io.UnsupportedEncodingException

而且我们知道request对象就是HttpServletRequest这个接口的对象。

<%@page contentType="text/html; charset=utf-8"%>
<%
	request.setCharacterEncoding("utf-8");//设置统一编码
	String name = request.getParameter("name");
	String cname = request.getParameter("cname");
 %>

<h1>姓名:<%=name %></h1>
<h1>公司名称:<%=cname%></h1>

发现设置统一编码之后,就可以解决乱码问题,那么现在有两种乱码问题的解决方式,但是在开发中到底使用哪一种呢?肯定是使用第二种最方便,但是要说的是,两种方法如果其中的一种不能解决乱码问题,那么另外一种肯定是可以解决的。但是我们还是要说,使用第二种方式是最方便的。

·get和post提交

         对于表单的提交存在两种方式,就get和post提交。

         ·使用get提交

JAVAEE——request对象(三),JavaEE,java-ee

·使用post提交:

JAVAEE——request对象(三),JavaEE,java-ee

从页面可以发现,使用get提交的话,地址栏会显示所有提交的信息,证明使用get方式提交传递的参数会全部在地址栏中显示,而是用post提交则不会在地址栏中显示提交的参数内容。

         ·get:

                   |·会在地址栏显示提交的内容、

                   |·如果不希望用户看到提交的内容,最好不使用get提交(get不安全)

                   |·地址栏最多可以放4-5K的内容,如果提交的内容过多,则肯定无法正常提交

         ·post:

                   |·地址栏不会显示提交内容

                   |·安全

                   |·本身并不受长度的显示,理论上是可以提交任意的长度,当然如果确实提交内容太大的话,肯定会超出http的超时限制。

综合起来比较,使用post提交会更好,但是使用get提交也有一个好处,如下:

·URL重写(地址栏重写)

         我们除了使用表单传递参数之外,还可以使用地址栏重写的方式进行参数的传递。

http://localhost:8080/JspDemo01/request/requestDemo02.jsp?name=zby&cname=jjm

当然也可以通过a标签的形式,传递参数。

<a href="requestDemo02.jsp?name=zby&cname=jjm">跳转</a>

·隐藏域传递参数:我们在开发的时候,对于一些数据增删改,一般都会通过ID值进行,但是ID肯定不会显示在页面上,但是对于这些操作我们又需要ID,就是比如在修改的时候肯定会把ID作为一个参数进行传递,那么这个怎么去传递ID呢?

<%@page contentType="text/html; charset=utf-8"%>
<form action="requestDemo02.jsp" method="post">
	输入姓名:<input type="text" name="name">
	输入公司:<input type="text" name="cname">
	<input type="hidden" name="id" value="10">--》隐藏域
	<input type="submit" value="提交">
</form>

<a href="requestDemo02.jsp?name=zby&cname=jjm">跳转</a>
<%@page contentType="text/html; charset=utf-8"%>
<%
	request.setCharacterEncoding("utf-8");//设置统一编码
	String name = request.getParameter("name");
	String cname = request.getParameter("cname");
 %>

<h1>姓名:<%=name %></h1>
<h1>公司名称:<%=cname%></h1>
<h1><%=request.getParameter("id") %></h1>

·接收多个同名参数

<%@page contentType="text/html; charset=utf-8"%>
<form action="requestDemo02.jsp" method="post">
	输入姓名:<input type="text" name="name">
	输入公司:<input type="text" name="cname">
	<input type="hidden" name="id" value="10">
	兴趣:
	<input type="checkBox" name="inst" value="游泳"/>游泳
	<input type="checkBox" name="inst" value="唱歌"/>唱歌
	<input type="checkBox" name="inst" value="跳舞"/>跳舞
	<input type="checkBox" name="inst" value="打球"/>打球
	<input type="submit" value="提交">
</form>

<a href="requestDemo02.jsp?name=zby&cname=jjm">跳转</a>

对于这个兴趣的参数,怎么去接收呢?发现使用普通的参数接收,只能接收一个值,因为这个getParameter()这个方法只能接收一个值,这个时候如果想接收多个同名参数的话,我们可以先来观察API,可以发现有一个方法:

java.lang.String[] getParameterValues(java.lang.String name)

意思就是说可以根据参数的名称取得一个参数内容的字符串数组。

<%@page contentType="text/html; charset=utf-8"%>
<%
	request.setCharacterEncoding("utf-8");//设置统一编码
	String name = request.getParameter("name");
	String cname = request.getParameter("cname");
	String inst[] = request.getParameterValues("inst");
 %>

<h1>姓名:<%=name %></h1>
<h1>公司名称:<%=cname%></h1>
<h1><%=request.getParameter("id") %></h1>
<h1>兴趣:
<%
	for(int i = 0;i<inst.length ;i++){
%>
	<%=inst[i] %>、
<%
	}
%>
</h1>

通过运行结果发现,复选框的内容就已经全部的提交过来了,这个操作就是叫做接收同名参数,当然我们也可以通过方法取得参数的名称:

·取得参数名称

java.util.Enumeration<java.lang.String> getParameterNames()

此方法就表示取得参数名称,但是发现此方法返回的是一个枚举对象。

<%@page contentType="text/html; charset=utf-8"%>
<%@page import="java.util.*" %>
<%
	request.setCharacterEncoding("utf-8");//设置统一编码
	//取得参数名
	Enumeration<String> en = request.getParameterNames();
	
 %>
<h1>参数名称:
<%
	while(en.hasMoreElements()){
%>
	<%=en.nextElement()%>、
<%
	}
%>
</h1>

 以上呢我们已经知道了取得参数的名称,如果想要取得参数值的话,就可以继续使用getParameter()这个方法完成。

<%@page contentType="text/html; charset=utf-8"%>
<%@page import="java.util.*" %>
<%
	request.setCharacterEncoding("utf-8");//设置统一编码
	//取得参数名
	Enumeration<String> en = request.getParameterNames();
	
 %>
<h1>参数名称:
<%
	while(en.hasMoreElements()){
		String paramsName = en.nextElement();
%>
	<%=paramsName%>=<%=request.getParameter(paramsName) %>、
<%
	}
%>
</h1>

以上虽然将内容提取出来了,但是发现,复选框的值还是只有一个,是不是意味着可以放弃getParameterNames()这个方法呢?肯定是不可以的,这个方法有一个好处,就是不管我们的表单如何变化,我都能取得参数的名称,但是对于同名的参数又是一个问题。这个时候我们可以在参数名称上做手脚。

<%@page contentType="text/html; charset=utf-8"%>
<form action="requestDemo02.jsp" method="post">
	输入姓名:<input type="text" name="name" value="mlz">
	输入公司:<input type="text" name="cname" value="zhilian">
	<input type="hidden" name="id" value="10">
	兴趣:
	<input type="checkBox" name="**inst" value="游泳"/>游泳
	<input type="checkBox" name="**inst" value="唱歌"/>唱歌
	<input type="checkBox" name="**inst" value="跳舞"/>跳舞
	<input type="checkBox" name="**inst" value="打球"/>打球
	<input type="submit" value="提交">
</form>

<a href="requestDemo02.jsp?name=zby&cname=jjm">跳转</a>
<%@page contentType="text/html; charset=utf-8"%>
<%@page import="java.util.*" %>
<%
	request.setCharacterEncoding("utf-8");//设置统一编码
	//取得参数名
	Enumeration<String> en = request.getParameterNames();
	
 %>
<h1>参数名称:
<%
	while(en.hasMoreElements()){
		String paramsName = en.nextElement();
		%>
			<%=paramsName%>=
		<%
		if(paramsName.startsWith("**")){
			String values[] = request.getParameterValues(paramsName);
			for(int i = 0;i<values.length;i++){
%>
				<%=values[i] %>|
<%
			}
		
		}else{
%>
	<%=request.getParameter(paramsName) %>、
<%
		}
	}
%>
</h1>

以上就是对于参数接收的全部内容,还有一个就是去的客户端IP

·去的客户端IP:很多投票程序发现,如果这台机器投过票了,就不能再投,其实就是在投票是记录了这个客户端IP,那么怎么去的客户端的IP呢?

java.lang.String getRemoteAddr()

使用以上的方法就可以去的客户端IP。

<h1><%=request.getRemoteAddr() %></h1>

 1.3 小结

(1)学会使用request对象接收参数和参数名称。

(2)学会处理乱码问题(两种方式)。

(3)要掌握get和post方式提交的区别。

(4)对于取得客户端的IP在以后开发类似投票程序的时候能够用上。文章来源地址https://www.toymoban.com/news/detail-796164.html

到了这里,关于JAVAEE——request对象(三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【JavaEE进阶】 Spring使用注解存储对象

    在博主前面所写的《【JavaEE进阶】 Spring 的创建和使⽤》中我们已经可以实现基本的 Spring 读取和存储对象的操作了,但在操作的过程中我们发现读取和存储对象并没有想象中的那么“简单”,所以接下来我们要学习更加简单的操作 Bean 对象的⽅法。 在 Spring 中想要更简单的存

    2024年02月05日
    浏览(44)
  • 学习JavaEE的日子 day11 初识面相对象

    1.1 类和对象的理解 类 * 类是对象的数据类型,类是具有相同属性和行为的一组对象的集合 * 简单理解:类就是对现实事物的一种描述 类的组成 * 属性:指事物的特征,例如:手机事物(品牌,价格,尺寸) * 行为:指事物能执行的操作,例如:手机事物(打电话,发短信)

    2024年01月17日
    浏览(41)
  • 【JavaEE进阶】Spring 更简单的读取和存储对象

    配置扫描路径是使用注解之前的前置工作,是非常重要的,是必须的操作项.只有被配置的包下的所有类,添加了注解才能被正确的识别并保存到 Spring 中. 首先创建一个Spring项目.创建好后,第一步就是配置扫描路径:在 resources 目录中创建一个 spring-config.xml 文件.然后在 spring-config.

    2024年02月12日
    浏览(45)
  • javaee jsp页面 九大内置对象和四大作用域

    九大内置对象四大域 一、四大域 域对象的作用:保存数据,获取数据,共享数据 作用域从小到大为:PageContext(jsp页面),ServletRequest(一次请求),HttpSession(一次会话),ServletContext(整个web应用)。 第一个作用域是page,他只在当前页面有效,也就是用户请求的页面有效,当

    2024年02月16日
    浏览(34)
  • 【JavaEE】Spring中注解的方式去获取Bean对象

    【JavaEE】Spring的开发要点总结(3) 在前面的代码里,我们获取Bean对象也比较麻烦: 本文章就是为了更方便地去获取Bean对象~ 对象装配 也叫 对象注入 那么有没有对应的注解去实现这个功能呢? Spring提供的三种实现方法: 属性注入 构造方法注入 Setter注入 而这种非明文获取

    2024年02月15日
    浏览(40)
  • JavaEE 突击 5 - Spring 更简单的读取和存储对象(2)

    大家新年快乐 , 祝大家新的一年如图 这个专栏给大家介绍一下 Java 家族的核心产品 - SSM 框架 JavaEE 进阶专栏 Java 语言能走到现在 , 仍然屹立不衰的原因 , 有一部分就是因为 SSM 框架的存在 接下来 , 博主会带大家了解一下 Spring、Spring Boot、Spring MVC、MyBatis 相关知识点 并且带领

    2024年02月19日
    浏览(53)
  • 创建javaEE项目(无maven),JSP(九大内置对象)、Servlet(生命周期)了解

    1.创建一个普通的java项目 2.项目根目录右键,添加模板 3.配置tomcat服务器 4.配置项目tomcat依赖         用户通过浏览器发送一个请求,服务器tomcat接收到后,解析web.xml配置文件进行分析执行接口对应的类;         Tomcat服务器支持:支持Servlet规范。而要想让它能找到

    2024年02月05日
    浏览(51)
  • 板块一 Servlet编程:第六节 HttpSession对象全解 来自【汤米尼克的JAVAEE全套教程专栏】

    在上一节中,我们学习了Servlet五大对象里的第三个Cookie对象,但Cookie是有大小限制和数量限制的,并且越来越多的Cookie代表客户端和服务器的传输量增加,可不可以每次传的时候不传所有Cookie值,而只传一个唯一ID,通过这个ID直接在服务器查找用户信息呢?答案是有的,这

    2024年02月21日
    浏览(46)
  • 【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取

    Spring的开发要点总结 Spring的初步了解博客:【JavaEE】JavaEE进阶:框架的学习 - Spring的初步认识_s:103的博客-CSDN博客 就不带大家回顾了~ 从框架获取的对象称为获取【Bean对象】! Java是咖啡,Bean就是\\\"咖啡豆\\\",也就是“对象” Spring项目开发就是 开业 , 放咖啡豆到罐子里 , 后

    2024年02月16日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包