您的位置:首页 > 理论基础 > 计算机网络

Servlet常用的六个对象

2017-08-02 21:45 134 查看
一.ServletConfig

该类对象可以读取init-param中的初始化数据。(为某一个servlet配置初始化参数)

web.xml配置文件
<servlet>
<display-name> </display-name>
<servlet-name>demo1</servlet-name>
<servlet-class>web.demo1</servlet-class>
<init-param>
<param-name>data</param-name>
<param-value>xxxxx</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>demo1</servlet-name>
<url-pattern>/demo1</url-pattern>
</servlet-mapping>

java 代码

public class demo1 extends HttpServlet {
  
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String value = this.getServletConfig().getInitParameter("data");
System.out.println(value);
}
 
}
若要读取多个参数则用 这个方法: this.getServletConfig().getInitParameterNames();返回一个参数名的枚举列表,遍历获取参数名然后读取值。
二.ServletContext

WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用,是一个全局的环境变量。该应用中的任何组件,在任何时候都可以访问到该对象,所以Servlet上下文具有唯一性。

1.利用该对象实现多个servlet直接的数据共享,如下案例 

在demo1中为servletContext添加属性data值为hello,在demo2中对添加的数据进行读取。

Demo:

public class Demo1 extends HttpServlet {

@Override
protected void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
String data="hello";
this.getServletContext().setAttribute("data", data);
}

}
public class Demo2 extends HttpServlet {

@Override
protected void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
String value=(String) this.getServletContext().getAttribute("data");
System.out.println(value);
}

}
2.servletContext可以为整个web应用配置初始化参数,在程序中可以直接读取这些参数值。

<context-param>
<param-name>data</param-name>
<param-value>xxxxx</param-value>
</context-param>
读取方式与servletConfig大同小异。

3.读取资源文件

三.response

1.当servlet向客户端发送中文字符时会出现乱码 原因是服务器将数据给resoponse时,res解码方式为iso-8859-1,解决方式:

设置response解码方式: res.setCharacterEncoding("utf-8");

response将数据给浏览器时,设置浏览器读取内容的编码格式 

res.setContentType("text/html;charset=utf-8");

这两句写一句即可。

2.实现重定向

response.sendRedirect();原理 302状态码+location

使用场景:登录后跳转至首页,购物后跳转至购物车页面

四。request

1.处理post方式提交中文参数值,服务器接收时需声明request.setCharEncoding("utf-8)

2.处理get方式提交中文参数值,服务器接受到参数name后new String(name.getBytes("iso-8859-1"),"utf-8");

3.转发绑定数据:request.setAttribute("data","xxxxx");

req.getRequestDispatcher("find.jsp").forward(req, res);

完成数据的传递。

五.Cookie

Cookie是客户端技术,程序把每个用户的数据以cookie形式写个浏览器,当用户以浏览器去访问服务器时就会带着各自的数据去访问。

案例:显示浏览器上次访问时间

res.setCharacterEncoding("utf-8");
res.setContentType("text/html;charset=utf-8");
PrintWriter pw = res.getWriter();
pw.println("你上次访问时间是:");

//获得用户cookie
Cookie []cookies = req.getCookies();
for(int i=0;cookies!=null&&i<cookies.length;i++){
if(cookies[i].getName().equals("lastAccessTime")){
String t = cookies[i].getValue().trim();
long cookieValue = Long.parseLong(t);
Date date = new Date(cookieValue);
pw.println(date.toLocaleString());
}
}

//返回给用户最新的时间
long time = System.currentTimeMillis();
Cookie cookie = new Cookie("lastAccessTime",String.valueOf(time));
cookie.setMaxAge(5);
cookie.setPath("/TestCookie");
res.addCookie(cookie);

注:
浏览器一般最多可以存300个cookie,每个站点存20个,过多会清除不常用的cookie,每个cookie限制大小4KB

cookie默认有效时间为本次回话,浏览器关闭即cookie消失

六 Session

session是服务器端的技术,服务器在运行时可以为每个用户的浏览器创建一个session对象为用户浏览器独享,用户可以将数据存放于session中,访问web时可以从中取出数据

注意:session在30分钟 后若没人使用则服务器自动销毁

案例:在一个servlet中添加一个sesiion在另一程序中获取

HttpSession session= req.getSession();

session.setAttribute("name","张三");

HttpSession session= req.getSession();

String name = (String)session.getAttribute("name");

移除session:

session.removeAttribute("name");用于注销登录

session销毁:

1. <session-config>
<session-timeout>10</session-timeout>

</session-config>

如上在配置文件中设置session的销毁时间为10分钟

2.利用代码销毁session

session.invalidate();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息