JavaEE中的Servlet

这次要说说servlet,或许作为读者的您感觉这个技术已经用烂了还说啥啊,但是基于servlet在整个javaEE体系的重要地位,所以我们不得不说说这种组件技术。想想一切Web开发都是基于HTTP协议的,当然servlet也不例外,根据JavaEE的官方文档中的描述我们知道每次服务器接收到请求后都会返回动态生成的内容,就是我们熟悉的往客户端输出html的过程。你所看到的浏览器中五彩斑斓的世界归根结底就是有规律的字符而已,我们称之为html。再往底层说归根结底都是10的组合,这让我想到了黑客帝国,在黑客帝国中你所感受的一切只不过是10的排列组合。


(You ever have that feeling where you're not sure if you're awake or still dreaming?)

还是回来说servlet吧,在他之上又发展了更加利于开发人员编码的JavaServer PageJSP)之类的技术,但是人们没有止步于此,诸如JavaServer FacesJSF)是对于其更高一层的抽象,在页面上开发人员可以基于html中的控件来开发。其实在JSF之上还有很多封装之后的其他框架,比如PrimefaceSeam(没用过)这些抽象层次更高的技术。这些技术每次的进步都为开发带来了质的飞跃,同时若干年之后他们也是下一次质变的基础。

基于Servlet的开发最大的问题是由于其依赖HTTP协议,因此如果一切按照平常开发来说Web本身是不具备状态性的(因为HTTP是没有状态性的)。也就是说客户端发出的请求服务器在在返回的时候仅仅是针对这次的请求动态的输出,不会考虑上次的请求,同时也不会影响下次的请求,每个请求都是完全独立于之前的请求的。

但是在开发时候我们往往需要维护会话的状态,所以人们想到了在URL中添加一些信息来传递上次请求的数据。可是这种方式因为扩展性的问题很快被人抛弃了。在Servletsession是一个会话ID相关联的映射,每当一个会话被创建的时候服务器将生成一个新的id返回会一个HttpSession对象。在这个对象里面开发人员可以存储类似于map的键/值对。接下来可以利于cookie技术可以将会话id与客户端链接,这样会话就形成了。

在使用Servlet开发的时候,使用http会话是一个重要的技术点。下面核心代码演示了请求一个会话并存储会话数据所需的步骤。

 protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
        String userId = request.getParameter("user");
        HttpSession session = request.getSession();
        session.setAttribute("user", userId);

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        printHtmlHeader(out);
        out.println("User id: " + session.getAttribute("user"));
        printHtmlFooter(out);
    }

在上面的例子中Servlet在会话中存储用户的id,这样在后续的请求中可以使用这个idHttpServletRequest对象的getSession()会返回一个已经有的会话,如果会话不存在则会创建一个新的。可以是用setAttributegetAttribute方法添加和取得值。(相信这部分大家已经很熟悉,就不在赘述了)

Servlet是一个伟大的技术,但是现在使用Servlet开发已经被更加抽象的技术所替代,比如上面的JSF等架构。因为在更加抽象一层的技术中开发者将更少的关心类似于事务,管理资源等问题,转而更加关注业务。将开发人员从技术中逐步的解放出来,使得其更多的注重业务一直是技术进步的动力。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值