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() {
            //获用户名称
            var nameValue =$("#UserName").val();
            //获取密码
            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")   //添加用户名
            {
                addUser(context);
            }
            else if (command =="delUser")
            {
                modifyUser(context);
            }
        }
       
        //添加用户信息
        public void addUser(HttpContextcontext) {
            //用户名称
            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相似的是HttpServlet容易也是响应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");
//用户密码
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、其实从上面的代码可以看出,他们两个都可以根据页面传过来的参数判断要执行的方法,进而调用业务层的具体处理过程,很简单的把页面与业务逻辑分开。

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

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。