zoukankan      html  css  js  c++  java
  • 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垃圾回收

  • 相关阅读:
    使用命令行管理virtualBox
    springboot activiti 整合项目框架源码 shiro 安全框架 druid 数据库连接池
    activiti工作流的web流程设计器整合视频教程 SSM 和 独立部署
    java springMVC SSM 操作日志 4级别联动 文件管理 头像编辑 shiro redis
    MVC、MVP、MVVM 模式对比
    GoBelieve IM 消息推送的方案
    Token生成(转载)
    ios的framework合并
    Gobelieve 架构(转载)
    xcode10不兼容问题解决方法,framework编译脚本
  • 原文地址:https://www.cnblogs.com/Ant-soldier/p/5045973.html
Copyright © 2011-2022 走看看