时隔多日,多日合适吗,应该是时隔多月。我又想起了一般处理程序。这都是由于近期在实现的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中的一般处理程序与java中Servlet都是用来处理web端发送的请求,解开页面与业务逻辑的耦合;看起来作用就像是MVC框架中Controller的作用,近期感觉非常多东西非常像。主要是缺乏实践还没摸透当中的道理,欢迎指正。

JAVA学习之 Model2中的Servlet与.NET一般处理程序傻傻分不清楚的更多相关文章

  1. Java学习-045-目录中文件拷贝

    挺晚的了,直接上码.敬请各位小主参阅,若有不足之处,敬请指正,非常感谢! 目录文件拷贝源码: /** * <strong>目录拷贝</strong><br> * & ...

  2. Java学习之InputStream中read()与read(byte[] b)

    Java学习之InputStream中read()与read(byte[] b) 这两个方法在抽象类InputStream中都是作为抽象方法存在的, JDK API中是这样描述两者的: read() ...

  3. java学习笔记-继承中super关键字

    背景: 在java继承的概念中我们得知,被声明为私有的类成员对所属的类来说仍然是私有的.类之外的任何代码都不能访问,包括子类. super关键字的两种用法: 1.用于调用超类的构造函数: 2.用于访问 ...

  4. java学习(二)多态中成员变量详解

    今天我总结了一下java多态中成员变量的赋值与调用 举一个我当初做过的小案例: class Fu{ int num; void show(){} } class Zi extends Fu{ //in ...

  5. Java学习之继承中的执行顺序详解

    代码块(理解) (1)用{}括起来的代码. (2)分类: A:局部代码块 用于限定变量的生命周期,及早释放,提高内存利用率. B:构造代码块 把多个构造方法中相同的代码可以放到这里,每个构造方法执行前 ...

  6. 【java学习】实践中总结--持续更新中

    目录: 一些定义 配置环境 相关语法 1.一些定义 java中DO的含义: https://blog.csdn.net/canot/article/details/51698047 DAO 中包含了各 ...

  7. Java学习笔记--HashMap中使用object做key的问题【转】

    在HashMap中,如果需要使用多个属性组合作为key,可以将这几个属性组合成一个对象作为key.但是存在的问题是,要做get时,往往没办法保存当初put操作时的key object的referenc ...

  8. JAVA学习笔记--方法中的参数调用是引用调用or值调用

    文献来源:<JAVA核心技术卷Ⅰ>,第4章第5节 (没有相关书籍的可看传送门) ps:测试demo因为偷懒,用的是String对象 结论:Java使用的是对象的值引用.即将任何对象所在内存 ...

  9. Java学习笔记-----eclipse中建立Java项目并成功运行

    环境:WIN7 64位 +eclipse 2018 12version 具体方法:https://jingyan.baidu.com/album/9c69d48fefa53113c9024eb3.ht ...

随机推荐

  1. BZOJ 1012 [JSOI2008]最大数maxnumber【线段树】

    水题,每次记录一下当前有多少个数,然后按照题目所指示的那样模拟就行,每次向线段树末尾插入(其实是修改)题目中指定的数,然后询问当前的个数到前面Q个数中最大值是多少结果就是,好久不碰线段树了,用数组模拟 ...

  2. Java定时器Web(转)

    通过定时器进行任务的执行是比较常见的情况,下面的是个简单的示例: 主要借助于监听器和TimerTask和Timer类进行实现,另外spring提供了定时器的高级实现好像是quarts. package ...

  3. 王室联邦(bzoj 1086)

    Description “余”人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理.他的国家有n个城市,编号为1..n.一些城市之间有道路相连,任意两个不 ...

  4. 巧克力王国 BZOJ 2850

    巧克力王国 [问题描述] 巧克力王国里的巧克力都是由牛奶和可可做成的.但是并不是每一块巧克力都受王国人民的欢迎,因为大家都不喜欢过于甜的巧克力.对于每一块巧克力,我们设x和y为其牛奶和可可的含量.由于 ...

  5. css-包含块

    在CSS中,有事一个元素的位置和尺寸的计算都相对于一个矩形,这个矩形被称作包含块.包含块是一个相对的概念,比如 子元素的初始化布局总是在父元素的左上角,这就是一个相对的概念.其中父元素就是一个参照物, ...

  6. AnyChart创建实时仪表

    AnyChart创建实时仪表 简述: AnyChart是一款基于Flash和HTML5的图表.仪表控件,所包含的图表类型众多和跨平台以及跨浏览器是该产品的主要特点和优点,另外该产品基于XML文件作为数 ...

  7. linux基础命令之一

    1.cpio cpio(copy in/out) 功能说明:备份文件. 语 法:cpio [-0aABckLovV][-C <输入/输出大小>][-F <备份档>][-H &l ...

  8. Laravel 5.1的多路由文件的配置

    Laravel 5.1的多路由文件的配置 默认的路由配置文件只有一个,\app\Http\routes.php.在同一个文件中写路由容易起冲突,文件会越来越大,就需要定义多个路由文件.找到加载\app ...

  9. Day 11 正则表达式

    正则表达式 一.简介 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配到的行打印出来.grep全称是Globally search for a Regular ...

  10. PAT (Advanced Level) 1086. Tree Traversals Again (25)

    入栈顺序为先序遍历,出栈顺序为中序遍历. #include<cstdio> #include<cstring> #include<cmath> #include&l ...