servlet_request方法简单应用小结
2016-09-12 22:09
363 查看
一、请求头信息
方法1:getHeader
//获取请求的头信息的方法
// String value = request.getHeader("User-Agent");
//判断浏览器类型
if(value.toLowerCase().contains("msie"))
System.out.println("你使用的是ie浏览器");
else if(value.toLowerCase().contains("firefox"))
System.out.println("你使用的是火狐浏览器");
else if(value.toLowerCase().contains("chrome"))
System.out.println("你使用的是谷歌浏览器");
方法2:getHeaderNames()
Enumeration enu = request.getHeaderNames();
while(enu.hasMoreElements())
{
String name = (String) enu.nextElement();
String v = request.getHeader(name);
System.out.println(name+":"+v);
}
方法3:getHeaders
//头信息中的name 是可以重复的,这个方法用来得到该名称的所有的值
//Enumeration en = request.getHeaders("accept");
二、消息体(表单基于post方式)
方法1:getParameter与getParameterValues前者获取表单某一个值后者获取多个值,返回一个数组
//告诉服务器客户端使用的编码,以post方式提交表单数据的乱码问题
request.setCharacterEncoding("utf-8");
//得到用户名--表单中的数据默认都是字符串的
String username = request.getParameter("username");
//得到密码
String psw = request.getParameter("pwd");
//得到性别
String sex = request.getParameter("sex");
//得到爱好
String[] hobbys = request.getParameterValues("hobby");
//得到所在城市
String city = request.getParameter("city");
System.out.println(username+" "+psw+" "+sex+" "+city);
for(String ss:hobbys)
{
System.out.print(ss+" ");
}
方法2:getParameterNames()
request.setCharacterEncoding("utf-8");
Enumeration en = request.getParameterNames();//得到所有的name
while(en.hasMoreElements())
{
String name = (String) en.nextElement();//得到一个参数名
//根据名字获取值
String[] values = request.getParameterValues(name);
System.out.print(name);
for(int i=0;values!=null && i<values.length;i++)
{
System.out.print(values[i]+" ");
}
System.out.println();
}
方法3:Map<String,String[]>getParameterMap-->PropertyDescriptor
try {
request.setCharacterEncoding("utf-8");
//getParameterMap的使用
Map<String,String[]> maps = request.getParameterMap();//一次性得到表单上提交过来的所有名称值对儿
User user = new User();
//遍历Map集合
for(Map.Entry<String, String[]> en:maps.entrySet())// username=冬冬
{
String name = en.getKey();//得到键 username
String[] value = en.getValue();//得到值
//属性描述器 getUsername() setUsername()---Method
PropertyDescriptor des = new PropertyDescriptor(name, User.class);
//从属性描述器中得到set方法
Method m = des.getWriteMethod();
//执行 set方法
if(value.length==1)
m.invoke(user, value[0]);
else
m.invoke(user, (Object)value);
}
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
}
//一种同功能比较简单的方式 使用commons-beanutils.jar和commons-logging.jar
try {
request.setCharacterEncoding("utf-8");
User user = new User();
BeanUtils.populate(user, request.getParameterMap());
System.out.println(user);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
方法4:getInputStream()获取表单提交的数据
ServletInputStream in = request.getInputStream();
int len = 0;
byte[] arr = new byte[1024];
while((len = in.read(arr))!=-1)
{
System.out.println(new String(arr,0,len));
System.out.println(URLDecoder.decode(new String(arr,0,len,"utf-8"), "utf-8"));
}
in.close();
三、以get方式提交表单数据的乱码处理---再编码,再解码
//获取用户名
String name = request.getParameter("username");
//再编码
byte[] arr = name.getBytes("ISO8859-1");
//再解码
String ss = new String(arr,"utf-8");
//String ss = fun(name);
System.out.println(ss);
我们也可以将其封装为一个函数
public String fun(String str)
{
String result = "";
try {
result = new String(str.getBytes("ISO8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}
四、请求转发与请求重定向
//请求转发
System.out.println("demo1---我没钱,我招Demo8借");
//request也是一个域对象
request.setAttribute("hello", "java");//ServletContext----域对象
//请求Demo2:带着 request和 response对象转到demo8
request.getRequestDispatcher("/servlet/demo2").forward(request, response);
//不能转到其它应用
//request.getRequestDispatcher("http://www.baidu.com").forward(request, response);
System.out.println("demo1---给你钱");
//请求重定向
response.sendRedirect(request.getContextPath()+"/servlet/demo2");
response.sendRedirect("http://www.baidu.com");
System.out.println("demo1---给你钱");
demo2中请求转发
response.setContentType("text/html;charset=utf-8");
//使用的request和 response对象是 demo7传过来的
String v = (String) request.getAttribute("hello");
System.out.println(v+" ,demo8--我借给你钱");
请求转发 在服务器端执行的 地址栏只显示一个地址 客户端只请求了一次 地址不用写应用名 不能转到其它应用
请求重定向 在客户端执行的 地址栏先后显示2个地址 客户端请求了2次 地址需要写应用名 可以转到其它应用
附1:新建User entity实体类,封装表单属性
private String username;
private String pwd;
private String sex;
private String[] hobby;
private String city;
附2:为方便大家学习,此处贴出html代码
<form action="/request/servlet/demo" method="get">
用户名:<input type="text" name="username"><br/><br/>
密码:<input type="password" name="pwd"><br/><br/>
性别:<input type="radio" name="sex" value="男">男<input type="radio" name="sex" value="女">女<br/><br/>
爱好:
<input type="checkbox" name="hobby" value="吃">吃
<input type="checkbox" name="hobby" value="睡">睡
<input type="checkbox" name="hobby" value="玩">玩<br/><br/>
所在城市:
<select name="city">
<option>--请选择--</option>
<option value="北京">北京</option>
<option value="上海">上海</option>
<option value="深圳">深圳</option><br/><br/>
</select>
<input type="submit" value="注册">
</form>
方法1:getHeader
//获取请求的头信息的方法
// String value = request.getHeader("User-Agent");
//判断浏览器类型
if(value.toLowerCase().contains("msie"))
System.out.println("你使用的是ie浏览器");
else if(value.toLowerCase().contains("firefox"))
System.out.println("你使用的是火狐浏览器");
else if(value.toLowerCase().contains("chrome"))
System.out.println("你使用的是谷歌浏览器");
方法2:getHeaderNames()
Enumeration enu = request.getHeaderNames();
while(enu.hasMoreElements())
{
String name = (String) enu.nextElement();
String v = request.getHeader(name);
System.out.println(name+":"+v);
}
方法3:getHeaders
//头信息中的name 是可以重复的,这个方法用来得到该名称的所有的值
//Enumeration en = request.getHeaders("accept");
二、消息体(表单基于post方式)
方法1:getParameter与getParameterValues前者获取表单某一个值后者获取多个值,返回一个数组
//告诉服务器客户端使用的编码,以post方式提交表单数据的乱码问题
request.setCharacterEncoding("utf-8");
//得到用户名--表单中的数据默认都是字符串的
String username = request.getParameter("username");
//得到密码
String psw = request.getParameter("pwd");
//得到性别
String sex = request.getParameter("sex");
//得到爱好
String[] hobbys = request.getParameterValues("hobby");
//得到所在城市
String city = request.getParameter("city");
System.out.println(username+" "+psw+" "+sex+" "+city);
for(String ss:hobbys)
{
System.out.print(ss+" ");
}
方法2:getParameterNames()
request.setCharacterEncoding("utf-8");
Enumeration en = request.getParameterNames();//得到所有的name
while(en.hasMoreElements())
{
String name = (String) en.nextElement();//得到一个参数名
//根据名字获取值
String[] values = request.getParameterValues(name);
System.out.print(name);
for(int i=0;values!=null && i<values.length;i++)
{
System.out.print(values[i]+" ");
}
System.out.println();
}
方法3:Map<String,String[]>getParameterMap-->PropertyDescriptor
try {
request.setCharacterEncoding("utf-8");
//getParameterMap的使用
Map<String,String[]> maps = request.getParameterMap();//一次性得到表单上提交过来的所有名称值对儿
User user = new User();
//遍历Map集合
for(Map.Entry<String, String[]> en:maps.entrySet())// username=冬冬
{
String name = en.getKey();//得到键 username
String[] value = en.getValue();//得到值
//属性描述器 getUsername() setUsername()---Method
PropertyDescriptor des = new PropertyDescriptor(name, User.class);
//从属性描述器中得到set方法
Method m = des.getWriteMethod();
//执行 set方法
if(value.length==1)
m.invoke(user, value[0]);
else
m.invoke(user, (Object)value);
}
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
}
//一种同功能比较简单的方式 使用commons-beanutils.jar和commons-logging.jar
try {
request.setCharacterEncoding("utf-8");
User user = new User();
BeanUtils.populate(user, request.getParameterMap());
System.out.println(user);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
方法4:getInputStream()获取表单提交的数据
ServletInputStream in = request.getInputStream();
int len = 0;
byte[] arr = new byte[1024];
while((len = in.read(arr))!=-1)
{
System.out.println(new String(arr,0,len));
System.out.println(URLDecoder.decode(new String(arr,0,len,"utf-8"), "utf-8"));
}
in.close();
三、以get方式提交表单数据的乱码处理---再编码,再解码
//获取用户名
String name = request.getParameter("username");
//再编码
byte[] arr = name.getBytes("ISO8859-1");
//再解码
String ss = new String(arr,"utf-8");
//String ss = fun(name);
System.out.println(ss);
我们也可以将其封装为一个函数
public String fun(String str)
{
String result = "";
try {
result = new String(str.getBytes("ISO8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}
四、请求转发与请求重定向
//请求转发
System.out.println("demo1---我没钱,我招Demo8借");
//request也是一个域对象
request.setAttribute("hello", "java");//ServletContext----域对象
//请求Demo2:带着 request和 response对象转到demo8
request.getRequestDispatcher("/servlet/demo2").forward(request, response);
//不能转到其它应用
//request.getRequestDispatcher("http://www.baidu.com").forward(request, response);
System.out.println("demo1---给你钱");
//请求重定向
response.sendRedirect(request.getContextPath()+"/servlet/demo2");
response.sendRedirect("http://www.baidu.com");
System.out.println("demo1---给你钱");
demo2中请求转发
response.setContentType("text/html;charset=utf-8");
//使用的request和 response对象是 demo7传过来的
String v = (String) request.getAttribute("hello");
System.out.println(v+" ,demo8--我借给你钱");
请求转发 在服务器端执行的 地址栏只显示一个地址 客户端只请求了一次 地址不用写应用名 不能转到其它应用
请求重定向 在客户端执行的 地址栏先后显示2个地址 客户端请求了2次 地址需要写应用名 可以转到其它应用
附1:新建User entity实体类,封装表单属性
private String username;
private String pwd;
private String sex;
private String[] hobby;
private String city;
附2:为方便大家学习,此处贴出html代码
<form action="/request/servlet/demo" method="get">
用户名:<input type="text" name="username"><br/><br/>
密码:<input type="password" name="pwd"><br/><br/>
性别:<input type="radio" name="sex" value="男">男<input type="radio" name="sex" value="女">女<br/><br/>
爱好:
<input type="checkbox" name="hobby" value="吃">吃
<input type="checkbox" name="hobby" value="睡">睡
<input type="checkbox" name="hobby" value="玩">玩<br/><br/>
所在城市:
<select name="city">
<option>--请选择--</option>
<option value="北京">北京</option>
<option value="上海">上海</option>
<option value="深圳">深圳</option><br/><br/>
</select>
<input type="submit" value="注册">
</form>
相关文章推荐
- 基于HttpServletRequest 相关常用方法的应用
- HttpServletRequest对象方法的用法小结
- HttpServletRequest常用简单的方法
- HttpServletRequest、request常用方法、request常见应用、请求转发、RequestDispatcher
- HttpServletRequest、request常用方法、request常见应用、请求转发、RequestDispatcher
- HttpServletRequest、request常用方法、request常见应用、请求转发、RequestDispatcher
- Servlet做删除类似的操作的时候,如果需要传递很多参数简单方法request.getHeader("Referer")
- HttpServletRequest、request常用方法、request常见应用、请求转发、RequestDispatcher
- ajax简单实例(js内产生xmlHttpRequest,它和servlet交互返回xml显示在页面)
- 区分HttpServletRequest 中getAttribute() 与 getParameter() 方法
- Liferay 中ActionRequest,RenderRequest 转换为HttpServletRequest 类对象的方法
- 使用HttpWebRequest 的 Post 方法处理简单的WEB service
- HttpServletRequest和HttpServletResponse接口的方法
- 提升windows forms应用速度的几个简单方法
- 一个简单的打印HttpServletRequest头jsp代码例子
- Servlet的Web应用---三种方法获取表单的各种属性(源码)
- Servlet的Web应用---三种方法获取表单的各种属性(源码)
- 提升windows forms应用速度的几个简单方法
- 提升windows forms应用速度的几个简单方法
- JAVA6新特性之---java桌面应用中生成托盘(tray)图标的简单方法