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查询,即从单个数据库表中检索数据的单条语 ...
随机推荐
- 8 C#中的字符串输出
我们在前面已经用Console.WriteLine("*********")往dos窗口中输出过字符串.我们还定义过字符串的变量. string words ="我喜欢D ...
- 零基础学习Linux(三)linux与windows文件共享
上次的博文零基础学习Linux(一)环境搭建中我们已经将linux环境部署完毕了,接下来我们就可以在linux上进行软件的安装和环境的配置.但在进行这些操作之前,我们还需要解决一个问题——Linux与 ...
- 不再让内容把td撑开
<style type="text/css"> table {width:600px;table-layout:fixed;} td {white-space:nowr ...
- 字符串流sstream[part2/使用同一个字符串流反复读写数据]
stringstream构造函数会特别消耗内存,似乎不打算主动释放内存(或许是为了提高效率),如果你要在程序中使用同一个流反复读写大量数据,将会造成大量的内部消耗,因此建议: 1:调用clear ...
- java面试资料总结
一.java基础部分 1.一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制? 可以,但是只能有一个public类,且类名与文件名相同 2.java有没有goto? goto是ja ...
- 向Array中添加二分插入排序
二分插入排序思路 先在有序区通过二分查找的方法找到移动元素的起始位置,然后通过这个起始位置将后面所有的元素后移. 二分插入排序实现 Function.prototype.method = functi ...
- SQL SERVER中查询无主键的SQL
--生成表 IF EXISTS ( SELECT name FROM sysobjects WHERE xtype = 'u' ...
- UBOOT分析
U-Boot是一个通用的Boootloader,它是在系统上电后执行的第一段程序,先初始化硬件设备,再准备软件环境,最后引导系统内核. 一般来说Bootloader的启动过程来说一般分两个阶段: 第一 ...
- nsight 使用问题
slot 0 offset 0 stride DXGI_FORMAT_r32b32g32_FLOAT 这样一个memory 100.0000, 100.0000,10.0000,1.0000 stri ...
- int型整数的数值范围
假设int型用两个字节表示对于有符号的整数,用补码表示的话,最高位是符号位,后面15位用来表示数据.1.正数,表示的范围为0000 0000 0000 0001-0111 1111 1111 1111 ...