JavaEE
Get和Post的区别
1.get是从服务器上获取数据,post是向服务器传送数据,
2.get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。
3.get安全性非常低,post安全性较高。但是执行效率却比Post方法好。
4.在进行文件上传时只能使用post而不能是get。
5.不明确是post请求的都是get请求
Servlet的生命周期
1) 加载:在下列时刻加载 Servlet:(1)如果已配置自动加载选项,则在启动服务器时自动加载 (web.xml中设置<load-on-start>);(2)在服务器启动后,客户机首次向 Servlet 发出请求时;(3)重新加载 Servlet 时(只执行一次)
2) 实例化:加载 Servlet 后,服务器创建一个 Servlet 实例。(只执行一次)
3) 初始化:调用 Servlet 的 init() 方法。在初始化阶段,Servlet 初始化参数被传递给 Servlet 配置对象ServletConfig。(只执行一次)
4) 请求处理:对于到达服务器的客户机请求,服务器创建针对此次请求的一个“请求”对象和一个“响应”对象。服务器调用 Servlet 的 service() 方法,该方法用于传递“请求”和“响应”对象。service() 方法从“请求”对象获得请求信息、处理该请求并用“响应”对象的方法以将响应传回客户机。service() 方法可以调用其它方法来处理请求,例如 doGet()、doPost() 或其它的方法。(每次请求都执行该步骤)
销毁:当服务器不再需要 Servlet, 或重新装入 Servlet 的新实例时,服务器会调用 Servlet 的 destroy() 方法。(只执行一次)
Servlet和Filter
整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。
Filter有如下几个用处:
Filter可以进行对特定的url请求和相应做预处理和后处理。
在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest。
根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据。
在HttpServletResponse到达客户端之前,拦截HttpServletResponse。
根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。
实际上Filter和Servlet极其相似,区别只是Filter不能直接对用户生成响应。实际上Filter里doFilter()方法里的代码就是从多个Servlet的service()方法里抽取的通用代码,通过使用Filter可以实现更好的复用。
Filter和Servlet的生命周期:
1.Filter在web服务器启动时初始化
2.如果某个Servlet配置了 1 ,该Servlet也是在Tomcat(Servlet容器)启动时初始化。
3.如果Servlet没有配置1 ,该Servlet不会在Tomcat启动时初始化,而是在请求到来时初始化。
4.每次请求, Request都会被初始化,响应请求后,请求被销毁。
5.Servlet初始化后,将不会随着请求的结束而注销。
6.关闭Tomcat时,Servlet、Filter依次被注销。Redirect和Forward的区别?
从数据共享上
Forword是一个请求的延续,可以共享request的数据
Redirect开启一个新的请求,不可以共享request的数据
从地址栏
Forword转发地址栏不发生变化,只能访问该application内部路径
Redirect转发地址栏发生变化,可以访问任意URL
JSP的执行过程
在JSP运行过程中,首先由客户端发出请求,Web服务器接收到请求后,如果是第一次访问某个jsp页面,Web服务器对它进行以下3个操作。
1) 翻译:由.jsp变为.java,由JSP引擎实现。
2) 编译:由.java变为.class,由 Java编译器实现。
3) 执行:由.class变为.html,用Java虚拟机执行编译文件,然后将执行结果返回给Web服务器,并最终返回给客户端
如果不是第一次访问某个JSP页面,则只执行第三步。所以第一次访问JSP较慢。
JSP的9个内置对象及其含义
request表示HttpServletRequest对象。它包含了有关浏览器请求的信息
response表示HttpServletResponse对象,并提供了几个用于设置浏览器的响应的方法
out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
pageContext表示一个javax.servlet.jsp.PageContext对象。是用于方便存取各种范围的名字空间
session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息
applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息
config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。
page表示从该页面产生的一个servlet实例
exception:exception对象用来处理错误异;如果使用exception,则必须指定page中的isErrorPage为true
page/request/session/application作用域区别
page:当前页面范围
request:当前页面范围+转发页面(forward)+包含页面(include)
session:当前会话:session在以下几种情况下失效
1) 销毁session:Session.invalidate();
2) 超过最大非活动间隔时间
3) 手动关闭浏览器(session并没有立刻失效,因为服务器端session仍旧存在,超过最大非活动间隔时间后真正失效)
application:当前应用;服务器重新启动前一直有效
Session与Cookie
Cookie可以让服务端跟踪每个客户端的访问,但是每次客户端的访问都必须传回这些Cookie,如果Cookie很多,则无形的增加了客户端与服务端的数据传输量,
而Session则很好地解决了这个问题,同一个客户端每次和服务端交互时,将数据存储通过Session到服务端,不需要每次都传回所有的Cookie值,而是传回一个ID,每个客户端第一次访问服务器生成的唯一的ID,客户端只要传回这个ID就行了,这个ID通常为NAME为JSESSIONID的一个Cookie。这样服务端就可以通过这个ID,来将存储到服务端的KV值取出了。
jquery的理解
jquery是一个轻量级的js框架,具有跨浏览器的特性,兼容性好,并且封装了很多工具,方便使用。
常用的有: 选择器 ,dom操作 ,ajax(ajax不能跨域) ,特效,工具类
jQuery中$的作用主要有哪些
1) $用作选择器
例如:根据id获得页面元素$("#元素ID")
2) $相当于window.onload和 $(document).ready(...)
例如:$(function(){...}); function(){...}会在DOM树加载完毕之后执行。
3) $用作JQuery的工具函数的前缀
例如: var str = ' Welcome toshanghai.com ';
str = $.trim(str);去掉空格
4) $(element):把DOM节点转化成jQuery节点
例如:var cr=document.getElementById("cr"); //dom对象
var $cr = $(cr); //转换成jquery对象
5) $(html):使用HTML字符串创建jQuery节点
例如:var obj = $("<div>尚学堂,实战化教学第一品牌</div>")
datagrid:数据表格window:窗口form:表单layout:布局
tabs:选项卡according:折叠面板combobox:下拉列表
Freemarker静态化
在做XX电商项目的时候,考虑到提高网站前台的性能,承受更大的并发,我们将网站首页和很多文章页面都进行了静态化。当时采用的方式是通过freemarker模板引擎和spring定时器来结合完成的。前台美工通过网站管理后台用freemarker编写首页模板以及相关的样式,之后将模板信息存入模板表,我负责编写spring定时器在每晚的凌晨从数据库中的模板表中取出各种类型的模板并和相关的数据结合起来生成静态的html页面。并且考虑到减少前台美工编写freemarker标签的难度,我将经常用到的一些功能像分页,列表展示等通过#macro编写为freemarker的宏命令,方便前台美工直接使用。对于及时性要求比较高的特别热门的频道,则在用户点击发布时直接调用编写的接口通过freemarker和数据结合生成html静态页面。
你对ajax是怎么理解的(融入ajax跨域的解决方案)
ajax全称是异步JavaScript及xml;ajax的核心JavaScript中的xmlHttpRequest(XHR);使用ajax可以提高用户的体验度,进行异步数据传输从而提高性能。ajax不能跨域,所谓不能跨域就是不能跨多个网站(多个域名),不能跨多个项目可以通过jsonp来解决ajax跨域的问题,而jsonp的实质就是通过动态添加script标签来实现的
Ajax超时、Ajax同步异步、原生的Ajax
Ajax是默认没有超时时间,如果我们想要ajax超时在ajax中有一个timeout这个属性设置它的时间是根据秒来设置
Ajax 异步是跳转页面加载一部分数据当点击按钮的时候加载另一部分数据这样的使用于大数据量的加载
Ajax同步 是跳转页面一下子执行了说有的ajax请求加载了所有的数据这样的如果在大量数据中页面会卡
Ajax中有async属性 async =”true”是同步flase是异步 默认的是异步
原生的ajax是xmlhttprequest
httpClient
httpClient是一个支持http协议的客户端编程工具包,我们在java中调用httpClient是通过url模拟了一个http请求,这样就可以通过java代码直接发送请求获得服务端响应数据,首先构建HttpClient,new DefaultHttpClient(); httpClient发送请求的方式也分成两种形式:一个 new httpGet(),一个是new httpPost() 把请求的url放进去,然后用excute发送请求,获取响应信息,里面包含状态码,成功为200,包含响应内容,将内容转换为字符串,最后关闭连接,其中post请求是模拟表单提交完成的、不能传递参数
MVC模式完成分页功能的基本思路是什么?
1)页面提交页码(第几页)到Servlet中
2)Servlet接收到页码后,将页码传递给分页工具类(PageBean)
3)Servlet中调用Service层传入PageBean对象
4)Service层调用DAO层传入PageBean对象
5)Servlet中得到查询出来的数据,并setAttrivute保存
在页面中得到(getAttribute)数据,遍历输出
Jsonp跨域原理
利用<script>标签没有跨域限制的“漏洞”(历史遗迹啊)来达到与第三方通讯的目的。当需要通讯时,本站脚本创建一个<script>元素,地址指向第三方的API网址,形如: <scriptsrc="http://www.example.net/api?param1=1¶m2=2"></script> 并提供一个回调函数来接收数据(函数名可约定,或通过地址参数传递)。 第三方产生的响应为json数据的包装(故称之为jsonp,即jsonpadding),形如: callback({"name":"hax","gender":"Male"}) 这样浏览器会调用callback函数,并传递解析后json对象作为参数。本站脚本可在callback函数里处理所传入的数据。 补充:“历史遗迹”的意思就是,如果在今天重新设计的话,也许就不会允许这样简单的跨域了嘿,比如可能像XHR一样按照CORS规范要求服务器发送特定的http头。