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中的一般处理程序与java中Servlet都是用来处理web端发送的请求,解开页面与业务逻辑的耦合;看起来作用就像是MVC框架中Controller的作用,近期感觉非常多东西非常像。主要是缺乏实践还没摸透当中的道理,欢迎指正。
JAVA学习之 Model2中的Servlet与.NET一般处理程序傻傻分不清楚的更多相关文章
- Java学习-045-目录中文件拷贝
挺晚的了,直接上码.敬请各位小主参阅,若有不足之处,敬请指正,非常感谢! 目录文件拷贝源码: /** * <strong>目录拷贝</strong><br> * & ...
- Java学习之InputStream中read()与read(byte[] b)
Java学习之InputStream中read()与read(byte[] b) 这两个方法在抽象类InputStream中都是作为抽象方法存在的, JDK API中是这样描述两者的: read() ...
- java学习笔记-继承中super关键字
背景: 在java继承的概念中我们得知,被声明为私有的类成员对所属的类来说仍然是私有的.类之外的任何代码都不能访问,包括子类. super关键字的两种用法: 1.用于调用超类的构造函数: 2.用于访问 ...
- java学习(二)多态中成员变量详解
今天我总结了一下java多态中成员变量的赋值与调用 举一个我当初做过的小案例: class Fu{ int num; void show(){} } class Zi extends Fu{ //in ...
- Java学习之继承中的执行顺序详解
代码块(理解) (1)用{}括起来的代码. (2)分类: A:局部代码块 用于限定变量的生命周期,及早释放,提高内存利用率. B:构造代码块 把多个构造方法中相同的代码可以放到这里,每个构造方法执行前 ...
- 【java学习】实践中总结--持续更新中
目录: 一些定义 配置环境 相关语法 1.一些定义 java中DO的含义: https://blog.csdn.net/canot/article/details/51698047 DAO 中包含了各 ...
- Java学习笔记--HashMap中使用object做key的问题【转】
在HashMap中,如果需要使用多个属性组合作为key,可以将这几个属性组合成一个对象作为key.但是存在的问题是,要做get时,往往没办法保存当初put操作时的key object的referenc ...
- JAVA学习笔记--方法中的参数调用是引用调用or值调用
文献来源:<JAVA核心技术卷Ⅰ>,第4章第5节 (没有相关书籍的可看传送门) ps:测试demo因为偷懒,用的是String对象 结论:Java使用的是对象的值引用.即将任何对象所在内存 ...
- Java学习笔记-----eclipse中建立Java项目并成功运行
环境:WIN7 64位 +eclipse 2018 12version 具体方法:https://jingyan.baidu.com/album/9c69d48fefa53113c9024eb3.ht ...
随机推荐
- 【编程工具】Sublime Text3快捷键配置
我们在使用编译软件时,总是喜欢使用快捷键来方便我们的操作,但有些编译软件不支持快捷键的修改和设置,为了能够更加方便的使用 Sublime Text3,这里我介绍几个 Sublime Text3 设置快 ...
- asp.net提交危险字符处理方法之一
在form表单提交前,可以在web页面,submit按钮的click事件中,使用js函数对,可能有危险字符的内容进行编码. 有3个函数可用: encodeURI() 函数可把字符串作为 URI 进行编 ...
- POJ 2092 Grandpa is Famous
Grandpa is Famous Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 7153 Accepted: 3624 ...
- iOS NSLog各种打印
%@ 对象 %d,%i 整型 (%i的老写法) %hd 短整型 %ld , %lld 长整型 %u 无符整型 %f 浮点型和double型 %0.2f 精度浮点数,只保留两位小数 %x: 为32 ...
- 【bzoj3489】A simple rmq problem 三维KD-tree
题目描述 因为是OJ上的题,就简单点好了.给出一个长度为n的序列,给出M个询问:在[l,r]之间找到一个在这个区间里只出现过一次的数,并且要求找的这个数尽可能大.如果找不到这样的数,则直接输出0.我会 ...
- 【bzoj1109】[POI2007]堆积木Klo 动态规划+树状数组
题目描述 Mary在她的生日礼物中有一些积木.那些积木都是相同大小的立方体.每个积木上面都有一个数.Mary用他的所有积木垒了一个高塔.妈妈告诉Mary游戏的目的是建一个塔,使得最多的积木在正确的位置 ...
- 【Luogu】P3391文艺平衡树(Splay)
题目链接 ddosvoid和自为风月马前卒教了我这道题 他们好强啊 如果我们要反转区间[l,r] 我们首先把l的前驱旋转到根节点 再把r的后继旋转到根节点的右儿子 那么此时根节点的右儿子的左儿子所代表 ...
- C++ 中的 C_str() 函数用法
转中转 ~\(≧▽≦)/~ :http://blog.csdn.net/nancy_m/article/details/7583550 语法: const char *c_str(); c_str() ...
- cf287E Main Sequence
As you know, Vova has recently become a new shaman in the city of Ultima Thule. So, he has received ...
- Spring-IOC源码解读3-依赖注入
当容器已经载入了BeanDefinition的信息完成了初始化,我们继续分析依赖注入的原理,需要注意的是依赖注入是用户第一次向IOC容器获取Bean的时候发生的,这里有个例外,那就是如果用户在Bean ...