ServletContext类的用法---网页点击量/留言板/图片浏览

这里要明确的是,每一个web应用,拥有一个唯一的ServletContext,当应用启动时创建,当应用关闭时销毁。

ServletContext可用于在同一个Web项目中,共享资源。

一、网页点击量

这里主要就是使用到了一个getServletContext()的方法来新建一个ServletContext的对象,该对象里面有一个count属性,就是用来记录访问量的,我们要获取这个属性,并且赋值,修改值

package cn.hncu.servlets;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ContextServlet extends HttpServlet {
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}
	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
		out.println("<HTML>");
		out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
		out.println("  <BODY>");
		
		ServletContext context=getServletContext();
		Integer count = (Integer) context.getAttribute("count");
		if (count==null){
			count=1;
		} else {
			count++;
		}
		getServletContext().setAttribute("count", count);
		out.println("网站访问量:"+getServletContext().getAttribute("count"));
		
		out.println("  </BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();
	}

}
我们可以写两个相同的,改下名字就就好,在index.jsp中为另一个Servlet再写一个链接,然后到网页中去分别访问这两个,你会发现访问次数不会被清空,而且两边是捆绑的。原因就在于tomcat服务器没有关闭的,关了之后会清空,若不想清空,你可以将访问次数保存到文件中去。Servlet其实相当于是一个单例。


二、留言板

留言板其实还是使用到了getServletContext()方法,getServletContext()就是获取一个ServletContext对象,然后获取其中的一个属性值名为msgs,就是他目前所包含的信息。

这里要注意的是记得要获取留言者的ip地址,这个是必要的一步,以后做项目也必须要这样做,获取ip地址的方法是String ip=request.getRemoteAddr();。

这里我们还使用了getServletContext()方法获取对象使用getInitParameter()去web.xml中获取其中的全局参数

web.xml中加上这一句,与里面的servlet标签要是兄弟关系,不是包含关系

<span style="font-size:14px;"><context-param>
  	<param-name>charset</param-name>
  	<param-value>utf-8</param-value>
</context-param></span>
具体的代码如下:
<span style="font-size:14px;">package cn.hncu.servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.sun.org.apache.bcel.internal.generic.SIPUSH;

public class ChatServlet extends HttpServlet {
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}
	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
		out.println("<HTML>");
		out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
		out.println("  <BODY>");
		
		//显示留言板
		//读取当前用户的留言
		//request.setCharacterEncoding("utf-8");
		//获取servletContext的初始化参数 。注意,用this.getInitParameter()获取到的是servlet的初始化参数
		String charset=getServletContext().getInitParameter("charset");
		request.setCharacterEncoding(charset);
		
		//记得读取留言之前必须要获取留言者的ip
		String ip=request.getRemoteAddr();
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");
		String time=sdf.format(new Date());
		
		String msg=request.getParameter("msg");
		String msgs=(String) getServletContext().getAttribute("msgs");
		if (msgs==null){
			msgs="";
		}
		
		if (msg!=null&&!msg.trim().equals("")){
			if (msgs==null||msgs.equals("")){
				msgs=time+"  "+ip+": "+msg;
			} else {
				msgs=msgs+"<br/>"+time+"  "+ip+": "+msg;
			}
			getServletContext().setAttribute("msgs", msgs);
		}
		
		String div="<div style='border:1px solid red; width:600px; height:400px; overflow:auto'>"+msgs+"</div>";
		out.println(div);
		
		//当前用户的留言表单
		out.println("<hr/>");
		String form="<form action='chat' method='post'>" +
					"留言<input type='text' name='msg'/>" +
					"<input type='submit' value='发送'/>" +
					"</form>";
		out.println(form);
		
		out.println("  </BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();
	}

}</span>

三、图片浏览

本例模拟的是浏览器浏览服务器指定目录下的图片

这里还是使用了getServletContext()方法获取ServletContext的对象,操控上下文

<span style="font-size:14px;">package cn.hncu.servlets;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ShowImgsServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}
	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
		out.println("<HTML>");
		out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
		out.println("  <BODY>");
		
		//※※※获取服务器项目根目录下的imgs文件夹下的所有图片文件名
		String realPath=getServletContext().getRealPath("/imgs");//参数是:项目根目录下的imgs文件夹
		//上一句返回的是:资源的绝对路径,即带盘符的路径,如:D:\apache-tomcat-7.0.30\webapps\servletDemo2\imsgs
		
		File file=new File(realPath);
		//防范一下
		if (!file.exists()||!file.isDirectory()){
			return;
		}
		
		String[] fileNames=file.list();
		for (String fileName:fileNames){
			String img="<img width=200 height=200 src='imgs/"+fileName+"'/>";
			out.println(img);
		}
		
		out.println("  </BODY>");
		out.println("</HTML>");
		out.flush();
		out.close();
	}

}</span>




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值