Servlet(1):request和response对象
1.Servlet的生命周期
/**
* Servlet的生命周期:
* 1、从第一次调用到服务器关闭。
* 2、如果Servlet在web.xml中配置了load-on-startup,生命周期为从服务器启动到服务器关闭
* 注意:
* init方法是对Servlet进行初始化的一个方法,会在Servlet第一次加载进行存储时执行
* destory方法是在servlet被销毁时执行,也就服务器关闭时。
*/
public class ServletLife extends HttpServlet {
//初始化方法,在servlet第一次加载内容的时候被调用
@Override
public void init() throws ServletException {
System.out.println("servlet初始化完成");
}
//service方法,真正处理请求的方法
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.getWriter().write("servlet life");
System.out.println("servlet life");
}
@Override
public void destroy() {
System.out.println("我被销毁了...");
}
}
2.Service方法和doGet方法和doPost方法的区别
/**
* Service方法和doGet方法和doPost方法的区别
* Service方法:
* 可以处理get/post方式的请求,如果servlet中有Service方法,会优先调用service方法对请求进行处理。
* doGet方法:
* 处理get方式的请求
* doPost方法:
* 处理post方式的请求
* 注意:
* 如果在覆写的service方法中调用了父类的service方法(super.service(arg0, arg1)),
* 则service方法处理完后,会再次根据请求方式响应的doGet和doPost方法执行。所以,一般情况下
* 我们是不在覆写的service中调用父类的service方法的,避免出现405错误。
* Servlet的常见错误:
* 404错误:资源未找到
* 原因一:在请求地址中的servlet的别名书写错误。
* 原因二:虚拟项目名称拼写错误
* 500错误:内部服务器错误
* 错误一:
* java.lang.ClassNotFoundException: com.bjsxt.servlet.ServletMothod
* 解决:
* 在web.xml中校验servlet类的全限定路径是否拼写错误。
* 错误二:
* 因为service方法体的代码执行错误导致
* 解决:
* 根据错误提示对service方法体中的代码进行错误更改。
* 405错误:请求方式不支持
* 原因:
* 请求方式和servlet中的方法不匹配所造成的。
* 解决:
* 尽量使用service方法进行请求处理,并且不要再service方法中调用父类的service。
* @author MyPC
*/
public class ServletMethod extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
int i=5/0;
System.out.println("我是service");
super.service(req, resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("我是doGet方法");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("我是doPost方法");
}
}
3.request对象学习
/**
* request对象学习:
* 作用:request对象中封存了当前请求的所有请求信息
* 使用:
* 获取请求头数据
* req.getMethod();//获取请求方式
* req.getRequestURL();//获取请求URL信息
* req.getRequestURI();//获取请求URI信息
* req.getScheme();//获取协议
* 获取请求行数据
* req.getHeader("键名");//返回指定的请求头信息
* req.getHeaderNames();//返回请求头的键名的枚举集合
* 获取用户数据
* req.getParameter("键名");//返回指定的用户数据
* req.getParameterValues("键名");//返回同键不同值的请求数据(多选),返回的数组。
* req.getParameterNames()//返回所有用户请求数据的枚举集合
* 注意:
* 如果要获取的请求数据不存在,不会报错,返回null。
*
* 注意:
* request对象由tomcat服务器创建,并作为实参传递给处理请求的servlet的service方法。
* @author MyPC
*
*/
public class RequestServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//获取请求头数据
//获取请求方式
String method = req.getMethod();
System.out.println(method);
//获取请求URL
StringBuffer url=req.getRequestURL();
System.out.println(url);
//获取URI
String uri=req.getRequestURI();
System.out.println(uri);
//获取协议
String h=req.getScheme();
System.out.println(h);
//获取请求行数据
//获取指定的请求行信息
String value=req.getHeader("aaa");
System.out.println(value);
//获取所有的请求行的键的枚举
Enumeration e = req.getHeaderNames();
while(e.hasMoreElements()){
String name=(String) e.nextElement();
String value2=req.getHeader(name);
System.out.println(name+":"+value2);
}
//获取用户数据
String name=req.getParameter("uname");
String pwd=req.getParameter("pwd");
System.out.println(name+":"+pwd);
//String fav=req.getParameter("fav");
String[] favs=req.getParameterValues("fav");
if(favs!=null){
for(String fav:favs){
System.out.println(fav);
}
}
//获取所有的用户请求数据的键的枚举集合---req.getParameterNames()
}
}
4.response对象学习
/**
* Respone对象学习:
* 作用:
* 用来响应数据到浏览器的一个对象
* 使用:
* 设置响应头
* setHeader(String name,String value);//在响应头中添加响应信息,但是同键会覆盖
* addHeader(String name,String value);//在响应头中添加响应信息,但是不会覆盖。
* 设置响应状态
* sendError(int num,String msg);//自定义响应状态码。
* 设置响应实体
* resp.getWrite().write(String str);//响应具体的数据给浏览器
* 设置响应编码格式:
* resp.setContentType("text/html;charset=utf-8");
* 总结:
* service请求处理代码流程:
* 设置响应编码格式
* 获取请求数据
* 处理请求数据
* 数据库操作(MVC思想)
* 响应处理结果
* @author MyPC
*
*/
public class ResponseServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//获取请求信息
//获取请求头
//获取请求行
//获取用户数据
//处理请求
//响应处理结果
//设置响应头
resp.setHeader("mouse", "two fly birds");
resp.setHeader("mouse", "bjsxt");
resp.addHeader("key", "thinkpad");
resp.addHeader("key", "wollo");
//设置响应编码格式
//resp.setHeader("content-type", "text/html;charset=utf-8");
//resp.setContentType("text/plain;charset=utf-8");
//resp.setContentType("text/xml;charset=utf-8");
resp.setContentType("text/html;charset=utf-8");
//设置响应状态吗
//resp.sendError(404, "this Method is not supported");
//设置响应实体
resp.getWriter().write("<b>今天天气真好,适合学习</b>");
}
}
Servlet(1):request和response对象的更多相关文章
- java web(三):ServletContext、session、ServletConfig、request、response对象
上一篇讲了Servlet: 1)什么是Servlet[servlet本身就是一种Java类,这种Java类提供了web形式的方法,只要实现了servlet接口的类,都是一种servlet资源.] 2) ...
- spring aop 获取request、response对象
在网上看到有不少人说如下方式获取: 1.在web.xml中添加监听 <listener> <listener-class> org. ...
- request与response对象.
request与response对象. 1. request代表请求对象 response代表的响应对象. 学习它们我们可以操作http请求与响应. 2.request,response体系结构. 在 ...
- request与response对象详述
request与response对象. 1. request代表请求对象 response代表的响应对象. 学习它们我们可以操作http请求与响应. 2.request,response体系结构. 在 ...
- springMVC中获取request和response对象的几种方式(RequestContextHolder)
springMVC中获取request和response对象的几种方式 1.最简单方式:参数 2.加入监听器,然后在代码里面获取 原文链接:https://blog.csdn.net/weixin_4 ...
- Servlet之Request和Response 解析
原理 tomcat服务器会根据请求url中的资源路径,创建对应的Servlet的对象 tomcat服务器.会创建request和response对象,request对象中封装请求消息数据. tomca ...
- Request和Response对象
Request 和 Response 对象起到了服务器与客户机之间的信息传递作用.Request 对象用于接收客户端浏览器提交的数据,而 Response 对象的功能则是将服务器端的数据发送到客户端浏 ...
- 【转】Django中的request与response对象
关于request与response 前面几个 Sections 介绍了关于 Django 请求(Request)处理的流程分析,我们也了解到,Django 是围绕着 Request 与 Respon ...
- SpringMvc4中获取request、response对象的方法
springMVC4中获取request和response对象有以下两种简单易用的方法: 1.在control层获取 在control层中获取HttpServletRequest和HttpServle ...
- springboot的junit4模拟request、response对象
关键字: MockHttpRequest.Mock测试 问题: 在模拟junit的request.response对象时,会报如下空指针异常. 处理方法: 可用MockHttpServletReque ...
随机推荐
- Laravel Vuejs 实战:开发知乎 (9)定义话题与问题关系
1.话题[Topic] 执行命令: php artisan make:model Topic –cmr 修改****_**_**_create_topics_table.php数据库迁移文件如下: c ...
- PHP的isset(),is_null,empty()你了解了没?
这几个变量判断函数在PHP开发中用的其实挺多的,而且粗看上去都差不多,但其实还是有不少的区别的,如果搞不清楚,也许就会遗留一些潜在的bug, 包括我自已也遇到过这样的坑,比如有一次我就遇到过用empt ...
- Apache POI详解
一 :简介 开发中经常会设计到excel的处理,如导出Excel,导入Excel到数据库中,操作Excel目前有两个框架,一个是apache 的poi, 另一个是 Java Excel Apache ...
- Spring Security教程(二):自定义数据库查询
Spring Security教程(二):自定义数据库查询 Spring Security自带的默认数据库存储用户和权限的数据,但是Spring Security默认提供的表结构太过简单了,其实就 ...
- leetcode菜鸡斗智斗勇系列(9)--- Range Sum of BST
1.原题: https://leetcode.com/problems/range-sum-of-bst/ Given the root node of a binary search tree, r ...
- Cisco AP-胖瘦AP的转换
一.瘦AP到胖AP的转换:1.登录到LAP协商的WLC2.从LAP模式恢复到胖AP,输入下面命令:config ap tftp tftp_server_ip filename ap_name注意:需要 ...
- kafka connector
Kafka Connect 是一种用于在 Kafka 和其他系统之间可扩展的.可靠的的流式传输数据的工具.它使得能偶快速定义将大量数据集合移入和移除 kafka 连接器变得简单. kafka conn ...
- 【原】rsync使用
在使用jenkins当跳板机的场景下,有使用git pull 代码到jenkins机器后,需要将代码复制到另一台机器上,常用的复制命令有scp和rsync:现就使用到了rsync进行详解: rsync ...
- 「JSOI2010」找零钱的洁癖
「JSOI2010」找零钱的洁癖 传送门 个人感觉很鬼的一道题... 首先我们观察到不同的数最多 \(50\) 个,于是考虑爆搜. 但是这样显然不太对啊,状态数太多了. 然后便出现了玄学操作: \(\ ...
- Windows 安装python虚拟环境
windows 安装pytho虚拟环境 方法一:virtualenv (1)使用pip安装virtualenv工具 pip install virtualenv (2)使用virtualenv创建虚拟 ...