Java Web 请求和响应总结

Servlet最主要的作用就是处理客户端的请求,并向客户端作出响应。
URI:统一资源标志符
URL:统一资源定位符,具体的URI,是URI的一个子集,不仅唯一标识资源,而且还提供了定位该资源的信息。


request对象的学习:
作用:获得request对象中封存了当前请求的所有信息
使用:
获取请求头数据

		req.
		getMethod();//获取请求方式
		req.getRequestURL();//获取请求URL信息
		req.getRequestURI();//获取请求URL信息
		req.getScheme();//获取协议版本

获取请求行数据:

		req.getHeader("键名");//返回指定的请求头信息
		req.getHeaderNames();//返回请求头得键名枚举集合

获取用户数据:

		req.getParameter("键名");//返回指定的用户健名对应的值,如果没有这个键,不会报错,只会返回null值。
		req.getParameterValues("键名");//返回指定的键名对应的多个值,例如返回多选的多个值,如果利用上面的方法,那么只会返回第一个值
		req.getParameterNames();//返回所有用户请求数据的键的枚举集合

我是一条没有感情的分割线


response对象的学习:
作用:用来响应数据到浏览器的一个对象
使用:
设置响应头:

resp.setHeader(String name,String value);//在响应头中增加响应信息,如果键名相同,会覆盖之前的信息
resp.addHeader(String name,String value);//在响应头中增加响应信息,不会覆盖之前的信息

设置响应状态:

resp.sendError(int code,String name);//自定义错误状态,前面是状态码,后面是状态码的说明

设置响应实体:

resp.getWriter().write(Strin str);//响应具体的数据给浏览器

我是一条没有感情的分割线


请求、响应乱码问题进行总结及解决:
1.使用String 进行重新编码
键名=new String(键名.getBytes(“iso8859-1”,“utf-8”);
//重要的数据用这个转一下,因为浏览器的版本各不相同,有可能会出现一些奇奇怪怪的问题来着


设置请求编码格式

对于GET方式请求:
步骤1:

req.setCharacterEncoding("utf-8");

步骤2:

在tomcat的目录下的conf目录中修改server.xml文件;在connector标签中增加属性


useBodyEncodingForURI=“true”


对于POST方式请求:

req.setCharacterEncoding("utf-8");

解决post与get方式请求编码问题的唯一区别的就是不需要步骤2。


设置响应编码格式:

		resp.setContentType("text/html;charset=utf-8");

servlet使用路程进行总结:
1.浏览器发起请求到服务器(请求)
2.服务器接收浏览器的请求,进行解析,创建request对象存储请求数据
3.服务器调用对应的servlet进行请求处理,并将request对象作为实参,传递给servlet的方法(service方法,dopost方法,doget方法)
servlet方法的使用流程:
1.设置请求编码格式
2.设置响应编码格式
3.获取请求信息
4.处理请求信息
                创建业务层对象
                调用业务层对象的方法
5.响应处理结果


数据流转流程:
浏览器- - - >服务器- - ->数据库
数据库- - - >服务器- - - >浏览器


request对象的作用域:
使用请求转发后,不同的servlet之间怎么进行数据的共享呢?或者说,数据怎么从一个servlet流转个另外一个servlet呢?
解决:使用request对象的作用域
使用:

req.setAttribute(Object name,Object value);

传递属性,前面是键名,后面是值
注意:如果该对象已经存在该指定键名的值了,setAttribute()会覆盖原来的值,如果传进去的键名的值为null,则会删除指定键名的值,此时效果相当于removeAttribute()方法。

获得对应的键名的值
删除对象的键名的值

req.getAttribute(Object obj);
req.removeAtttibute(Object obj);

作用:解决了一次请求内的不同servlet的数据共享问题
(数据:指的是请求数据和前面的servlet的处理结果)

特点:
1.服务器创建
2.每次请求都会创建
3.生命周期只有一次请求


请求转发

请求转发:服务器在接收到浏览器的请求后,仅仅使用一个servlet进行请求处理,会造成不同的servlet逻辑代码冗余,servlet的职责不明确,所以就用到请求转发·。

使用:req.getRequsetDisapatcher(“要转发的地址”).forward(req,resp);
要转发的地址:相对路径,直接书写servlet里面的别名即可,就在web.xml里面的那个别名,把别名前面的"/"去了即可,学到了以后,还可以写jsp。
注意:在写完请求转发后直接return结束即可。
在这里插入图片描述


请求包含

使用include()方法,将servlet请求转发给其他的Web资源进行处理,与请求转发不同的是,在请求返回的响应消息中,既包含了当前servlet的响应消息,也包含了与其他响应信息。
在这里插入图片描述


请求重定向

问题:如果当前的请求,servlet无法进行处理怎么办?
           如果使用请求转发,造成的表单数据重复提交怎么办?
解决:使用请求重定向
使用:
response.sendRedirect(“路径”);
路径:  /包名/servlet别名
本地路径为:URI
网络路径为:定向的URI信息
特点:
两次请求
浏览器地址栏信息会改变
在这里插入图片描述


遗留问题:那么问题来了,我们知道,一次请求,如果请求被销毁了,那么请求所包含的信息也就不在了,然后,如果说,我们进行了多次请求,就像登陆网站一样,难道要让用户输入两次账号密码吗?不行,这样会降低用户的网站使用感,那么,就要到了会话及其会话技术了!!!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值