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查询,即从单个数据库表中检索数据的单条语 ...
随机推荐
- 微信扫码支付asp.net(C#)实现步骤
支付提交页面: [HttpPost] public ActionResult index(decimal amount) { //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯 ...
- GNU make 总结 (四)
一.执行make程序 make的退出状态: 0 --- 表示执行成功 1 --- 表示执行make时使用了“-q”参数,而且当前工程中存在过时的目标文件 2 --- 执行过程中出现了错误,同时会提示错 ...
- Linux Centos 6.6搭建SFTP服务器
Linux Centos 6.6搭建SFTP服务器 在Centos 6.6环境使用系统自带的internal-sftp搭建SFTP服务器. 打开命令终端窗口,按以下步骤操作. 0.查看openssh的 ...
- AngularJs学习笔记-慕课网AngularJS实战
第1章 快速上手 放弃了IE8以及以下,不支持. 4大核心特性: 1.MVC Model: 数据模型 View:视图 Controller:业务逻辑和控制逻辑 好处:职责清晰,模块化. 2.模块化 3 ...
- C++实现禁忌搜索解决TSP问题
C++实现禁忌搜索解决TSP问题 使用的搜索方法是Tabu Search(禁忌搜索) 程序设计 1) 文件读入坐标点计算距离矩阵/读入距离矩阵 for(int i = 0; i < CityNu ...
- java 顺序表
想看看java版的数据结构,了解一下树的一些操作,写了个顺序表熟悉一下 package com.sqlist; /** * @author xiangfei * 定义一个顺序表 * */ public ...
- ORACLE 检查数据库表中是否存在不规范字 段的语句参考.sql
--查看是否有除number,char,date,varchar2,clob/blob之外的类型,比如:NVARCHAR2,TIMESTAMP(6),FLOATSELECT DISTINCT a.DA ...
- ArrayList、LinkedList、Vector的区别
Arraylist和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加插入元素,都允许直接序号索引元素,但是插入数据要涉及到数组元素移动等内存操作,所以插入数据慢,查找有下标, ...
- 多种方法实现H5网页图片动画效果;
在web开发中,GIF动画效果是随处可见,比如常见的loading加载.人物奔跑的gif图片等等,那么这些都是怎么实现的呢?其实实现的原理很简单,简而言之,这些所谓的动画都是一帧一帧的图片经过一段时间 ...
- android listview和button,ImageButton等有事件的控件的总结
public ImageButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defSty ...