JavaWeb之Servlet

来源:互联网 发布:linux压缩目录命令tar 编辑:程序博客网 时间:2024/06/05 14:30

Servlet生命周期

  • 生命周期
<load-on-startup>0</load-on-startup>

当属性值为正整数范围内,Servlet会按照值的大小来启动
值越小的启动越早
当被访问时构造并初始化,先执行带参的init再执行不带参的
最后在服务器关闭的销毁

Servlet在接收请求和输出时乱码


  • request乱码时

请求为post时,在程序的第一行加入
请求为get时,无法通过request本身解决
需要重新编码

request.setCharsetEncoding("utf-8");new String(name.getBytes("iso-8859-1"),"utf-8")
  • response乱码时
//在页面加入<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />//在程序中加入response.setCharacterEncoding("UTF-8");response.setHeader("content-type","text/html;charset=UTF-8");response.setContentType("text/html;charset=utf-8");

Servlet的属性

  • ServletConfig:从一个servlet被实例化后,对任何客户端在任何时候访问有效,但仅对本servlet有效,一个servlet的ServletConfig对象不能被另一个servlet访问。

  • ServletContext:对任何servlet,任何人在任何时间都有效

<init-param>    <param-name>charset</param-name>     <param-value>GB2312</param-value> </init-param>

当init-param单独配置在servlet标签中则是ServletConfig的值,并且只有对应的Servlet才能拿到
而配置在web-app中则是ServletContext的值,任何时刻都能获取到

Servlet的转发和重定向


  • 转发forword

假设浏览器访问servlet1,而servlet1想让servlet2为客户端服务。此时servlet1调用forward()方法,将请求转发给servlet2。但是调用forward()方法,对于浏览器来说是透明的,浏览器并不知道为其服务的Servlet已经换成Servlet2,它只知道发出了一个请求,获得了一个响应。浏览器URL的地址栏不变。

request.getRequestDispatcher("目标servlet").forword(req,res);


  • 重定向sendRedirect

假设浏览器访问servlet1,而servlet1想让servlet2为客户端服务。此时servlet1调用sendRedirect()方法,将客户端的请求重新定向到Servlet2。接着浏览器访问servlet2,servlet2对客户端请求作出反应。浏览器URL的地址栏改变。

response.sendRedirect("目标网页");


  • 二者的区别

sendRedirect()可以发到任意主机,forward不行
forward是同一个请求,request延续
forward浏览器地址栏不发生改变

Servlet中的资源路径

  • getRealPath获取的是项目根路径

    项目部署在哪里路径就在哪里

  • getClass().getResource获取的是类路径

原创粉丝点击