handler

SpringMVC工作原理示意图

ε祈祈猫儿з 提交于 2020-02-10 05:33:53
上面的是springMVC的工作原理图: 1、 客户端发出一个 http 请求给 web 服务 器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web.xml中指定),web容器将请求转交给 DispatcherServlet . 2、 DipatcherServlet 接收到这个请求之后将根据请求的信息(包括URL、Http方法、请求报文头和请求参数Cookie等)以及 HandlerMapping 的配置找到处理请求的 处理器( Handler ) 。 3-4、 DispatcherServlet 根据HandlerMapping 找到对应的 Handler, 将处理权交给 Handler (Handler将具体的处理进行封装), 再由具体的 HandlerAdapter 对 Handler 进行具体的调用。 5、 Handler 对数据处理完成以后将 返回一个 ModelAndView() 对象给 DispatcherServlet 。 6、 Handler 返回的 ModelAndView ()只是一个逻辑视图并不是一个正式的视图,DispatcherSevlet通过 ViewResolver 将逻辑视图转化为真正的视图 View 。 7、Dispatcher通过model解析出ModelAndView(

Spring+SpringMVC+MyBatis深入学习及搭建(十三)——SpringMVC入门程序(二)

房东的猫 提交于 2020-02-10 02:03:47
1.非注解的处理器映射器和适配器 1.1非注解的处理器映射器 前面我们配置的org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping是非注解的处理器映射器。这种映射器其实有一个问题就是要一个bean里面配置一个url。 现在我们再配置另一个非注解映射器 org.springframework.web.servlet.handler.SimpleUrlHandlerMapping,它会将url和handler集中进行配置。 <!-- 配置Handler --> <bean id="ItemsController1" name="/queryItems.action" class="joanna.yan.ssm.controller.ItemsController1"/> <!-- 配置处理器映射器 将bean的name作为url进行查找,需要在配置Handler时指定beanname(就是url) --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <!-- 简单url映射 simpleUrlHandlerMapping是BeanNameUrlHandlerMapping的增强版,

netty核心组件开发

家住魔仙堡 提交于 2020-02-09 20:42:54
1)下载Netty包: Project Structure-->Modules-->Dependencies-->右边的+--Library-->From Maven-->io.netty:netty-all:4.1.20.Final(勾选Download Sources JavaDocs) 2)在Dependencies中勾选下载好的netty库 3)在工程的lib下发现了包,分为3类: class(开发用的类) javadoc sources(源码文件): 里面还有个example目录,有很多例子 4)服务器启动流程: (1)初始化 EventLoopGroup BossGroup(老板线程) EventLoopGroup WorkerGroup(工作线程) (2)初始化助手(链式操作): ServerBootStrap bootstrap 1:group 设置2个线程组 2:channel 设置NioSocketChannel作为通道的实现 3:option 设置线程队列得到的连接个数 4:childOption 设置保持活动连接状态 5:childHandler 给我们的WorkerGroup的EventLoop对应的管道设置处理器: 现有的 自己自定义的 sync: 绑定一个端口并且同步,生成一个ChannelFuture对象,立即返回 // 启动服务器了,并且绑定了端口

Activity与Fragment之间交互——Handler

佐手、 提交于 2020-02-09 18:10:18
问题:现在activity使用viewpager,viewpager‘的元素是fragment,该activity作为startActivityForResult的结果,所以在结束时需要传递当前信息给前intent,其中包括当前fragment的 实例中的变量。 说明:这种方法,在activity获得的只是一个类,但是不具备用户交互改变fragment的变量 WillFragment fragment=(WillFragment) mAdapter.getItem(mViewPager.getCurrentItem()); 解决: Activity代码,接收fragment传递message: private Handler handler; private Intent backIntent; ............. setHandler(new Handler(new Callback() { @Override public boolean handleMessage(Message message) { // TODO Auto-generated method stub backIntent=(Intent) message.obj; return false; } })); 相应fragment代码,向activity传递Message: Message

Fragment与Activity交互(使用Handler)

谁说胖子不能爱 提交于 2020-02-09 18:09:39
1.在Activity中定义一个方法用来设置Handler对象 public void setHandler(Handler handler) { mHandler = handler; } 2.在Fragment中的回调函数onAttach()中得到Fragment所在的Activity,并调用setHandler方法,设置Handler。该Handler在Fragment中定义,用来接收来自Activity的消息 @Override public void onAttach(Activity activity) { super.onAttach(activity); mActivity = (MainActivity) activity; mActivity.setHandler(mHandler); } public Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case 1: text.setText((String) msg.obj); break; } }; }; 3.在Activity发送消息给Fragment的Handler Message msg = new Message(); mHandler

Android Fragment与Activity交互的几种方式

ε祈祈猫儿з 提交于 2020-02-09 18:08:34
这里我不再详细介绍那写比较常规的方式,例如静态变量,静态方法,持久化,application全局变量,收发广播等等。 首先我们来介绍使用Handler来实现Fragment与Activity 的交互。 第一步,我们需要在Activity中定义一个方法用来设置Handler对象。 public void setHandler(Handler handler) {     mHandler = handler; } 第二步,在Fragment中的回调函数onAttach()中得到Fragment所在Activity,并调用setHandler方法,设置Handler。该Handler在Fragment中定义,用来接收消息与Fragment进行交互。 @Override public void onAttach(Activity activity) { super.onAttach(activity); mActivity = (MainActivity) activity; mActivity.setHandler(mHandler); } public Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case 1:

关于委托,线程的那点事

佐手、 提交于 2020-02-09 04:07:40
一个加法例子: public delegate int AddHandler(int a,int b); public class 加法类 { public static int Add(int a, int b) { Console.WriteLine("开始计算:" + a + "+" + b); Thread.Sleep(3000); //模拟该方法运行三秒 Console.WriteLine("计算完成!"); return a + b; } } 同步调用 委托的Invoke方法用来进行同步调用。同步调用也可以叫阻塞调用,它将阻塞当前线程,然后执行调用,调用完毕后再继续向下进行。 public class 同步调用 { static void Main() { Console.WriteLine("===== 同步调用 SyncInvokeTest ====="); AddHandler handler = new AddHandler(加法类.Add); int result = handler.Invoke(1, 2); Console.WriteLine("继续做别的事情。。。"); Console.WriteLine(result); Console.ReadKey(); } } 异步调用 异步调用不阻塞线程,而是把调用塞到线程池中,程序主线程或UI线程可以继续执行

IDEA中feature文件的一个bug

守給你的承諾、 提交于 2020-02-09 03:40:28
描述: 项目使用了Cucumber,对着 feature 文件内部右键运行的时候,有时候会出现右键菜单不可用且无法消除的情况,必须切换窗口来消除这个菜单。 这个不知道是 IDEA 还是它自带的 Gherkin 插件的一个bug,不是一个大问题,但是总是会误操作点出来。 bug复现: 当在 feature(gherkin 语法)文件中,如果对着非 Example 的一个数据右键: 就会弹出以下提示,说找到两个Handler,要你选择一个,随便选择,OK 还是 Cancel 也随便: 然后又会弹出一次,也随便选: 图:略 然后就会弹出这个右键菜单: 这个菜单是消除不了的,除非你切换程序再切回来,它才会消失。 而且这个菜单你可以点击,但没有高亮提示你当前鼠标是处于哪个选项。 解决: 先说怎么解决,这个解决方法治标不治本,除非你去修改 IDEA 的源码。 想给 IDEA 提 Issue,不过好像并不是直接能在 Github 上面提,有点麻烦就暂时算了。 通过对 IDEA 源码远程 Debug 发现这两个 Handler 的作用: GherkinStepRenameHandler 是用来重命名 Step 的 GherkinInplaceRenameHandler 是用来重命名 Example 中的变量的 一般重命名都是使用 Shift + F6 操作的,但也支持右键菜单操作。 解决方法就是

.NET Core MVC 中使用Cookie

落爺英雄遲暮 提交于 2020-02-08 23:41:29
.NET Core MVC 中使用Cookie 一.Cookie是什么?   我的朋友问我cookie是什么,用来干什么的,可是我居然无法清楚明白简短地向其阐述cookie,这不禁让我陷入了沉思:为什么我无法解释清楚,我对学习的方法产生了怀疑!所以我们在学习一个东西的时候,一定要做到知其然知其所以然。   HTTP协议本身是无状态的。什么是无状态呢,即服务器无法判断用户身份。Cookie实际上是一小段的文本信息)。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。   打个比方,这就犹如你办理了银行卡,下次你去银行办业务,直接拿银行卡就行,不需要身份证。 二.在.NET Core中尝试   废话不多说,干就完了,现在我们创建ASP.NET Core MVC项目,撰写该文章时使用的.NET Core SDK 3.0 构建的项目,创建完毕之后我们无需安装任何包,   但是我们需要在Startup中添加一些配置,用于Cookie相关的。 //public const string CookieScheme = "YourSchemeName"; public

[原题复现]2018护网杯(WEB)easy_tornado

泪湿孤枕 提交于 2020-02-08 21:25:42
简介 原题复现: https://gitee.com/xiaohua1998/qwb_2019_supersqli 考察知识点:[护网杯 2018] WEB easy_tornado 线上平台: https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 [护网杯 2018]easy_tornado 打开页面发现三个链接依次打开 发现各自的文本 flag in /fllllllllllllag render md5(cookie_secret+md5(filename)) 从上面三个信息我们的值flag在/fllllllllllllag文件 render这个卡住了看了WP 说render是模板注入,经过测试发现过滤了 payload: http://13bb9f10-d2a9-428f-8148-0b42271a1c94.node3.buuoj.cn/error?msg={{1*2}} render是python中的一个渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页 render配合Tornado使用 Tornado是一种 Web 服务器软件的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。