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 ...
随机推荐
- hdu2022
#include <stdio.h> #include <math.h> #define here puts("go,go,go!\n") int main ...
- 【java基础 10】hash算法冲突解决方法
导读:今天看了java里面关于hashmap的相关源码(看了java6和java7),尤其是resize.transfer.put.get这几个方法,突然明白了,为什么我之前考数据结构死活考不过,就差 ...
- 自动化运维之shell通配符,转义符,和元字符(二)
1 shell通配符 通配符看起来有点象正则表达式语句,但是它与正则表达式不同的,不能相互混淆.把通配符理解为shell特殊代号字符就可. 二.shell元字符 shell除了有通配符之外,由shel ...
- AXMLPrinter2.jar反编译xml文件
apk里的AndroidManifest.xml 为二进制文件,可通过AXMLPrinter2.jar包反编译出来 cmd命令行运行一下命令: java -jar AXMLPrinter2.jar A ...
- ElasticSearch分词器
什么是分词器? 分词器,是将用户输入的一段文本,分析成符合逻辑的一种工具.到目前为止呢,分词器没有办法做到完全的符合人们的要求.和我们有关的分词器有英文的和中文的.英文的分词器过程:输入文本-关键词切 ...
- Laravel 之文件上传
配置文件: config/filesystems.php, 新建存储空间 'uplaods' => [ 'driver' => 'local', 'root' => storage_ ...
- POJ 1991 Turning in Homework(区间DP)
题目链接 Turning in Homework 考虑区间DP $f[i][j][0]$为只考虑区间$[i, j]$且最后在$a[i]$位置交作业的答案. $f[i][j][1]$为只考虑区间$[i, ...
- LOJ#3083.「GXOI / GZOI2019」与或和_单调栈_拆位
#3083. 「GXOI / GZOI2019」与或和 题目大意 给定一个\(N\times N\)的矩阵,求所有子矩阵的\(AND(\&)\)之和.\(OR(|)\)之和. 数据范围 \(1 ...
- UVA 111
又被题意坑了... 输入的一串数字的含义是第i个数字是第a[i]个发生的.而不是编号为i的历史事件的实际发生顺序.所以第一步要做的是转换,将原始数据转换成编号为i的历史事件的实际发生顺序.然后按照实际 ...
- 用canal监控binlog并实现mysql定制同步数据的功能
业务背景 写任何工具都不能脱离实际业务的背景.开始这个项目的时候是因为现有的项目中数据分布太零碎,零零散散的分布在好几个数据库中,没有统一的数据库来收集这些数据.这种情况下想做一个大而全的会员中心系统 ...