http://localhost/day101/row?username=xiaoming&password=123&hobby=smoking&hobby=drink
格式:
请求方式 资源路径?参数名=参数值&参数名=参数值(get请求) 协议/版本
例子:
GET /test?username=xiaoming&password=123&hobby=smoking&hobby=drink HTTP/1.1
1.1.获取资源路径 (有用)
request.getRequestURI();
1.2.获取get请求的请求参数 并且字符串返回(无用)
request.getQueryString();
//例子 返回username=xiaoming&password=123&hobby=smoking&hobby=drink
1.3.获取协议/版本 (基本无用)
request.getProtcol()//返回 HTTP/1.1
1.4.获取请求类型
request.getMethod();//
1.5.获取项目路径
request.getContextPath()// 一级重要
只要是在代码需要用到了 项目地址 一定使用该方法获取 不要自作主张
1.6.获取远程请求ip
request.getRemoteAddr()//
2.1.获取请求头(单个值)
String 请求头值=getHeader("请求的名字");//获取请求头--------------->重要
没有用类似方法(视而不见):
int getIntHeader("请求的名字");//int值
long getDateHeader("请求的名字");//日期类型值
2.2.获取请求头(多值的)
Enumeration(集合) request.getHeaders();//获取多值的
2.3.获取所有请求头的名字
Enumeration(集合) request.getHeaderNames();//获取所有请求头的名字
2.4.重要的请求头名字:
User-Agent:告知服务器 客户端是什么牌子的浏览器
referer:请求来源(从哪个网页跳转过来的)
3.1.请求方式为post,才放置请求参数
3.2.不论请求方式,都可以获取请求参数的3个方法:
http://localhost/day101/param?username=xiaoming&password=123&hobby=smoking&hobby=drink
String 参数值 = request.getParameter("参数名")//返回请求参数值 返回单值参数
String[] 多值参数 = request.getParameterValues("参数名")//返回请求参数值 返回多值参数 hobby
Map 所有参数 = request.getParameterMap();//返回所有请求参数的Map集合
4.1.原因:
因为我们的浏览器在发送数据的时候,它会将中文进行utf-8编码;
但是我们服务器:
请求行资源路径 也就是get请求 解码采用utf-8编码
请求体中采用iso-8859-1解码的
4.2.解决:想办法 告知服务器请求你用utf-8编码
request.setCharacterEncoding("utf-8")//告知服务器请你对post请求体中数据采用utf-8 解码
beanUtils 是apache提供的
方法:
BeanUtils.populate(JavaBean,map集合);
需求:
访问服务器 访问注册页面 注册表单 让用户可以输入用户信息
点击提交 把信息提交服务器 将信息变成数据 用户表记录
步骤分析:
1.数据库 创建表
2.创建工程
1)jar包导入(jar包说明)
2)工具类导入(DataSourceUtils.java)
3)配置文件导入(c3p0-config.xml,需要修改数据库信息)
4)三层架构
3.逻辑部分
1)前端页面:
(1).regist.htm页面
(2)form表单部分补充内容:
action method 输入框起名字name (性别男女的value分别更改为1/0)
2)后端部分:
(1)获取请求信息
a.设置解析编码
request.setCharacterEncoding("utf-8");
b.获取所有请求体内容,放入map集合
request.getParameterMap()
(2)调用UserService 保存数据方法,传递参数
(3)参数数量大于四个,请封装对象
Java工具类BeanUtils封装表单信息到对象user
BeanUtils.populate(user,map);
(4)重定向到登陆页面
response.sendRedirect(request.getContentPath()+"/login.htm");
代码实现:
//设置请求体解析编码
request.setCharacterEncoding("utf-8");
//获取请求的参数信息
Map<String, String[]> map = request.getParameterMap();
User user = new User();
//参数数量大于四个,将请求信息封装到对象
try {
BeanUtils.populate(user,map);
} catch (Exception e) {
e.printStackTrace();
}
//遍历user信息,用于测试是否准确获取到请求信息
//System.out.println(user);
//调用UserService保存数据
UserService userService = new UserService();
userService.regist(user);
//重定向到登陆页面
//response.sendRedirect("http://localhost/login");
//绝对路径 可以省略域名的
response.sendRedirect(request.getContextPath()+"/login.htm");
1.获取Dispatcher对象:
dispatcher对象 = request.getRequestDispatcher("/要找的servlet资源_内部路径");
2.dispatcher对象方法:
forward(request,response);
//request的属性操作
xxxAttribute();
3.注意事项:
不可用在重定向中
4.request生命周期:
1).每当请求来的时候创建
2).请求结束,响应内容来了,也就结束
java server pages 服务器页面
特点:
允许你再jsp页面上,既可以写html代码,也可以写java代码
html格式不变;java代码格式 <% java代码 %> ;
怎么创建jsp:
使用idea new 一个
工作原理:
1)当你访问一个jsp文件的时候, 服务器交给了 jspservlet 来处理;
2)它首先去你项目中找对应 jsp 文件,执行翻译过程, 拼接字符串----->拼接成了一段java代码;
3)执行编译,把java代码编译成class文件, 调用它的方法, 输出给浏览器内容.
jsp的本质就是一个servlet;
编程思路:
分工明确;
以后servlet只负责接受请求,调用service完成数据准备工作,展示的工作与自己无关;
展示工作 请求转发给jsp负责.
总结:数据准备 与 数据展示 相分离.
需求:
访问某个servlet 查询数据库中所有用户
并且要求以table表格形式展示给用户
问题:
返回数据 如果是个页面 拼接字符串太难受
解决:利用 请求转发 和 jsp技术
实现步骤:
1)在注册和登陆实现完毕的基础上进行;
2)创建UserServlet类,完成接收请求和调用service完成数据准备的工作,并且请求转发给users.jsp页面展示:
(1)接收请求的信息,将请求信息封装到User对象
(2)调用service层方法查询到所有user信息,返回一个User类型的List集合;
(3)调用request方法setAttribute("xxx","xx"),将List集合存入属性值中;
(4)请求转发给users.jsp页面.
3)创建users.jsp页面,编辑内容负责展示用户信息表:
(1)页面创建表格,第一行为表头,用html代码写;
(2)表格第二行开始,要写入Servlet中查询到的User对象的集合,用java代码写(<% 代码体 %>);
(3)因为请求转发带有参数(request,response),利用request获得Servlet中存储的List集合,request.getAttribute("xxx");
(4)遍历List集合,利用字符串拼接,将User对象信息写入表格中(一个User对象,写入一行表记录).
1.思维:
1)request是什么东西
2)请求转发技术和jsp结合
2.代码上:
1) 注册案例敲一遍
2) getContextPath()//动态获取项目路径
3) 请求转发:
request.getrequestDispather("/内部路径").forward(request,response)
request提供了一组xxxAttribute()方法
3.请求转发和重定向的区别:
1)请求次数:
请求转发:1次
重定向:2次 一次手动 一次自动
2)地址栏问题:
请求转发:不会变
重定向:会变 变到最后一个位置
3)谁的方法:
请求转发:request.getrequestDispatcher("/").forward(request,response)
重定向:response.sendRedirect("路径")
4)路径:
请求转发:request.getrequestDispather("/内部路径").forward(request,response)
重定向:response.sendRedirect("路径") 可以走向任何地址
5)属性操作:
请求转发:可以使用(因为参数传递了request和response)
重定向:不要用