JSP内置对象--request对象 (setCharacterEncoding("GBK"),getParameter(),getParameterValues(),getParameterNames(),getServletPath(),getContextPath()
使用最多,主要用来接收客户端发送而来的请求信息,他是javax.servlet.http.HttpServletRequest接口的实例化对象。
public interface HttpServletRequest extends ServletRequest
HttpServletRequest是 ServletRequest的子接口,而 ServletRequest只有这一个子接口
既然这样,为什么不能合并成一个接口呢。,长远来看,主要协议是http,如果以后有更多的协议,就直接继承 ServletRequest接口即可。
HttpServletRequest接口定义的方法很多,但是都是围绕接收客户端参数的。
回顾下客户端参数:
request_demo_01.htm:
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<form action="request_demo01.jsp" method="get">
请输入信息:<input type="text" name="info">
<input type="submit" value="提交">
</form>
</body>
</html>
request_demo_01.jsp:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
request.setCharacterEncoding("GBK") ;// 设置的是统一编码
//String content = new // String(request.getParameter("info").getBytes("ISO8859-1")) ;
String content = request.getParameter("info") ;
%>
<h2><%=content%></h2>
</body>
</html>
- 乱码问题(重点)
1. request.setCharacterEncoding("GBK") ;
2. String content = new String(request.getParameter("info").getBytes("ISO8859-1")) ;
如下下面不加request.setCharacterEncoding("GBK")的话,会产生乱码问题。
因为request属于接收客户端的参数,所以必然有其默认的语言编码,浏览器默认UTF-8,而中文是GBK。两种编码不同,所以产生乱码。
要解决乱码问题,就要使用request提供的统一设置编码的方法setCharacterEncoding()
以后,只要进行了传递,则肯定使用这条语句进行乱码解决。
request.setCharacterEncoding("GBK") ;// 设置的是统一编码
String content = request.getParameter("info") ;
如果这种方法不能解决的话,第二种方法:
String content = new String(request.getParameter("info").getBytes("ISO8859-1")) ;
- 传递参数(重点):
1. request.getParameter("参数名字") :返回参数值
2. request.getParameterValues("复选框名字"):用于返回复选框值的数组
3. http://localhost:8080/wly/requestdemo/request_demo03.jsp?name=hello&password=mldn:地址重向
4. getParameterNames().返回所有参数的名字,返回值是Enumeration.
request_demo02.htm:
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<form action="request_demo02.jsp" method="post">
姓名: <input type="text" name="uname"><br>
兴趣: <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="checkbox" name="inst" value="旅游">旅游
<br><input type="hidden" name="id" value="3">
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
</body>
</html>
request_demo02.jsp:
注意下面inst接收方式,还有!=null的判断
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
request.setCharacterEncoding("GBK") ;// 设置的是统一编码
String id = request.getParameter("id") ;
String name = request.getParameter("uname") ;
String inst[] = request.getParameterValues("inst") ;
%>
<h3>编号:<%=id%></h3>
<h3>姓名:<%=name%></h3>
<h3>兴趣:
<%
if(inst != null) {
for(int x=0;x<inst.length;x++){
%>
<%=inst[x]%>、
<%
}
}
%>
</h3>
</body>
</html>
结果:
需要注意的是,参数是表单传递过来的,也就是说传递文本,密码,单选,复选,可以还有一种参数传递的方法,叫做地址重写。
例子: request_demo03.jsp:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
request.setCharacterEncoding("GBK") ;// 设置的是统一编码
String param1 = request.getParameter("name") ;
String param2 = request.getParameter("password") ;
%>
<h3>姓名:<%=param1%></h3>
<h3>密码:<%=param2%></h3>
</body>
</html>
在运行的时候,必定为null,地址重写需要在地址栏输入以下内容;
http://localhost:8080/wly/requestdemo/request_demo03.jsp?name=hello&password=mldn
结果可以写入:
学习表单的时候,知道有两种提交形式,get,post,区别:
- post提交,提交后的地址栏不会附加目标地址的其他内容,是只能用在表单的一种提交形式
- get提交:提交后的地址栏会改变,而且使用地址重写的方式完成。既然所有的内容都要显示,则传递时,受到地址栏长度的限制。
在request中有个很重要的方法:getParameterNames().返回所有参数的名字。
request_demo04.htm;
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<form action="request_demo04.jsp" method="post">
姓名: <input type="text" name="uname"><br>
性别: <input type="radio" name="sex" value="男" CHECKED>男
<input type="radio" name="sex" value="女">女<br>
城市: <select name="city">
<option value="北京">北京</option>
<option value="天津">天津</option>
<option value="洛阳">洛阳</option>
</select><br>
兴趣: <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="checkbox" name="**inst" value="旅游">旅游<br>
自我介绍:<textarea cols="30" rows="3" name="note"></textarea><br>
<input type="hidden" name="uid" value="1">
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
</body>
</html>
request_demo04.jsp:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
request.setCharacterEncoding("GBK") ;// 设置的是统一编码
Enumeration enu = request.getParameterNames() ;
%>
<table border="1">
<tr>
<td>参数名称</td>
<td>参数内容</td>
</tr>
<%
while(enu.hasMoreElements()){
String paramName = (String) enu.nextElement() ;
%>
<tr>
<td><%=paramName%></td>
<td>
<%
if(paramName.startsWith("**")){ // 是以**开头
String paramValue[] = request.getParameterValues(paramName) ;
for(int x=0;x<paramValue.length;x++){
%>
<%=paramValue[x]%>、
<%
}
} else {
String paramValue = request.getParameter(paramName) ;
%>
<%=paramValue%>
<%
}
%>
</td>
</tr>
<%
}
%>
</table>
</body>
</html>
普通接收参数:String paramValue = request.getParameter(paramName) ;
复选框接收参数:String paramValue[] = request.getParameterValues(paramName)
此类操作一般都是在表单不确定的时候使用,比如购物车的设计。
- 显示头信息(理解)
要取得头信息的名称通过request的getHeaderNames(),要取出每个头信息的内容,需要使用getHeader()方法
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
Enumeration enu = request.getHeaderNames() ; // 取得全部的头信息
while(enu.hasMoreElements()){
String headerName = (String) enu.nextElement() ;
String headerValue = request.getHeader(headerName) ;
%>
<h5><%=headerName%> --> <%=headerValue%></h5>
<%
}
%>
</table>
</body>
</html>
运行结果:
host --> localhost:8080 connection --> keep-alive accept --> text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 upgrade-insecure-requests --> 1 user-agent --> Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36 referer --> http://localhost:8080/wly/requestdemo/ accept-encoding --> gzip, deflate, sdch accept-language --> zh-CN,zh;q=0.8 cookie --> JSESSIONID=7E97BB870F530DA079659225E1C4D6FC
理解即可,很少操作头信息的。
- 角色验证(理解)
Tomcat安装时曾经设置过一个用户名和密码都是admin,那个登录验证框可以通过程序实现:isUserInRole(),相当于在tomcat新增用户,如果要增加用户,使用修改配置文件tomcat\conf\tomcat-users.xml即可。
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="manager"/>
<role rolename="admin"/>
<role rolename="mldnuser"/> //此语句是服务器重启后,自动生成的。
<user username="lixinghua" password="mldnjava" roles="admin"/>
<user username="admin" password="admin" roles="admin,manager"/>
<user username="mldn" password="mldn" roles="mldnuser"/>
</tomcat-users>
还要改web.xml:
<security-constraint>
<web-resource-collection>
<web-resouce-name>RegisteredUsers </web-resouce-name>
<url-pattern>/requestdemo/security.jsp
</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>mldnuser</role-name>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Registered Users</realm-name>
</login-config>
<security-role>
<role-name>mldnuser</role-name>
</security-role>
<security-role>
<role-name>admin</role-name>
</security-role>
下面编写角色验证代码:
security.jsp:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
if(request.isUserInRole("admin")){
%>
<h2>欢迎光临!</h2>
<%
}
%>
</table>
</body>
</html>
- 其他方法(重点):
1.request.getMethod():返回值String, 得到提交方式(post,get)
2.request.getRemoteAddr():返回值String,得到localhost
3. request.getServletPath():返回值String,得到访问路径
4. request.getContextPath():返回值String,得到上下文路径,最重要!!!
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%
String method = request.getMethod() ;
String ip = request.getRemoteAddr() ;
String path = request.getServletPath() ;
String contextPath = request.getContextPath() ;
%>
<h3>请求方式:<%=method%></h3>
<h3>IP地址:<%=ip%></h3>
<h3>访问路径:<%=path%></h3>
<h3>上下文名称:<%=contextPath%></h3>
</table>
</body>
</html>
结果:
注意:直接输入地址属于get提交!!!
对于request中的getContextPath()方法时非常重要的操作,以后可以通过它,解决路径跳转问题。解决
src=../image/1024.jpg问题
other.jsp:
<%@ page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.util.*"%>
<html>
<head><title>www.mldnjava.cn,MLDN高端Java培训</title></head>
<body>
<%=request.getContextPath()%>/images/1024.jpg
<img src="<%=request.getContextPath()%>/images/1024.jpg">
</body>
</html>
- 总结:
1. request对象的主要功能是用于接收用户发来的请求信息
2. 接收参数的方法:getParameter(),getParameterValues(), getParameterNames(0
3. 取得客户端IP地址可以使用getRemoteAddr()
4. 取得上下文名称可以使用getContextPath()
5. 头信息指的是附加在请求上一起发送到服务器上的内容
- getAttribute()和getParameter()区别
getAttribute()使用前提:有setAttribute()
getParameter()使用前提:
1. 表单提交
2. 地址重写
3. <jsp:include>, <jsp:forward>传递来的
JSP内置对象--request对象 (setCharacterEncoding("GBK"),getParameter(),getParameterValues(),getParameterNames(),getServletPath(),getContextPath()的更多相关文章
- JSP内置九个对象Request请求对象
jsp内置对象是什么呢? 例如Java语言使用一个对象之前需要实例化(也就是所说的new一个对象),创建对象这个过程有点麻烦,所以在jsp中提供了一些内置对象,用来实现很多jsp应用.在使用内置对象时 ...
- JSP内置对象——out对象/request对象
在这个科技高速发展的时代,迫使我们的脚步一刻都不能停下. 在这个for循环语句当中,我们可以直接使用jsp内置对象中的out对象来给浏览器打印输出,那么这个out对象就是一个内置对象, 在这里,我们使 ...
- JSP内置对象-request
JSP内置对象即无需声明就可以直接使用的对象实例,在实际的开发过程中,比较常用的JSP对象有request,response,session,out和application等,笔者在本文章中将简单介绍 ...
- JavaWeb——JSP内置对象request,response,重定向与转发 学习总结
什么是JSP内置对象 九大内置对象 requestJSP内置对象 request对象常用方法 request练习 responseJSP内置对象 response练习 response与request ...
- JSP内置对象--request对象
本文主要介绍JSP中的request对象 request对象的主要方法: setAttribute(String name,Object):设置名字为name的request的参数值 getAttri ...
- JSP内置对象——request对象
request对象request对象封装了由客户端生成的HTTP请求的所有细节,主要包括HTTP头信息.系统信息.请求方式和请求参数等. 通过request对象提供的各种方法可以处理客户端浏览器提交的 ...
- JavaWeb学习----JSP内置对象详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- JSP内置对象详解
jsp中内置对象:request.response.session.applecation.out.pagecontesx.config.page.exception.cookie 1.request ...
- Java遇见HTML——JSP篇之JSP内置对象(上)
一.JSP内置对象简介 1.1.内置对象简介 JSP内置对象是WEB容器中创建的一组对象,可以直接使用不需要new,如截图中的out 对象. JSP有九大内置对象: 五大常用对象: out.reque ...
随机推荐
- 转:详解JMeter正则表达式(2)
例如, 引用名称:MYREF. 正则表达式:name="(.+?)" value="(.+?)". 模板:$1$$2$. 不要用/ /封装正则表达式. 如下变量 ...
- z-index研究
文章来源: http://www.neoease.com/css-z-index-property-and-layering-tree/ 总结: 1.z-index只有在设置position:rela ...
- Hoffmann树
数据压缩编码 先把两棵二叉树简化成叶子结点带权的二叉树,图的每个结点之间带有权值 结点的路径长度: 从根结点到该结点的路径上的连接数. 树的路径长度: 树中每个叶子结点的路径长度之和. 结点带权路径长 ...
- ubuntu安装docker
uname -r #查看内核版本要大于3.10apt-get updateapt-get install linux-image-generic-lts-trusty wget -qO- https: ...
- php 积少成多!
- inno setup 安装个界面提示信息修改
对于inno setup打包的安装文件,各界面中的提示信息可以在安装编译脚本 xxx.iss 中的 [Messages] 段设置,如果不知道要设置的信息的变量名,可以到 inno setup的安装目录 ...
- 统计英文文章中各单词的频率,打印频率最高的十个单词(C语言实现)
一.程序思路及相关代码 首先打开文件,代码如下 FILE *fp; char fname[10]; printf("请输入要分析的文件名:\n"); scanf("%s ...
- Openjudge-计算概论(A)-求满足条件的3位数
描述: 编写程序,按从小到大的顺序寻找同时符合条件1和2的所有3位数,条件为: 1.该数为完全平方数 2.该数至少有2位数字相同 例如,100同时满足上面两个条件. 输入输入一个数n,n的大小不超过实 ...
- 工具类 Util.Browser
/** * @description get the param form browser * @author xf.radish * @param {String} key the param yo ...
- PHP class which generates PDF files from UTF-8 encoded HTML
http://www.mpdf1.com/mpdf/index.php