zoukankan      html  css  js  c++  java
  • JAVA学习之 Model2中的Servlet与.NET一般处理程序傻傻分不清楚

             时隔多日,多日合适吗,应该是时隔多月。我又想起了一般处理程序。这都是由于近期在实现的DRP系统中经经常使用到jsp+servlet达到界面与逻辑的分离。servlet负责处理从jsp传回的信息;每当这个时候我就有一种感觉,这里的Servlet好像跟一般处理程序有着相同的作用,只是由于我对一般处理程序的了解并不深刻,仅仅是在一个写简单的实例中应用过。大家有什么看法都能够提出来,以下我就从我有限的知识出发来说说我的理解:

    一、一般处理程序

    一般处理程序用来处理一般的web请求。一般处理程序实现一个FrameWork的接口:IHttpHandler,该接口定义了假设实现一个HTTP骑牛的处理所必须实现的一些系统约定。创建一个空白的一般处理程序:   

          /// <summary>
        /// HelloWord 的摘要说明
        /// </summary>
        public class HelloWord : IHttpHandler
        {
     
            public void ProcessRequest(HttpContextcontext)
            {
                context.Response.ContentType ="text/plain";
                context.Response.Write("HelloWorld");
            }
     
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
     

              我们能够看到仅仅须要实现一个方法和一个属性,当中ProcessRequest放置处理请求的主要代码;IsReusable属性,获取指示其它请求能否够使用IHttpHandler 实例,一般都设置为true

    以下以以一个简单的加入用户为例。看一般处理程序是怎样实现的:

    web传递信息:

      //加入用户信息
            function saveOneOrganization() {
                //获username称
                var nameValue =$("#UserName").val();
                //获取password
                var passWordValue =$("#PassWord").val();         
                //给隐藏控件test的value赋值          
                var test = "add";
                if (nameValue == "" ||passWordValue == "" ||) {
                    alert("请将信息填写完整!");
                }
            $.post("addManager.ashx", {nameValue: nameValue, passWordValue: passWordValue,test: test }, function(data) {
                    alert(data);
                });
     
            }


    一般处理信息处理:

    /// <summary>
        /// addManager1 的摘要说明
        /// </summary>
        public class addManager1 : IHttpHandler
        {
           UserManagerBLL userManagerBll = newUserManagerBLL();
            public void ProcessRequest(HttpContextcontext)
            {
                //接受前台传过来的test值
                string command =context.Request.Params["test"];
                if (command =="addUser")   //加入username
                {
                    addUser(context);
                }
                else if (command =="delUser")
                {
                    modifyUser(context);
                }
            }
           
            //加入用户信息
            public void addUser(HttpContextcontext) {
                //username称
                string strNameValue =context.Request.Params["nameValue"];
                //用户密码
                string strpassWordValue =context.Request.Params["passwordValue"];
              
                //实例化用户实体
                UserEntity  userEntity = new UserEntity();
                //将变量值传给实体
                userEntity.UserName = strNameValue;
                userEntity.Password =strpassWordValue;
                //调用B层的方法
                string strResult=userManagerBll.add(userEntity);
                //往前抬传值
                context.Response.Write(strResult);
                context.Response.End();
     
            }
     
            //改动
            public void modifyUser(HttpContextcontext)
            {
               //实现与加入用户已知不再详述
     
            }
            public bool IsReusable
            {
                get
                {
                    return true;
                }
            }
        }


     

    二、Servlet

           事实上Servelet范围非常广。这里我说的Servlet仅仅是Servlet的一种实现。创建Servlet事实上现HttpServlet,与IHttpHandler相似的是HttpServleteasy也是响应Web客户的请求,WEB容器把客户请求封装成一个HttpServletRequest对象,然后把对象传给Servlet的对象方法进行处理。

        在继承HttpServlet时。能够选择覆盖部分方法。比如:doGet()或doPost(),或者覆盖Service方法。

    以下简答的加入改动实例看一下servlet的实现:

    jsp调用:

      function add(){
        	window.self.location="servlet/flowCard/FlowCardServlet?command=add"
        }

    Servlet实现:

    publicclass UserServlet extends HttpServlet {
     
    @Override
    protectedvoid service(HttpServletRequest request, HttpServletResponse response)
    throwsServletException, IOException {
    //必须显示调用父类的service方法
    super.service(request,response);
    if("add".equals(getCommand())) {
    add(request,response);
    }elseif ("del".equals(getCommand())) {
     
    }elseif ("modify".equals(getCommand())) {
     
    }else {
     
    }
    }
    /**
     * 加入
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    privatevoid add(HttpServletRequest request, HttpServletResponse response)
    throwsServletException, IOException {
    //用户姓名
    String userName=request.getParameter("userName");
    //用户password
    String passWord=request.getParameter("passWord");
    user.setUserName(userName)
    user.setpassWord(passWord)
    UserManager.add(user);
    //页面跳转
    response.sendRedirect(request.getContextPath()+ "/flowcard/flow_card_maint.jsp");
    }
     
    /**
     * 删除
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    privatevoid del(HttpServletRequest request, HttpServletResponse response)
    throwsServletException, IOException {
    //略去
    }
    }
    使用servlet须要在web.xml中进行配置:
        <servlet>
       <servlet-name> UserServlet</servlet-name>
      <servlet-class>com.tgb.UserServlet</servlet-class>
      <load-on-startup>2</load-on-startup>
    </servlet>
     
        <servlet-mapping>
             <servlet-name>UserServlet</servlet-name>
           <url-pattern>/servletUserServlet<url-pattern>       
        </servlet-mapping>
     


    比較:

    1、事实上从上面的代码能够看出。他们两个都能够依据页面传过来的參数推断要运行的方法。进而调用业务层的详细处理过程,非常easy的把页面与业务逻辑分开。

    2、在.net中的一般处理程序与javaServlet都是用来处理web端发送的请求,解开页面与业务逻辑的耦合;看起来作用就像是MVC框架中Controller的作用,近期感觉非常多东西非常像。主要是缺乏实践还没摸透当中的道理,欢迎指正。

     

     

  • 相关阅读:
    BackgroundWorker原理剖析
    委托异步调用时BeginInvoke的陷阱处理
    线程静态在对象缓存中的妙用
    值得珍藏的.NET源码,不保存就没机会了
    .NET 4.5.1 参考源码索引
    .NET 4.5 参考源码索引
    .NET 4.0 参考源码索引
    WWF3.5SP1 参考源码索引
    WCF3.5 SP1 参考源码索引
    .NET 3.5.1 参考源码索引
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/6882010.html
Copyright © 2011-2022 走看看