请求和响应

请求

请求对象

1、GenericServlet抽象类中service方法中的 ServletRequest

2、HttpServlet抽象类中 doGet和doPost方法中的HttpServletRequest

请求资源的

请求对象获取路径的方法

//获取虚拟目录
String contextPath = req.getContextPath();
          
//获取映射路径  就是每一个类对应的映射配置<url-param>里面的路径
 String servletPath = req.getServletPath();
  
// 获取请求者ip地址
 String remoteAddr = req.getRemoteAddr();
          
//获取请求内容
String queryString = req.getQueryString();
//获取uri 就是虚拟路径+资源路径
String requestURI = req.getRequestURI();
//获取url 搜索框输入的路径
StringBuffer requestURL = req.getRequestURL();

请求对象获取请求头的信息

//获取单个值
 String date = req.getHeader("Connection");
//其实getHeader也可以获取请求头含多个值的信息 只不过得到的是字符串
//而getHeaders得到的是每一个参数对应的字符串
//获取多个值的
Enumeration<String> date1 = req.getHeaders("name");
//获取所有的头名字
 Enumeration<String> headerNames = req.getHeaderNames();

请求对象获取所有参数信息的方法

 //获取一个值的表单
String username = req.getParameter("username");
          
//获取多个值的表单值
String[] loves = req.getParameterValues("love");
          
//获取所有的名字
Enumeration<String> parameterNames = req.getParameterNames();
//获取所有的键值对
 Map<String, String[]> map = req.getParameterMap();
//注意 其中参数是表单里面必填属性name的值

将请求参数封装成对象

1、手动封装

2、反射封装

得到该类的属性描述器  可以得到该类的get和set方法  对应的是writer和reader方法

3、工具类封装对象

a、在WEB-INF下面建一个lib文件夹,导入依赖的包 然后添加操作

b、BeanUtils.populate(对象,map)

		//获取键值对集合
        Map<String, String[]> map = req.getParameterMap();
		
		//使用无参方法创建对象
        Student stu = new Student();

        try {
            //调用方法封装对象
            BeanUtils.populate(stu,map);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

//底层就是用的反射封装对象的方法

请求流对象

req.getReader():字符流

req.getInputStream():字节流

不支持get方式提交然后创建请求流对象 只支持post方式

请求乱码问题:

首先get方式提交 然后我们获取值是不存在乱码问题的,因为在jdk8别人已经帮我们解决了

post方式提交然后获取值是存在乱码问题的:

解决:req.setCharacterEncoding(”发送页面的编码格式“)

请求域和请求转发和重定向

请求域:就是每一个servlet接受到了请求 他有一个请求域 当请求转发给另外一个servlet,他们是共享请求域的

请求转发就是请请求转发给另外一个servlet

重定向:重新让发起请求者给另外一个指定的servlet对象发起请求

实现请求转发:

 req.getRequestDispatcher("/servletdemo9").forward(req,resp);

实现重定向

 resp.sendRedirect("/response/ServletDemo3");

两者的区别:

请求转发只请求了一次 而重定向请求了两次

请求转发的两个servlet的请区域是连在一起的,而重定向的请求域不是的,各自各的

请求转发的地址栏不会改变 而重定向的地震了会发生改变

响应对象

1、GenericServlet抽象类中service方法中的 ServletResponse

2、HttpServlet抽象类中 doGet和doPost方法中的HttpServletResponse

给客户端回馈结果的

常见的响应码

200:成功

302:重定向

304:请求资源没有改变,使用缓存

400:一般是请求参数错误

404:一般是请求地址出错

405:请求方式不支持

500:服务器错误

响应流乱码问题

setContentType(“text/html;charset=utf-8”)—设置浏览器响应内容的编码格式

字节流:resp.getOutputStream()

字节流在把字符串使用getBytes()方法是需要指定一个编码格式utf-8;

字符流:resp.getWriter()

实现响应图片

1、创建本地字节读取流

注意:我们把项目的war包发布到tomcat服务器上,对应的图片内容地址需要我们使用getServletContext得到的对象去调用getRealPath获取在war包中的路径 不能使用本地路径

2、创建响应流对象

3、一个读取一个响应给浏览器

4、关闭自己在本地创建的字节读取流 当我们关闭服务器的时候 servlet会被销毁 所以不用我们关闭响应流对象了

设置缓存

当一个内容总是被访问是 我们可以在浏览器上缓存这个数据 提高效率

实现:resp.setDateHeader(“Expires(过期)”,“过期时间”)

小注意点:在搜索框点击刷新是重新请求数据 点回车是访问缓存数据

定时刷新

实现

  resp.setHeader("Refresh","3;URL=/response/ServletDemo2");

在过三秒后会调到指定路径

文件下载

1、创建字节响应流对象

2、设置响应头以下载方式响应文件

resp.setHeader("Content-Disposition","attachment;filename=girl.jpg");
//				处理形式			附件形式进行处理 默认下载图片的名称

3、创建本地读取流对象 注意点和响应图片一样

4、一个读取 一个响应到浏览器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值