,HttpServletRequest是ServletRequest的子接口,功能和方法更加强大。
一、抓取请求的三个部分
二、request分别获取三个部分
1)获得请求行和请求行
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取请求行
String method = request.getMethod();//请求方式
String requestURI = request.getRequestURI();//uri
StringBuffer requestURL = request.getRequestURL();//url
String contextPath = request.getContextPath();//常用:web应用的名称
String queryString = request.getQueryString();//地址后的参数运算符(post请求的不在此处,get请求的在此处)
String remoteAddr = request.getRemoteAddr();//客户端的ip地址
//获得请求头
String header = request.getHeader("User-Agent"); //获取响应的值
Enumeration headerNames = request.getHeaderNames(); //获取所有头的key
System.out.println("请求方式:"+method);
System.out.println("URI:"+requestURI);
System.out.println("URL:"+requestURL);
System.out.println("web应用:"+contextPath);
System.out.println("参数运算符:"+queryString);
System.out.println("客户端的ip地址 "+remoteAddr);
System.out.println();
System.out.println("User-Agent:"+header);
while(headerNames.hasMoreElements()){ //依次根据每个key输出value值
String nextElement = headerNames.nextElement();
System.out.println(nextElement+" :"+request.getHeader(nextElement));
}
}
输出结果如下:
2)获得请求体 某个请求参数可能有多个值
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username"); //获得请求体中 username的值
String password = request.getParameter("password"); //获得请求体中 password的值
String[] hobbys = request.getParameterValues("hobby"); //获得请求体中 hobby的值(多个)
Enumeration parameterNames = request.getParameterNames(); //获取请求体每一个的名字
Map parameterMap = request.getParameterMap(); //常用:获得一个集合 内容为 名字, 值
System.out.println(username+"\n"+password+"\n");
for(String s:hobbys)
System.out.println(s);
while(parameterNames.hasMoreElements()) //输出每一个的名字
System.out.println(parameterNames.nextElement());
for(Map.Entry s:parameterMap.entrySet()) //输出每一对值
{
System.out.println("------------");
System.out.println(s.getKey()); //输出key
for(String k:s.getValue()) //输出value 可能有多个 用for循环
System.out.println(k);
}
}
输出结果如下
3)request为域对象 可以用来储存数据
setAttribute(String name,Object o)
getAttribute(String name)
removeAttribute(String name)
注意:request域的作用范围:一次请求中
注意:ServletContext域与Request域的生命周期比较?
ServletContext:
创建:服务器启动
销毁:服务器关闭
域的作用范围:整个web应用
request:
创建:访问时创建request
销毁:响应结束request销毁
域的作用范围:一次请求中
三、转发
转发的实质
转发和重定向的区别
1)重定向两次请求,转发一次请求
2)重定向地址栏的地址变化,转发地址不变
3)重新定向可以访问外部网站 转发只能访问内部资源
4)转发的性能优于重定向
转发的实现 跳转到s2 servlet进行处理
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//请求转发
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/s2");
//执行
requestDispatcher.forward(request, response);
}
Insert title here
public class Register extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置request的编码---只适合post方式
request.setCharacterEncoding("UTF-8");
//get方式乱码解决 中文 -- utf8编码 -- iso8859-1解码 --(乱码 )--iso8859-1编码--utf-8解码--中文
//String username = request.getParameter("username");//乱码
//先用iso8859-1编码 在使用utf-8解码
//username = new String(username.getBytes("iso8859-1"),"UTF-8");
/*1 获取数据
request.getParameter("...");
...
2 将数据封装到javabean中
User user = new User();
user.setUsername(...);
...*/
/*使用BeanUtils进行自动映射封装
工作原理:将map中的数据 根据key与实体的属性的对应关系封装
只要key的名字与实体的属性的名字一样就自动封装到实体中*/
Map parameterMap = request.getParameterMap();//请求的内容封装成一个map
User user = new User();
try {
BeanUtils.populate(user, parameterMap); //map封装到实体中
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
////3 User对象已经封装 将参数传递给业务操作方法
try {
register(user);
} catch (SQLException e) {
e.printStackTrace();
}
//4 注册完成 重定向到登陆界面 地址改变 1:告知用户 2:防止用户重复刷新
response.sendRedirect(request.getContextPath()+"/login.html"); //获取应用名称 防止硬编码
}
public void register(User user) throws SQLException{ //数据库操作的方法
QueryRunner runner = new QueryRunner(C3P0Utils.getDataSource());
String uid = UUID.randomUUID().toString();
String sql = "insert into user values(?,?,?,?,?,?,?,?,?,?)";
Object[] para = {uid,user.getUsername(),user.getPassword(),user.getName(),user.getEmail(),user.getTelephone(),
user.getBirthday(),user.getSex(),null,null};
runner.update(sql, para);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}