servlet学习笔记二
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垃圾回收
servlet学习笔记二的更多相关文章
- Servlet学习笔记(二)
目录 Servlet学习笔记(二) Request对象 1.request和response对象: 2.request对象继承体系结构: 3.什么是HttpServletRequest ? 4.Htt ...
- Servlet学习笔记(三)
目录 Servlet学习笔记(三) 一.HTTP协议 1.请求:客户端发送欸服务器端的数据 2.响应:服务器端发送给客户端的数据 3.响应状态码 二.Response对象 1.Response设置响应 ...
- WPF的Binding学习笔记(二)
原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
- [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计
源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...
- JMX学习笔记(二)-Notification
Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...
- java之jvm学习笔记二(类装载器的体系结构)
java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...
- Java IO学习笔记二
Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...
- 《SQL必知必会》学习笔记二)
<SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...
随机推荐
- 子网划分与CIDR(斜杠加数字的表示与IP 的关系)(改进)
子网和CIDR 将常规的子网掩码转换为二进制,将发现子网掩格式为连续的二进制1跟连续0,其中子网掩码中为1的部份表示网络ID,子网掩中为0的表示主机ID.比如255.255.0.0转换为二进制为1 ...
- 深入理解CSS3 animation的steps
在应用 CSS3 渐变/动画时,有个控制时间的属性 <timing-function> .它的取值中除了常用到的三次贝塞尔曲线以外,还有个让人比较困惑的 steps() 函数. steps ...
- SASS学习笔记_01
scss两种格式 sass 大括号 scss css写法 Arguments: --no-cache –style compressed --update $FileName$:c ...
- 【CentOs】搭建svn服务器
参考资料: svn攻略: http://blog.csdn.net/colinchan/article/details/1865154 错误解决:http://hi.baidu.com/anglem/ ...
- 版本控制 - SVN/TortoiseSVN
研读了blog: 1. http://www.open-open.com/lib/view/open1346982569725.html 2. http://www.360doc.com/conte ...
- IIS Express 一个网站配置多个 域名
在配置localhost和IP都可以访问: 方法1: applicationhost.config文件配置: <bindings> <binding protocol=& ...
- c# 简单文件流读写CSV文件
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.R ...
- wireshark常用的过滤命令
我们使用wireshark抓包,却不知道如何分析这些包,也无法从海量的包中提取自己需要的数据,下面简单介绍下wireshark的过滤规则. 过滤源ip.目的ip.在wireshark的过滤规则框Fil ...
- CSRF攻击之原理讲解
|=——————————————————————=| |=————–=[ CSRF攻击原理解析 ]=——————=| |=——————————————————————=| |=——————-=[ By ...
- 纯CSS3实现3D动画导航,html5 webRTC技术实现免费网页电话拨打
花了一周的时间完成了 说吧 (免费网页电话) 的前端开发工作,先将技术点总结如下: 免费电话采用最新的html5 webRTC 技术 实现互联网和电信MIS网互通实现网页电话,目前只有 google ...