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 可以去 外边URLforward 只能去当前的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
相关资源:JSP & Servlet学习笔记