Servlet
主要内容:
1)表单处理
2)乱码问题
3)页面跳转
4)生命周期

一、表单处理
Servlet获取表单数据
request.getParameter():通过表单参数名获取参数值
request.getParameterValues():若相同参数出现多次,如(复选框),可获取多个值
request.getParameterNames():获取所有参数名列表
二、乱码问题
1)Post请求后台乱码:
request.setCharacterEncoding("UTF-8");
2)get请求后台乱码:
1.修改tomcat中的server.xml: <Connector URIEncoding="UTF-8">
2.String oldStr=request.getParameter("username");
String newStr=new String(oldStr.getBytes("iso-8859-1"),"utf-8"()); //利用java.lang.String中的方法指定编码格式

3)前台响应乱码
response.setCharacterEncoding("UTF-8");
一般我们通过设置:response.setContentType(“text/html;charset=utf-8”);来使得响应消息以utf-8编码格式显示

修改浏览器编码

get和post提交方式的比较:
1.从安全性角度看,get<post get提交的数据会在浏览器的地址栏里显示
2.从提交的内容大小上看,get<post get提交的数据不能大于2K,而post提交的数据理论上不受限制,建议不要大于64K
3.从请求响应的速度看,get>post get要求服务器立即处理请求,post请求可能形成一个请求队列

三、页面跳转
(1)服务器内部跳转
客户端只发一次请求,服务器内部传递请求,地址栏请求信息不变
方法:
i)获取RequestDispatcher
⑴rp=ServletRequest.getRequestDispatcher(path);
path:相对或绝对路径
eg:
//path:代表的是绝对路径,这里的/代表当前的web项目
RequestDispatcher dispatcher = req.getRequestDispatcher("/loginerr.jsp");
dispatcher.forward(req, resp);
//path:代表的是相对路径
RequestDispatcher dispatcher = req.getRequestDispatcher("loginerr.jsp");
dispatcher.forward(req, resp);

⑵rp=ServletCOntext.getRequestDispatcher(path);
path:绝对路径
eg:
RequestDispatcher dispatcher = this.getServletContext().getRequestDispatcher("/loginerr.jsp");
dispatcher.forward(req, resp);
注:这里只能使用绝对路径,如果使用相对路径的话会报如下的错误:

ii)跳转
rp.forward(request,response); //forward跳转会使得忽略之前的响应信息

rp.include(request,response); //include()跳转会合并原来响应的消息并在页面显示出来
(2)客户端重定向
客户端会重新发送一个请求,地址栏请求信息发生改变
方法:
HttpServletResponse.sendRedirect(location);
location:本项目工程资源或任意网络资源
可以跟相对路径,也可以跟绝对路径
eg:
⑴resp.sendRedirect("/servlet/loginerr.jsp"); //servlet是我的WEB项目名称
⑵resp.sendRedirect("loginerr.jsp"); //相对路径
⑶resp.sendRedirect("/strut/login.jsp"); //strut是我的另一个WEB项目名称
⑷resp.sendRedirect("http://baidu.com"); //跳转到百度主页

⑸resp.sendRedirect("/loginerr.jsp"); //这会报404错误

比较sendRedirect()和request.getRequestDispatcher().forward(request,response)之间的区别
请问  sendRedirect() 和 forward 的区别是什么
答:
(1) 叫法 sendRedirect() 重定向,转发  forward() 叫转向
(2) 实际发生的位置不一样
sendRedirect 发生 浏览器
forward 发生 web服务器
(3) 用法不一样
request.getRequestDispatcher(“/资源URI”).forward(request,response)
response.sendRedirect(“/web应用/资源URI”);
(4) 能够去URL 范围不一样
sendRedirect 可以去 外边URL
forward 只能去当前的WEB应用的资源

(3)相对路径与绝对路径
相对路径:
相对当前位置查找的路径
绝对路径:
前台或后台重定向:CATALINA_HOME/webapps
后台内部跳转:
CATALINA_HOME/webapps/当前项目名
四、生命周期
(1)servlet创建时机
服务器启动或第一次被请求时,由以下标签进行自定义
<load-on-startup>num</load-on-startup>
num>=0,预先加载,值越小越先加载
num<0,延迟加载,默认值为-1
(2)servlet从创建到销毁遵循如下过程:
0)类加载与实例化
1)调用init()方法进行初始化
该方法仅在构建servlet实例时调用。
因servlet为单例模式,故该方法一般仅调用一次。
用于:
创建或加载一些数据,这些数据被用于servlet的整个生命周期
2)调用service()方法处理客户端请求
当客户端有请求时,服务器端均会产生一个线程来执行该方法来处理请求。
适当时会交给doGet()或doPost()
3)调用destroy()进行销毁操作
Servlet生命周期结束时调用,一般仅调用一次
destory()方法调用时机:
web应用 reload 或者 关闭 tomcat 或者 关机,web服务器将调用destroy()方法,将该servlet从服务器内存中删除。

用于:
关闭数据库连接、停止后台线程等清理操作。
4)JVM垃圾回收

转载于:https://www.cnblogs.com/Ant-soldier/p/5045973.html

servlet学习笔记二相关推荐

  1. [转载]dorado学习笔记(二)

    原文地址:dorado学习笔记(二)作者:傻掛 ·isFirst, isLast在什么情况下使用?在遍历dataset的时候会用到 ·dorado执行的顺序,首先由jsp发送请求,调用相关的ViewM ...

  2. Servlet学习笔记 Servlet原理

    Servlet学习笔记 Servlet原理 一.Servlet基础 1.Servlet执行过程 用户请求一个Servlet,Servlet容器自动构建请求和响应对象,然后执行Servlet的servi ...

  3. 码匠社区学习笔记(二)

    所需资料 教程视频地址 Bootstrap spring模板 elasticsearch中文社区(想模仿的效果) 码云aAuth 获取授权用户的资料 github第三方授权文档 码匠社区学习笔记(二) ...

  4. springmvc学习笔记二:重定向,拦截器,参数绑定

    springmvc学习笔记二:重定向,拦截器,参数绑定 Controller方法返回值 返回ModelAndView controller方法中定义ModelAndView对象并返回,对象中可添加mo ...

  5. qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...

  6. PyTorch学习笔记(二)——回归

    PyTorch学习笔记(二)--回归 本文主要是用PyTorch来实现一个简单的回归任务. 编辑器:spyder 1.引入相应的包及生成伪数据 import torch import torch.nn ...

  7. tensorflow学习笔记二——建立一个简单的神经网络拟合二次函数

    tensorflow学习笔记二--建立一个简单的神经网络 2016-09-23 16:04 2973人阅读 评论(2) 收藏 举报  分类: tensorflow(4)  目录(?)[+] 本笔记目的 ...

  8. Scapy学习笔记二

    Scapy学习笔记二 Scapy Sniffer的用法: http://blog.csdn.net/qwertyupoiuytr/article/details/54670489 Scapy Snif ...

  9. Ethernet/IP 学习笔记二

    Ethernet/IP 学习笔记二 原文链接:http://wiki.mbalib.com/wiki/Ethernet/IP 1.通信模式 不同于源/目的通信模式,EtherNet/IP 采用生产/消 ...

最新文章

  1. rand函数的使用方法php,PHP array_rand()函数 使用基础教程
  2. SendMessage 循环按1 到6 F1到F8_2
  3. 闲谈:我为什么热爱开源
  4. php实现 字符串加密(分类分布分工,化不可能为可能)
  5. java 命令行 读取文件_java – 将文件作为命令行参数传递并读取其行
  6. RxJava2.0——从入门到放弃
  7. 《淘宝网开店 拍摄 修图 设计 装修 实战150招》一一2.8  黄金分割的三分法构图...
  8. CS224N刷题——Assignment1.4_情感分析
  9. linux match函数,关于VLOOUP函数与index match函数
  10. 计算机无法打印图片,为什么电脑打印不了图片 电脑里的图片无法打印处理方法...
  11. 计算机图桌面打印出来,桌面图片打印设置方法
  12. 数字电路基础01(含半加器、全加器、逻辑化简、卡诺图化简)
  13. 基于深度强化学习的完全AI自动的俄罗斯方块游戏
  14. bde oracle 商友的流程_怎么用BDE连接Oracle?(100分)
  15. Ubuntu18.04 RTL8169驱动更换RTL8168驱动
  16. 关于最近的总结(收心)
  17. 【js】三种JS截取字符串方法
  18. EPSON ESC/POS打印机指令
  19. 【C语言】用递归编写程序计算Hermite Polynomials(厄密多项式)
  20. BZOJ4706 B君的多边形 (超级卡特兰数/施罗德数)

热门文章

  1. 如何切换svn用户?
  2. DEBUG命令的应用
  3. KD-VLP:知识蒸馏和预训练还能这么结合?上科大IntelMSRA提出基于知识蒸馏的端到端多模态预训练模型...
  4. 深度学习助力异常胸部 X 光片检测
  5. CVPR 2021奖项出炉:最佳论文花落马普所,何恺明获提名,首届黄煦涛纪念奖颁布...
  6. 免费数据集获取加速器|Graviti Open Datasets
  7. IoU-aware的目标检测,显著提高定位精度
  8. ICCV 2019 Best Paper :SinGAN 解读,强烈推荐!
  9. 【python教程入门学习】学python要多久,0基础学python有多难
  10. 大神交流经验!浙大吴飞与贾扬清经典十问!