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学习笔记二的更多相关文章

  1. Servlet学习笔记(二)

    目录 Servlet学习笔记(二) Request对象 1.request和response对象: 2.request对象继承体系结构: 3.什么是HttpServletRequest ? 4.Htt ...

  2. Servlet学习笔记(三)

    目录 Servlet学习笔记(三) 一.HTTP协议 1.请求:客户端发送欸服务器端的数据 2.响应:服务器端发送给客户端的数据 3.响应状态码 二.Response对象 1.Response设置响应 ...

  3. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  4. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  5. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  6. JMX学习笔记(二)-Notification

    Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...

  7. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

  8. Java IO学习笔记二

    Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...

  9. 《SQL必知必会》学习笔记二)

    <SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...

随机推荐

  1. Json.Net使用JSON Schema验证JSON格式【实例】

    给出一个Json,验证其格式是否符合规则. { "coord": { //对象 "lon": 145.77, "lat": -16.92 } ...

  2. 移植net-snmp到开发板(mini210)

    1.安装交叉编译工具arm-linux-gcc 2.下载net-snmp源码安装包 3.解压安装包 4../configure --build=i686-linux --host=arm-linux ...

  3. Team Homework #2 Decide the roles of each team member ——IloveSE

    大家好,我们是IloveSEers! 徐姗,我是一个性格开朗,但却认为计算机比较枯燥的女生.经过两年的学习,自己的编程能力,并不是很强,在这方便还需多多练习.对于软件工程这门课,我充满期待,因为我不仅 ...

  4. Spring事务总结

    事务是什么? 事务就是用来解决类似问题,事务是一系列的动作,它们综合在一起才是一个完整的工作单元,这些动作必须全部完成,如果有一个失败,那么事务就会回滚到最开始的状态,仿佛什么都没有发生过.在企业级应 ...

  5. asp.net动态添加GridView的模板列,并获取列值

    一.动态添加模板列: 1.建立模板列样式: 说明:下边代码可以直接写在aspx文件中,也可以单独建立cs文件:另外,我没有写button.linkButton等控件,意思差不多,不过当需要添加事件时, ...

  6. 前端之JavaScript第四天学习(10)-JavaScript-运算符

    运算符 = 用于赋值. 运算符 + 用于加值. 运算符 = 用于给 JavaScript 变量赋值. 算术运算符 + 用于把值加起来. y=5; z=2; x=y+z; 在以上语句执行后,x 的值是 ...

  7. 资料共享平台----nabcd

    知识共享平台NABCD模型 N(need)需求 大一新生刚刚开始大学生活,不适应大学学习生活的节奏,并且课堂上知识容量大.密度高,学生不能立刻掌握所学知识点,同时,网上资料冗杂繁复,指向性不强,导致学 ...

  8. Leetcode#129 Sum Root to Leaf Numbers

    原题地址 二叉树的遍历 代码: vector<int> path; int sumNumbers(TreeNode *root) { if (!root) ; ; path.push_ba ...

  9. 二分图匹配 分类: ACM TYPE 2014-10-01 19:57 94人阅读 评论(0) 收藏

    #include<cstdio> #include<cstring> using namespace std; bool map[505][505]; int n, k; bo ...

  10. jquery的ajax向后台提交时,乱码的解决方案

    1. 可以给每个参数加上encodeURIComponent(),然后在后台获得参数后用URLDecoder.decode(string, 'utf-8')解码. 2. 后台不用解码. $.ajax( ...