JAVA小白第二阶段(web)------第二课学习笔记

前言:进入了web的第二节课感觉很抽象,而且方法也非常多,非常的复杂,询问了学长的意见,还是得多敲多练,提高熟练度,争取做到,看一遍就能明白他这个方法的作用是什么;

一、HttpServletRequest

简单而说,这个类就是客户端(一些手机app,web网页)所包含的全部信息,都存放在这个类里;然后大体分为3个部分,请求头,请求行,请求体;

1:请求行;

想要获取请求行的信息,可以通过

req.getMethod()-获取请求方式

req.getRequestURL()-获取完整路径

req.getRequestURI()-获取处域名外的路径

req.getServletPath()-获取接口路径

req.getContextPath()-获取根路径

这些数据都需要通过doget方法后获取

2:请求头;

想要获取请求头的信息,可以通过一个枚举迭代器来获取请求行里的全部信息

因为请求头的信息是通过键值对来存储的,那我们就可以通过循环将键值全部循环出来,然后再通过while循环将键值所对应的数据打印出来

Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
    String name = headerNames.nextElement();

这里是通过键值将数据导入定义好的字符串里
    String value = request.getHeader(name);

最后这边在输出字符串
    System.out.println(value);
}

3,请求体;

获取请求体的信息,一般doget方法用不到,因为doget方法里面的数据都直接存放在它的路径上,不需要使用那个方法就可以直接在请求行里打印出来,所以一般使用在dopost方法里

//这边这一行必须要有,因为浏览器自带的编辑格式与服务端的不一样,所以这边要输入这个语句,这样传送的中文就不会出现乱码情况

req.setCharacterEncoding("utf8");

    String name = req.getParameter("name");
    System.out.println(name);

这样就能获取到post请求存放在方法体里的数据了

4,请求转发;

这个功能可以将这个路径下的数据,转发到下一个路径里,且浏览器的路径不会发生任何改变,这是一次请求,并且不能转发外部资源,只能转发内部资源

实现操作:前面那个就是一个发射器,将你要转发的路径存放到这个发射器里,后面就是一个命令,将你要转发的内容放进去,一般放的都是(req,resp)

request.getRequestDispatcher("转发路径").forward(request, response)

这个请求转发作用在于可以共享数据,在第一个端口通过setAttribute(String name, Object object) // 存储数据;

第二个端口就可以通过getAttribute(String name) // 通过键获取数据

想要删除数据时在第一个端口输入removeAttribute(String name) // 通过键移除数据

二,HttpServletResponse

1,当服务端要把信息传输到客户端时一般就是使用resp这个类来实现

//因为浏览器在接受服务端数据后会在响应头中寻找ContentType数据
//没有找到他就会使用默认自带编码格式GBK,而服务端
    // 则使用的是UTF8会导致乱码
 //所以这里我们主动写一个Content-Type,相应文本类型;修改的格式;
//  resp.setHeader("Content-Type","text/html;charset=utf8");
 //简便方法
    resp.setContentType("text/html;charset=utf8");
     resp.getWriter().write("<h1>湖人总冠军</h1>");
    //可以自定义状态码 resp.setStatus(201);默认状态码是200

2,重定向

重定向和前面那个请求转发有所不同,重定向是会直接跳转到下一个接口,而请求转发则是会在浏览器里直接跳转到下一个接口,且重定向是两次请求,可以访问到外部资源

//这样可以动态获输入根路径,加上接口路径就可以实现跳转网站
    resp.sendRedirect(req.getContextPath()+"/h08");

红色标记的方法正是req中访问请求行信息中的一个方法,这样可以获取根路径,因为根路径都是一样的,根路径+接口路径就可以成功跳转了;

三、ServletContext

这个官方话叫做Servlet上下文,用我自己的理解方式我觉得这个很像static的另一种版本;

只要你有去实现这个类,那么他所存储的数据都能被共享到

//只要是有实现servletContext对象以后,就能获取到存储的值
 //这个对象是服务于整个工程的
 ServletContext servletContext = req.getServletContext();
 servletContext.setAttribute("a",10);
 servletContext.setAttribute("b",20);
setAttribute(name, value)添加数据
getArrtibute(name)获取数据
removeAttribute(name)删除数据

这边有个简易方法那就是直接req.getServletContext()。var他就会自己帮你把类型名打出来,更加简便;

2,获取mini类型,这个主要是可以知道什么输出什么样的数据,所对应的类型是什么东西

String filename = "a.jpg";
String mimeType = context.getMimeType(filename);
System.out.println(mimeType);

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值