Web开发之request
request常用方法
//常用方法
//得到的是:协议+服务器地址+端口号+工程名称+资源地址+参数
String url = request.getRequestURL();
//得到的是:工程名称+资源地址
String uri = request.getRequestURI();
//得到的是:工程名称
String contextpath = request.getContextPath();
//得到的是:服务器的IP地址
String encoding = request.getCharacterEncoding();
//得到的是:服务器的端口号
int localport = request.getLocalPort();
//得到的是:客户端的ip
String remoteIp = request.getRemoteAddr();
//得到的是:客户端的端口号(随机的)
String remotePort = request.getRemotePort();
//请求参数
String query = request.getQueryString();
//请求方式
String method = request.getMethod();
获得请求头信息
//获取单个请求头信息
String s = request.getHeader("Accept-Encoding");
//获取同名的请求头的多个值
Enumeration<String> enu = request.getHeaders("Accept-Encoding");
while(enu.hasMoreElements()){
System.out.println(enu.nextElement());
}
//拿到所有的请求头和值
Enumeration<String> enu = request.getHeaderName();
while(enu.hasMoreElements()){
String key = enu.nextElement();
System.out.println(key + ":" + request.getHeader(key));
}
获取HTML中的控件信息
HTML页面:
<form action="ServletRequest/servlet/TestRequest" method="post">
姓名:<input type = "text" name = "username"><br>
密码:<input type = "text" name = "password"><br>
确认密码:<input type = "text" name = "password"><br>
<input type = "submit" value = "提交">
</form>
servlet:
//1.获取单个控件的值
public void test1(HttpServletRequest request){
//当表单里没有填写内容时,获取到的是空字符串
//当所填名字没有对应控件时,获取到的是null
String name = request.getParameter("username");//参数是控件的名字
System.out.println("姓名:" + name);
}
//2.获取同名控件的值
public void test2(HttpServletRequest request){
String[] pass = request.getParameterValues("password");
for(String string:pass){
System.out.println(string);
}
}
//3.获取所有控件的名字和值
public void test3(HttpServletRequest request){
Enumeration<String> enu = request.getParameterNames();
While(enu.hasMoreElements()){
String name = enu.nextElement();
//由于名字可能会重复
String[] values = request.getParameterValues(name);
for(String value:values){
System.out.println(name + ":" + request);
}
}
}
//4.将表单中的所有值封装到javabean中:
// 采用PropertyDescriptor
javaBean
//实现序列化接口:表示其可以被序列化,让对象经过网络传输不会出错
public class User implements Serializable{
private String username;
private String[] password; set,get...
...
toString...
}
servlet:
public void test4(HttpServletRequest request){
//将页面传递的内容封装到user对象中
User user = new User();
//获取所有控件的名字
Enumeration<String> enu = request.getParameterNames();
While(enu.hasMoreElements()){
String name = enu.nextElement();
//由于名字可能会重复
String[] values = request.getParameterValues(name); //拿到属性name的属性描述器
PropertyDescriptor pd = new PropertyDescriptor(name, User.class);
//将值注入到属性中
//拿到写描述器
Method method = pd.getWriterMethod();
//为了兼容jdk1.4,sun开发的invoke方法在执行的时候将参数拆开进行传递,所以导致异常
if(values.length == 1)
method.invoke(user,values);
else{
//解决办法一:(底层的values已经不是一个数组了)
method.invoke(user, (Object}values);
//解决办法二:
method.invoke(user, new Object[]{values});
}
}
System.out.println("封装后:" + user);
}
//5.将表单中的所有值封装到javabean中:(其它代码同4,只改while中代码)
// 采用第三方的jar进行封装:BeanUtils类(Spring框架里提供)
While(enu.hasMoreElements()){
String name = enu.nextElement();
//由于名字可能会重复
String[] values = request.getParameterValues(name); //采用BeauUtils类封装
BeanUtils.setProperty(user,name,values);
}
//6.将表单中的所有值封装到javabean中:
// 采用第三方的jar进行封装:BeanUtils类(Spring框架里提供)
public void test6(HttpServletRequest request){
//将页面传递的内容封装到user对象中
User user = new User();
//拿到控件的名字和值的键值对
Map<String,String[]> map = request.getParameterMap();
for(Map.Entry<String, String[]> entry:map.entrySet()){
//拿到控件的名字
String name = entry.getKey();
//拿到控件的值
String values = entry.getValue(); //采用BeauUtils类封装
BeanUtils.setProperty(user,name,values);
}
}
//7.将表单中的所有值封装到javabean中:
// (推荐使用)
public void test7(HttpServletRequest request){
//将页面传递的内容封装到user对象中
User user = new User(); BeanUtils.populate(user, request.getParameterMap()); System.out.println("封装后" + user);
}
request中文乱码问题
//1.当提交方式为post时:
// request.setCharacterEnconding("UTF-8");
request.setCharacterEnconding("UTF-8");
String name = request.getParameter("username");
get方式为什么会乱码:填写好传递数据之前,浏览器先用URLEncoder进行编码
在传输过程中,又用了ISO8859-1进行了一次编码
//2.当提交方式为get时:
// 重建字符串(适用于内容较少时)
request.setCharacterEnconding("UTF-8");
String name = request.getParameter("username");
name = new String(name.getBytes("ISO-8859-1"),"utf-8");
//当写中文较多的时候,采用更改服务器编码方法
//在server.xml中<Connector />中加一个
//URIENcoding = "UTF-8"
//当直接从地址栏中输入中文乱码时
String name = request.getParameter("username");
name = new String(name.getBytes("ISO-8859-1"));
request也是一个域对象(四大域对象之一)
域对象:底层一定有一个Map来存放键值对
ServletRequest1中
request.setAttribute("name", "高圆圆");
//请求转发器
RequestDispatcher rd = request.getRequestDispatcher("/servlet/ServletRequest2");
//转发到ServletRequest2中
rd.forward(request, response); //请求转发 rd.include(request, response); //把ServletRequest2包含进来 //拿取ServletRequest2中存取的数据
int age = (Integer)request.getAttribute("age");
ServletRequest2中
String name = request.getAttribute("name");
request.setAttribute("age",100);
request对象的请求转发和ServletContext对象的请求转发的区别
request对象的请求路劲支持相对路径
ServletContext对象的请求转发不支持相对路径
因为ServletContext是一个全局对象,它代表的是一个工程
封装表单中的数据(各种控件)
HTML页面
<form action="/day09_01_httpServletRequest/servlet/ServletRequest6" method="post">
姓名: <input type = "text" name = "username" ><br>
密码:<input type = "text" name = "password" ><br>
确认密码:<input type = "text" name = "password" ><br>
性别: <input type = "radio" name = "gander" value = "男" >男<input type = "radio" name = "gander" value = "女">女<br>
爱好:<input type = "checkbox" name = "loves" value = "打篮球">打篮球
<input type = "checkbox" name = "loves" value = "踢足球">踢足球
<input type = "checkbox" name = "loves" value = "聊天">聊天<br>
国籍: <select name = "country">
<option value = "中国">中国</option>
<option value = "美国">美国</option>
<option value = "日本">日本</option>
</select><br>
备注: <textarea rows="5" cols="20" name = "description">大神留下脚印吧!!!</textarea><br>
<!-- <input type = "submit" value = "提交" > -->
<input type = "button" value = "提交" onclick = "fun_submit()">
</form> <script type="text/javascript">
function fun_submit(){
//数据检测 //提交数据
var form = document.forms[0];
form.method = "post";
form.submit();
}
</script>
javaBean
public class User implements Serializable{
private String username;
private String[] password;
private String gander;
private String[] loves;
private String country;
private String description; set,get...
tostring...
}
servlet中
User user = new User();
//将表单数据封装到user对象中
BeanUtils.populate(user, request.getParameterMap());
System.out.println("封装后:" + user);
请求重定向和请求转发的区别
//请求重定向到新的资源
//这个执行之后,request就不在这个servlet中了,死亡了,被重新定向到Servlet2了 。
//但是请求转发后request还存在
response.sendRedirect(request.getContextPath() + "/servlet/Servlet2");
URL地址的写法
客户端跳转:由客户端浏览器发出来的跳转(加工程名称)
服务端跳转:由服务端发出的跳转(不加工程名称)
Web开发之request的更多相关文章
- Vim下的Web开发之html,CSS,javascript插件
Vim下的Web开发之html,CSS,javascript插件 HTML 下载HTML.zip 解压HTML.zip,然后将里面的所有文件copy到C:\Program Files\Vim\vi ...
- Web开发之Tomcat&Servlet
<!doctype html>01 - JavaEE - Tomcat&Servlet figure:first-child { margin-top: -20px; } #wri ...
- 移动web开发之rem适配布局
移动web开发之rem适配布局 方案: 页面布局文字能否随着屏幕大小变化而变化 流式布局和flex布局主要针对于宽度布局,那高度如何布局? 怎样让屏幕发生变化的时候元素高度和宽度等比例缩放? 1. r ...
- .NET Web开发之.NET MVC框架
摘要:MVC是一种架构设计模式,该模式主要应用于图形化用户界面(GUI)应用程序.那么什么是MVC?MVC由三部分组成:Model(模型).View(视图)及Controller(控制器). MVC概 ...
- Web开发之Cookie and Session
会话 什么是会话? 简单说:用户开一个浏览器,点击多个超链接,访问服务器的多个web资源,然后关闭浏览器,整个过程就称之为一个会话. 会话过程要解决什么问题 每个用户在使用浏览器与服务器进行会话的过程 ...
- Web开发之response
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象. 我们要获取客户机提交过来的数据,只需要找request对象就行 ...
- Web开发之tomcat配置及使用(环境变量设置及测试,一个简单的web应用实例)
Tomcat的配置及测试: 第一步:下载tomcat,然后解压到任意盘符 第二步:配置系统环境变量 tomcat解压到的D盘 (路径为: D:\tomcat), 配置环境变量: 启动tomcat需要两 ...
- Java Web开发之Servlet、JSP基础
有好多年不搞Java Web开发了,这几天正好国庆放假,放松之余也有兴趣回头看看Java Web开发技术的基础. 我们都知道,Servlet是Java Web开发的重要基础,但是由于Servlet开发 ...
- Web开发之RSET API
REST介绍 如果要说什么是REST的话,那最好先从Web(万维网)说起. 什么是Web呢?读者可以查看维基百科的词条(http://zh.wikipedia.org/zh-cn/Web),具体的我就 ...
随机推荐
- [BUUCTF]PWN——[BJDCTF 2nd]secret
[BJDCTF 2nd]secret 附件 步骤: 例行检查,64位程序,开启了canary和nx 本地试运行一下,看看程序大概的情况,好像是一个什么游戏 64位ida载入,检索程序里的字符串,发现了 ...
- 调配资源(Project)
<Project2016 企业项目管理实践>张会斌 董方好 编著 当资源过度分配了,肿么办? 比如前面的例子,某吃货甲,一天之内给他分配了9.6个工时的吃量,这怎么可以呢,让人加班是不厚道 ...
- 『学了就忘』Linux系统管理 — 86、查看系统资源相关命令
目录 1.vmstat命令 2.dmesg命令 3.free命令 4.查看CPU信息 5.查看本机登陆用户信息 (1)w命令 (2)who命令 6.uptime命令 7.查看系统与内核相关信息 1.v ...
- Flutter学习(9)——Flutter插件实现(Flutter调用Android原生
原文地址: Flutter学习(9)--Flutter插件实现(Flutter调用Android原生) | Stars-One的杂货小窝 最近需要给一个Flutter项目加个apk完整性检测,需要去拿 ...
- software engineer's resume(帮助你写程序员简历)
关键词 参考 简历模板 参考 下面开始是正文(关键词原文) 介绍 本项目由海外兔 (https://osjobs.net) 维护,海外兔团队由一线互联网面试官组成,提供海内外公司一对一入职套餐以及算法 ...
- dart系列之:dart优秀的秘诀-隔离机制
目录 简介 dart中的隔离机制 生成一个Isolate Isolate之间的交互 一个例子 总结 简介 之前介绍了很多dart中的异步编程技巧,不知道大家有没有发现一个问题,如果是在java的异步编 ...
- 【九度OJ】题目1191:矩阵最大值 解题报告
[九度OJ]题目1191:矩阵最大值 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1191 题目描述: 编写一个程序输入一个mXn的 ...
- Fast Matrix Operations(UVA)11992
UVA 11992 - Fast Matrix Operations 给定一个r*c(r<=20,r*c<=1e6)的矩阵,其元素都是0,现在对其子矩阵进行操作. 1 x1 y1 x2 y ...
- Revolving Digits(hdu4333)
Revolving Digits Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- Codeforces 888D: Almost Identity Permutations(错排公式,组合数)
A permutation \(p\) of size \(n\) is an array such that every integer from \(1\) to \(n\) occurs exa ...