lingling

 
 

常用链接

  • 我的随笔
  • 我的评论
  • 我的参与
  • 最新评论

留言簿(1)

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔档案

  • 2011年1月 (2)
  • 2010年12月 (5)
  • 2010年11月 (7)
  • 2010年10月 (15)

搜索

  •  

最新评论

  • 1. re: QQ发送消息[未登录]
  • X脑子有问题?
  • --1
  • 2. re: QQ发送消息
  • sdg sdgsdfgsdf
  • --风格
  • 3. re: listener监听器
  • 不是,应该是同时多个人访问一台服务器时,服务器的承受能力@咖啡
  • --风铃
  • 4. re: listener监听器[未登录]
  • @小小


    考虑并发,什么意思?如果一秒钟内同时有2人进入网站,监听不到?
  • --咖啡
  • 5. re: listener监听器
  • 初学者,没考虑到那么多@小小
  • --lingling

阅读排行榜

  • 1. 过滤器—防止未登录直接访问网站内部(2935)
  • 2. listener监听器(2190)
  • 3. Junit测试(2080)
  • 4. MVC小程序(1879)
  • 5. 邮箱自动登录(1590)

评论排行榜

  • 1. 学生成绩处理程序(7)
  • 2. listener监听器(4)
  • 3. MVC小程序(4)
  • 4. 过滤器—防止未登录直接访问网站内部(4)
  • 5. Http乱码过滤器(4)

Powered by: 博客园
模板提供:沪江博客
BlogJava | 首页 | 发新随笔 | 发新文章 | 联系 | 聚合 | 管理

2010年12月13日

Junit测试

 

 

Junit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。

 

1 junit特性

  

  

junit

Junit是一个开放源代码的Java测试框架,用于编写和运行可重复的测试。他是用于单元测试框架体系xUnit的一个实例(用于java语言)。它包括以下特性:

  ① 用于测试期望结果的断言(Assertion)

  ② 用于共享共同测试数据的测试工具

  ③ 用于方便的组织和运行测试的测试套件

④ 图形和文本的测试运行器

 
2 Eclipse中配置Junit

右击要使用的junit的项目,点击properties—java bulid path-libraries,点击Add External JARs,加上JUNIT包。

 

 3 用法

- 创建,从junit.framework.TestCase派生nuit test需要的test case.

- 书写测试方法

- 编译 书写玩test case后,编译所写的test case类

- 运行,启动junit test runnner 来运行这个test case。

 

 

实例代码:

package com.dr.test;

 

import java.util.List;

 

import junit.framework.TestCase;

import com.dr.dao.StudentDao;

import com.dr.dao.impl.StudentDaoImpl;

import com.dr.vo.Student;

 

public class StudentDaoImplTest extends TestCase{

   

    StudentDao dao;

   

    protected void setUp() throws Exception{

       dao=new StudentDaoImpl();

      

    }

    protected void tearDown() throws Exception{

      

    }

    public void testAdd(){

       Student stu=new Student();

       stu.setName("ling");

       stu.setAge(1);

       stu.setEmail("ling@126.com");

       dao.addStudent(stu);

    }

    public void testListStudent(){

       List<Student> list=dao.getStudentList();

       System.out.println(list.size());

    }

   

}

 

Junit中的两个函数:setUp与tearDown,是junit framework中提供初始化金额反初始化每个测试方法的。setUp在每个测试方法调用前被调用,负责初始化测试方法所需要的测试环境;teardown在每个测试方法被调用之后被调用,负责撤销测试环境。

 

测试结果:

 

在JUnit的窗口中显示了一个绿条,绿条证明测试成功。

 

posted @ 2011-01-23 10:20 向日葵 阅读(2080) | 评论 (0) | 编辑 收藏
 
listener监听器
 

Listener是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。当增加一个HttpSession时,就激发sessionCreated(HttpSessionEvent se)方法,这样就可以给在线人数加1。常用的监听接口有以下几个:

ServletContextListener监听ServletContext。当创建ServletContext时,激发 contextInitialized(ServletContextEvent sce)方法;当销毁ServletContext时,激发contextDestroyed(ServletContextEvent sce)方法。

ServletContextAttributeListener监听对ServletContext属性的操作,比如增加、删除、修改属性。

HttpSessionListener监听HttpSession的操作。当创建一个Session时,激发session Created(HttpSessionEvent se)方法;当销毁一个Session时,激发sessionDestroyed (HttpSessionEvent se)方法。

HttpSessionAttributeListener监听HttpSession中的属性的操作。当在Session增加一个属性时,激发 attributeAdded(HttpSessionBindingEvent se) 方法;当在Session删除一个属性时,激发attributeRemoved(HttpSessionBindingEvent se)方法;当在Session属性被重新设置时,激发attributeReplaced(HttpSessionBindingEvent se) 方法。

下面我们开发一个具体的例子,这个监听器能够统计在线的人数。

程序源代码:

package com.dr.web.listener;

import javax.servlet.ServletContext;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

import javax.servlet.http.HttpSessionEvent;

import javax.servlet.http.HttpSessionListener;

publicclass UserCountListener implements ServletContextListener,

       HttpSessionListener {

    //每个web应用都有且仅有一个ServletContext对象,这个对象在所有的Servlet都可以使用。

    /**

     * 因为一个web应用就一个ServletContext 对象,因此可以使用ServletContext 来做一些全局性的属性设置等。

     * 比如网站访问计数器等等

     *

     *

     * ServletContext 是一个应用程序与Web容器(tomcat之类)交互的接口,同时它也是管理应用程序资源的对象,

                                                   通过它可以读取web.xml中一些配置,如<context-param>中的信息,读取应用中的资源等。

       Session 是一个会话对象,也就是说当客户端访问服务器页面时,它才产生,

                                        原理是服务器对每个客户端产生一个sessionid值,并把它也保存在客户端,

                                        每次请求时验证这个sessionid是否是创建了sessionid的客户端,在服务器端对应这个sessionid会创建一个缓存区,

                                        存储一些相关信息,程序员可以操作,如被用于购物车,存储用户信息等,这个区域只有对特定用户有访问权限,对其他客户是拒绝访问的,这就是一个会话。

       Request 是一个请求对象,也就是说它的生命很短暂,只在一个请求中存在,如一个页面到另一个页面,

                                     一个页面到servlet或action,一个servlet或action到jsp页面等,你可以用它的setAttribute方法传递需要的信息(对象),验证请求方的信息,获得请求方发过来的文件内容等。

     */

    private ServletContext sc;

    publicvoid contextDestroyed(ServletContextEvent arg0) {

   

    }

    publicvoid contextInitialized(ServletContextEvent event) {

      

       ServletContext sc = event.getServletContext();

       sc.setAttribute("Users", new Integer(0));

       this.sc = sc;

    }

    publicvoid sessionCreated(HttpSessionEvent event) {//在线

       System.out.println("new user login our web site");

       Integer users = (Integer)sc.getAttribute("Users");

       sc.setAttribute("Users", ++users);

    }

    publicvoid sessionDestroyed(HttpSessionEvent event) {

       Integer users = (Integer)sc.getAttribute("Users");

       sc.setAttribute("Users", --users);

    }

}

Web.xml中配置如下:

    <listener>

       <listener-class>com.dr.web.listener.UserCountListener</listener-class>

    </listener>

在UserCountListener里,用users代表当前在线的人数,UserCountListener将在Web服务器启动时自动执行。当UserCountListener构造好后,把users设置为 0。每增加一个Session,UserCountListener会自动调用sessionCreated(HttpSessionEvent event)方法;每销毁一个Session,UserCountListener会自动调用 sessionDestroyed(HttpSessionEvent se)方法。当调用sessionCreated(HttpSessionEvent event)方法时,说明又有一个客户在请求,此时使在线的人数(users)加1,并且把user写到ServletContext中。 ServletContext的信息是所有客户端共享的,这样,每个客户端都可以读取到当前在线的人数。

运行结果:


posted @ 2011-01-18 21:39 向日葵 阅读(2190) | 评论 (4) | 编辑 收藏
 
MVC小程序
     摘要:   MVC是三个单词的缩写,分别为: 模型(Model),视图(View)和控制Control)。 MVC模式的目的就是实现Web系统的职能分工。 Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现。 View层用于与用户的交互,通常用JSP来实现。 Control层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可...  阅读全文
posted @ 2010-12-14 10:35 向日葵 阅读(1879) | 评论 (4) | 编辑 收藏
 
过滤器—防止未登录直接访问网站内部
 

有些网站需要登录以后才能访问网站内部资源,这就需要我们做一个过滤器,当用户访问网站内部资源时,要先经过过滤器,过滤器判断是否有这个用户,有则跳转进入网站内部页面,没有则返回登录页面。

 

过滤器代码:

package com.dr.course;

 

import java.io.IOException;

 

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

 

import com.dr.common.Global;

import com.dr.vo.User;

 

public class IsLoginFilter implements Filter {

 

       public void destroy() {

             

       }

 

       public void doFilter(ServletRequest request, ServletResponse response,

                     FilterChain filterChain) throws IOException, ServletException {

             

              System.out.println("every request pass here");

              HttpServletRequest hrequest=(HttpServletRequest)request;

              HttpSession session=hrequest.getSession();

              User user =     (User)session.getAttribute(Global.USER);

              if(user == null){

                     //跳转到登陆页面

            hrequest.getRequestDispatcher("/index.jsp").forward(request,response);                 

              }

              filterChain.doFilter(request, response);

       }

 

       public void init(FilterConfig filterConfig) throws ServletException {

             

       }

 

}

 

LoginServlet类,进行登录之后的处理:

package com.dr.course;

 

import java.io.IOException;

 

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

 

import com.dr.common.Global;

import com.dr.vo.User;

 

public class LoginServlet extends HttpServlet{

      

       public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{

             

              String userName=request.getParameter("username");

              String passWord=request.getParameter("password");

             

          

            System.out.println("userName | " + userName);

            System.out.println("passWord | " + passWord);

            User user = new User();

            user.setUserName(userName);

            user.setPassWord(passWord);

            HttpSession session = request.getSession();

            //登录成功,把User放到session,然后在拦截器中判断

            //key--value

            session.setAttribute(Global.USER, user);

            request.getRequestDispatcher("/admin/main.jsp").forward(request, response);

             

             

             

       }

 

}

 

web.xml中配置如下:

- <filter>

  <filter-name>isLogin</filter-name>

  <filter-class>com.dr.course.IsLoginFilter</filter-class>

  </filter>

- <filter-mapping>

  <filter-name>isLogin</filter-name>

  <url-pattern>/admin/*</url-pattern>

  </filter-mapping>

- <servlet>

  <servlet-name>login</servlet-name>

  <servlet-class>com.dr.course.LoginServlet</servlet-class>

  </servlet>

- <servlet-mapping>

  <servlet-name>login</servlet-name>

  <url-pattern>/login</url-pattern>

  </servlet-mapping>


 未登录界面:

成功登录的界面:

posted @ 2010-12-14 10:26 向日葵 阅读(2935) | 评论 (4) | 编辑 收藏
 
邮箱自动登录
 

cookie为用户登陆服务器后,服务器写在客户端的文件。

我们在登录126邮箱时,如果勾选上两周内自动登录,两周内不用输入用户名和密码邮箱会自动登录,这是因为第一次登录时服务器将用户名和密码写入cookie中,并返回给客户端。

下次登录时Http协议会带着用户的cookie去服务器验证,因为服务器已经存储用户的信息,所以会自动登录。

登录代码:

package com.dr.course;

import java.io.IOException;  

import javax.servlet.ServletException;  

import javax.servlet.http.Cookie;  

import javax.servlet.http.HttpServlet;  

import javax.servlet.http.HttpServletRequest;  

import javax.servlet.http.HttpServletResponse;  

public class LoginServlet extends HttpServlet {  

    public void doGet(HttpServletRequest request, HttpServletResponse response)  

            throws ServletException, IOException {  

        this.doPost(request, response);  

    }  

    public void doPost(HttpServletRequest request, HttpServletResponse response)  

            throws ServletException, IOException {  

           String username=request.getParameter("username");  

           String password=request.getParameter("password");  

           String savetime=request.getParameter("saveTime");  

           if(CheckLogin.login(username, password)){  

               if(null!=savetime){  

                   int saveTime=Integer.parseInt(savetime);//这里接受的表单值为天来计算的  

                   int seconds=saveTime*24*60*60;  

                   Cookie cookie = new Cookie("user", username+"=="+password);  

                   cookie.setMaxAge(seconds);                     

                   response.addCookie(cookie);  

               }  

               request.setAttribute("username",username);  

               request.getRequestDispatcher("/main126.jsp").forward(request,response);  

           }else{  

               request.getRequestDispatcher("/failure.jsp").forward(request,response);  

           }  

    }  

}  

验证代码:

package com.dr.course;

import java.io.IOException;  

import javax.servlet.Filter;  

import javax.servlet.FilterChain;  

import javax.servlet.FilterConfig;  

import javax.servlet.ServletException;  

import javax.servlet.ServletRequest;  

import javax.servlet.ServletResponse;  

import javax.servlet.http.Cookie;  

import javax.servlet.http.HttpServletRequest;  

import javax.servlet.http.HttpServletResponse;  

public class IndexFilter implements Filter {  

    public void destroy() {  

        // TODO Auto-generated method stub  

    }  

    public void doFilter(ServletRequest arg0, ServletResponse arg1,  

            FilterChain arg2) throws IOException, ServletException {

          

           System.out.println("every request pass here haha");

        HttpServletRequest request = (HttpServletRequest) arg0;  

        HttpServletResponse response = (HttpServletResponse) arg1;  

        Cookie[] cookies = request.getCookies();  

        String[] cooks = null;  

        String username = null;  

        String password = null;  

        if (cookies != null) {  

            for (Cookie coo : cookies) {  

                String aa = coo.getValue();  

                cooks = aa.split("==");  

                if (cooks.length == 2) {  

                    username = cooks[0];  

                    password = cooks[1];  

                }  

            }  

        }

        System.out.println("cookie username | " + username);

        System.out.println("cookie password | " + password);

        if (CheckLogin.login(username, password)) {

               System.err.println("check successfully cookie data ");

            request.getSession().setAttribute("username",username);  

            request.getRequestDispatcher("/main126.jsp").forward(request, response);

        }else{  

            arg2.doFilter(request,response );  

        }  

    }  

    public void init(FilterConfig arg0) throws ServletException {  

        // TODO Auto-generated method stub  

    }  

}

package com.dr.course;

public class CheckLogin {

        public static boolean login(String username, String password) {  

               if ("admin".equals(username) && "123456".equals(password)) {  

                   return true;  

               } else {  

                   return false;  

               }  

           }  

}

web.xml中配置如下:

- <filter>

 <filter-name>loginFilter</filter-name>

 <filter-class>com.dr.course.IndexFilter</filter-class>

 </filter>

- <filter-mapping>

 <filter-name>loginFilter</filter-name>

 <url-pattern>/main126.jsp</url-pattern>

 </filter-mapping>

- <servlet>

 <servlet-name>LoginServlet</servlet-name>

 <servlet-class>com.dr.course.LoginServlet</servlet-class>

 </servlet>

- <servlet-mapping>

 <servlet-name>LoginServlet</servlet-name>

 <url-pattern>/login.do</url-pattern>

 </servlet-mapping>

将目录加入到Tomcat中,开启Tomcat,打开浏览器输入网址:http://127.0.0.1:8080/AutoLogin/login.do进行测试。

posted @ 2010-12-13 18:54 向日葵 阅读(1590) | 评论 (0) | 编辑 收藏
 
Http乱码过滤器
 

Http协议中默认的编码字符集和平台字符集都不是中文的,所以Web项目中经常会遇到中文乱码问题。

为防止中文乱码出现,首先我们要把项目中每个网页的编码形式改成中文的,HTML网页中的charset改成UTF-8,JSP网页中的pageEncoding改成UTF-8。

然后我们做一个过滤器,每次对网页的请求都会进入到过滤器,并且把request和response都改成UTF-8编码形式,这样防止了中文乱码的出现。

源代码如下:

package com.dr.servletform;

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.jsp.jstl.core.Config;

public class MyFilter implements Filter{

       String encoding="";

       public void destroy() {

       }

       public void doFilter(ServletRequest request, ServletResponse response,

                     FilterChain chain) throws IOException, ServletException {

              System.out.println("pass here-------");

              request.setCharacterEncoding(encoding);

              response.setCharacterEncoding(encoding);

              chain.doFilter(request, response);

       }

       public void init(FilterConfig config) throws ServletException {

              String encoding=config.getInitParameter("encoding");

              this.encoding=encoding;

              System.out.println(encoding);

       }

}

web.xml中配置如下:

<filter>

 <filter-name>MyFilter</filter-name>

 <filter-class>com.dr.servletform.MyFilter</filter-class>

- <init-param>

 <param-name>encoding</param-name>

 <param-value>UTF-8</param-value>

 </init-param>

 </filter>

- <filter-mapping>

 <filter-name>MyFilter</filter-name>

 <url-pattern>/*</url-pattern>

 </filter-mapping>

posted @ 2010-12-13 18:44 向日葵 阅读(1398) | 评论 (4) | 编辑 收藏