知识点: servlet是单例的,Action是多例的,一次请求,创建一个Action的实例 结果页面分为全局和局部两类(局部优先级更高) result标签: name : 默认succes type...访问Servlet的API 方式一:完成解耦合的方式 <form action="${pageContext.request.contextPath}/requestDemo1...execute() throws Exception { //接收参数 //利用struts2中的对象ActionContext对象 ActionContext...; import java.util.Map; /** * 访问Servlet的API方式二:采用原生的方式 */ public class RequestDemo2 extends ActionSupport...* 访问Servlet的API方式三:接口注入的方式 */ public class RequestDemo3 extends ActionSupport implements ServletRequestAware
通过上一篇博客:Servlet 的详解 https://cloud.tencent.com/developer/article/1012709,我们大致知道了 Servlet 的基本用法。...④、Servlet中doGet方法和doPost方法中的两个参数reqeust,response拥有严重的容器依赖性。 ...⑤、如果页面上表单中的元素比较复杂,则在Servlet的方法中获取表单元素的数据比较繁琐。 ...⑥、Servlet是单线程的,只要在Servlet中的声明一个实例变量,那么该变量在多线程访问时就会有线程安全问题。 ...如果想真正解决,请看下一篇博客:Struts2 详解
); 比如使用:request.put("name",name); 可以在Jsp页面获取 说明:为struts2...的标签。...方法二:实现接口,依赖struts2注入 Map 类型 public class LoginAction extends ActionSupport implements RequestAware,SessionAware...String,object> application){ this.application=application; } } 方法三:获取httpServlet类型的...application = session.getServletContext(); 比如使用request :request.setAttribute("name",name); 方法四:获取httpServlet类型的,
Action类访问Servlet API 本人独立博客https://chenjiabing666.github.io Struts2并未直接和Servlet API耦合,这是Struts2的一个改良之处...但是对于web应用控制器而言,不访问Servlet API是不可能,因此下面我们介绍三种方式访问Servlet API ActionContext 使用这个可以获取Servlet中HttpServletRequest...get(key) 返回ActionContext中存放的键值对的值 其实这里获取的是Servlet中HttpServletRequest对象的属性 Object put(key,value) 向ActionContext...put,获取属性用get Map getApplication()返回一个Map对象,不过这个模拟了Servlet中的ServletContext对象的方法。...域中的a: ${a } 总结 虽说现在可以向各种域中添加属性获取属性,但是我们不可以移除属性,所以说这种方法不如直接使用Servlet API功能更加强大 实现接口访问Servlet API
大家好,又见面了,我是你们的朋友全栈君。 JSP和Servlet都是与使用Java构建基于Web的应用程序有关的重要概念。...Servlet与JSP:您必须知道的重要区别 自定义标签 Servlet不提供用于构建可以直接调用Java bean的自定义标签的条件。...性能 Java Servlet和Java Server Pages的目的与使用Common Gateway Interface(即CGI)执行的程序的目的相同。...这是因为JSP生命周期中的第一步是将JSP转换为Java代码,然后进行编译。 Servlet实现了用于开发基于Web的应用程序的基于组件,与平台无关的方法,但没有CGI程序的性能限制。...而且,Java Servlet可以访问完整的Java API集,并且还提供了更好的CGI性能。
Servlet的Web访问名称 一个Servlet的web访问名称可以不止一个,并且除了用web.xml配置之外,还可以使用注解的方式配置,现在主流的配置方式是使用注解,这是Servlet3.0的特性,...Servlet家族 Servlet家族派生体系中的最高父类是Servlet接口,此接口定义了其实现类必须要重写的基本方法。...然后就是GenericServlet类,这是一个抽象类,是一个通用的Servlet,它实现于Servlet接口,这个类相当于给Servlet家族的派生体系增加了一个分支,接着就是到了具备协议的HttpServlet...,想要网速快一些我可以加个网卡,这就是为什么要去面向接口编程,为什么开发Servlet家族的工程师能够将Servlet的灵活、扩展性做的这么好,这都是因为应用了面向接口编程。...Servlet接口 Servlet接口中有三个主要的方法,分别是: init(ServletConfig) 初始化方法,此方法在Servlet实例化对象后会被调用。
JSP是动态网页技术,出现在Servlet技术之后的,JSP技术是为了解决Servlet的开发效率低下,不方便开发人员开发,其本质还是Servlet。...个Servlet可以调用另一个或一系列Servlet来成为它的客户端。 (7) Servlet API与协议无关。...Tomcat与Servlet之间的关系 当初在Apache开发时还未出现Servlet的概念,所以Apache不能内置支持Servleto实 际上,除了Apache,其他许多Web服务器软件都不能直接支持...这种方式运行速度较快,并且能够提供良好的性能,适用于单进程、多线程服务器,但是 在伸缩性方面存在不足。...Java Servlet API是Servlet容器和Servlet之间的接U,它定义了Servlet的各种方法, 还定义了Servlet容器传送给Servlet的对象类,其中最重要的是请求对象ServletRequest
前言 很多初学者,甚至是工作1-3年的小伙伴们都可能弄不明白?servlet Struts1 Struts2 springmvc 哪些是单例,哪些是多例,哪些是线程安全?...与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为public类型。 默认值和实例变量相似。数值型变量默认值是0,布尔型默认值是false,引用类型默认值是null。...如果静态变量不是public和final类型,其命名方式与实例变量以及局部变量的命名方式一致。...Struts2 struts2使用的是actionContext,都是使用里面的实例变量,让struts2自动匹配成对象的。...Struts2 是线程安全的,当然前提情况是,Action 不交给 spring管理,并且不设置为单例。 SpringMvc 的 Bean 可以设置成多例变成线程安全,但是一定程度上回影响系统性能。
servlet Struts1 Struts2 springmvc 哪些是单例,哪些是多例,哪些是线程安全? 在谈这个话题之前,我们先了解一下Java中相关的变量类型以及内存模型JMM。...与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为public类型。 默认值和实例变量相似。数值型变量默认值是0,布尔型默认值是false,引用类型默认值是null。...如果静态变量不是public和final类型,其命名方式与实例变量以及局部变量的命名方式一致。...Struts2 struts2使用的是actionContext,都是使用里面的实例变量,让struts2自动匹配成对象的。...Struts2 是线程安全的,当然前提情况是,Action 不交给 spring管理,并且不设置为单例。 SpringMvc 的 Bean 可以设置成多例变成线程安全,但是一定程度上回影响系统性能。
2、自定义的结果视图,必须先声明后才能使用 50 servlet...; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse...random.nextInt(width), random.nextInt(height), random.nextInt(width), random.nextInt(height)); //6.画字符串随机的...throws ServletException, IOException { this.doGet(request, response); } } 前台页面用Img标签的src
servlet与filter的加载顺序 加载顺序 提到加载顺序,首先我们需要对sevlet中的load-on-startup单独讨论 基本有以下几点: load-on-startup 元素标记容器是否应该在...请求/hello时,执行最后一个servlet的init()方法,再按顺序执行filter。最后执行最后一个servlet的方法。 filter执行循序看的。servlet执行顺序看的。...在请求匹配的url时进行加载,并且只加载最后一个servlet的init方法。其他的servlet不加载。...servlet的doGet、doPost方法:在请求匹配的url路径时加载,而且只加载最后一个servlet的方法,其他方法不加载 如果请求的url既匹配filter又匹配servlet,并且servlet...的init方法没有在容器初始化加载,则先加载匹配的servlet的最后一个servlet的init方法,再按顺序执行filter方法,最后再执行匹配的最后一个servlet方法。
Servlet (Server Applet)是Sun公司指定的一种用来扩展Web服务器功能的组件规范,属于服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。...3、JSP与Servlet的区别和联系 运行过程 客户在第一次请求JSP时,请求较慢,因为JSP Engine先把JSP程序转换成servlet代码,接着将它编译成类文件,以后贮存在内存中再次调用速度就快了...; 访问servlet时,可以直接对其编译好的类文件执行。...本是一家人 Jsp 本质上是servlet,用jsp实现的页面用servlet也能实现。...4、扬长弊端提出MVC JSP 在Html 中加入了大量的、复杂的业务逻辑,如果后期业务逻辑发生改变,修改jsp 就会捉襟见肘; Servlet 虽然解决了业务逻辑的问题,但是通过字符串拼接的方式生成动态的
3、由于Struts2需要针对每个request进行封装,把request,session等servlet生命周期的变量封装成一个一个Map,供给每个Action使用,并保证线程安全,所以在原则上,是比较耗费内存的...4、 拦截器实现机制上,Struts2有以自己的interceptor机制,SpringMVC用的是独立的AOP方式,这样导致Struts2的配置文件量还是比SpringMVC大。...5、SpringMVC的入口是servlet,而Struts2是filter(这里要指出,filter和servlet是不同的。...以前认为filter是servlet的一种特殊),这就导致了二者的机制不同,这里就牵涉到servlet和filter的区别了。...9、 设计思想上,Struts2更加符合OOP的编程思想, SpringMVC就比较谨慎,在servlet上扩展。 10、SpringMVC开发效率和性能高于Struts2。
Struts2这个框架每年都会出现那么几个漏洞,不得不引起斗哥学习的兴趣。本期将从Struts2的一个罪魁祸首ONGL表达式开始介绍到S2-001漏洞的分析。...Struts2系列的漏洞涉及Java Web等相关内容,后续会持续更新漏洞分析以及相关知识背景介绍等。 ?...0x03 ognl与Struts2的结合 1.ValueStack Ognl表达式可以单独使用,它也被一些成熟的框架使用,如Struts2。在Struts2 中有个值栈对象即ValueStack。...而Ognl原有的root部分对应Struts2的栈,Context对应Struts2的ActionContext。...这里的表单是用JSP写的,需要对JSP有所了解,还需要去了解一下Struts2标签库常用的几个标签,这里有个参考链接:Struts2标签库常用标签。
大家好,又见面了,我是你们的朋友全栈君。 什么是servlet: (1) Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。...(2) 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。...servlet和jsp的联系: (1)jsp是对servlet的一种高级封装。本质还是servlet。...servlet和jsp的共同点和不同点: (1)servlet在java代码中通过httpservletresponse来动态的生成一个html页面 (2)jsp是通过吧java代码嵌入到html中去生成一个动态的...但是servlet在处理前端和后台数据交互的时候有特别的优秀。 (2)因此在这个时候我们引入jsp技术来替代servlet生成html的功能。让serlvet只专注前端页面和后台数据的交互。
大家好,又见面了,我是你们的朋友全栈君。...Cookie Cookie是服务器通知客户端保存键值对儿的一种技术 客户端有了Cookie后,每次请求都发送给服务器 每个 Cookie的大小都不超过4kb 注意 Cookie值不包含空格,方括号...Cookie生命控制 setMaxAge() 正数,表示在指定的秒数后过期 负数,表示浏览器一关闭,Cookie就会被删除 零 ,表示马上删除 CookiePath属性 Cookie的path属性可以有效的过滤那些发送给服务器...() 之后调用都是:获取前面创建好的Session()会话对象 isNew():判断到底是不是刚创建出来的(新的) 每个会话都有一个身份证号。...而且这个ID是唯一的。getID()得到Session的会话id值。
标准CGI 使用命令行参数或环境变量表示服务器的详细请求,服务器与浏览器通信采用标准输入输出方式。...Servlet 与 CGI比较: 和CGI程序一样,Servlet可以响应用户的指令(提交一个FORM等等),也可以象CGI程序一样,收集用户表单的信息并给予动态反馈(简单的注册信息录入和检查错误)。...然而,Servlet的机制并不仅仅是这样简单的与用户表单进行交互。传统技术中,动态的网页建立和显示都是通过CGI来实现的,但是,有了Servlet,您可以大胆的放弃所有CGI(perl?php?...而Servlet充分发挥了服务器端的资源并高效的利用。...而我们的Servlet有连接池的概念,它可以利用多线程的优点,在系统缓存中事先建立好若干与数据库的连接,到时候若想和数据库打交道可以随时跟系统”要”一个连接即可,反应速度可想而知。
而在Struts2中,并没有任何参数。 因此,就不能简单地从execute方法获得HttpServletResponse或HttpServletRequest对象了。...但在Struts2 Action类中仍然有很多方法可以获得这些对象。 下面就列出四种获得这些对象的方法。...1、Action继承Struts2 的Servlet*Aware 拦截器 这种方式要求Action继承org.apache.struts2.interceptor中对应的对象,如:HttpServletResponse...3、使用ActionContext类 这种方法比较简单,我们可以通过org.apache.struts2.ActionContext类的get方法获得相应的对象。...,可以用于上传下载文件时的参数。
; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest...* 60 * 60 * 30); response.addCookie(cookie1); response.addCookie(cookie2); output = "本次登录时间与用户名已经写到...; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest...display login infomation"); out.println(""); out.println("从Cookie中获得上次登录时间与用户名...and Settings\用户名\Cookies Cookie的作用: 解决浏览器用户与web服务器之间无状态通信 使用cookie的时候注意的事项: cookie的大小和数量是有限制的
领取专属 10元无门槛券
手把手带您无忧上云