Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

绿色网站无广告
会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux编程 > » 正文

servlet里面的线程可以这么用

来源: wclxyn 分享至:

servlet也是java的类,同样在servlet里面也可以处理线程,也不是这么说,servlet就是一个多线程的实例,

这样的应用才让java在web应用上面 有一个广泛的推广,下面是一个简单的servlet里面线程的例子:

今天看视频一个老师说不能把servlet里面的session和request引用到java类,里面,经验证完全可以:

恩,好的,那个老师讲错了。。。

首先写一个index.jsp页面 ,内容就一个表单,一个session:

<%
        session.setAttribute("username","username");
        if(request.getParameter("username") != null){
            out.print("<h1>"+request.getParameter("username")+"</h1>");
        }
 %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>this is my form page</title>
  </head>
  <body>
    <form action="MyForm" method="post">
        <input type="text" name="username"/>
        <input type="submit" name="submit"/>
    </form>
  </body>
</html>

然后跳转到MyForm的servlet里面处理如下:

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.getSession().getAttribute("username");
        request.setAttribute("username", new String(request.getParameter("username").getBytes("iso-8859-1"),"gb2312"));
        String path = "index.jsp";
        //调用MyThread类的构造方法,执行线程把request和name传进去
        new MyThread(request, new String(request.getParameter("username").getBytes("iso-8859-1"),"gb2312")).start();
        request.getRequestDispatcher(path).forward(request,response);
    }

下面 是MyThread类:

import javax.servlet.http.HttpServletRequest;
public class MyThread extends Thread {
    private HttpServletRequest request;
    private String name;
    public MyThread(HttpServletRequest request,String name){
        this.request = request;
        this.name = name;
    }
    public void run(){
        /*try {
            this.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }*/
        System.out.println("好吧,我承认"+name+"执行到线程了");
        System.out.println(request.getSession().getId());
        System.out.println(request.getSession().getAttribute("username"));
    }
    
}

结果输出打印了:

好吧,我承认执行到线程了
583207E987BCE4D8434FEC6A1B53971F
username

这样,一点都没有问题的,把servlet里面的各种属性传入到java类里面做处理

这样就可以一边一边了,呵呵,比如可以上传照片等可以想和sql等一起进行又不影响正常的进程,但是如果你在MyThread里面让线程休眠的话,一会也不行

就会报错,因为你休眠了,
        request.getRequestDispatcher(path).forward(request,response);

这句话就会执行,session等就失效率了

因为javaeeAPI里面有这样的介绍:



Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史