java web
本篇文章记录java web方向原生servlet,jsp方面的知识点,以面试题的形式展开。
一.Ajax
1. 什么是同步,什么是异步?
同步现象:客户端发送请求到服务端,当服务端返回响应前,客户端都处于等待卡死状态。
异步状态:客户端发送请求到服务端,无论服务端是否响应,客户端都可以随意做其他事情,不会卡死。
2. ajax的运行原理
页面发起请求,会将请求发送给浏览器内核的ajax引擎,ajax引擎会将请求发送给服务端,在这段时间中客户端可以进行任何操作,直到服务端将数据响应给ajax引擎,触发你的设置的事件,从而执行自定义的js逻辑完成页面的功能。
3. json的格式和解析
- json的格式:
- 对象格式:{“key1”:obj,“key2”:obj,“key3”:obj…} 例:{“username”:“张三”,“age”:28,“password”:“123”,“addr”:“北京”}
- 数组/集合格式:[obj,obj,obj…] 例:[{“pid”:“10”,“pname”:“小米4C”},{},{}]
- json的解析:json是js的原生内容,因此js可以直接直接取出json的数据
- json的转换插件:将java对象或者集合转换为json数据
4. ajax技术
- js原生ajax技术:
实现ajax异步操作步骤:
- 创建ajax引擎对象
- 为ajax引擎对象绑定监听(监听服务器已将数据响应给ajax引擎)
- 绑定提交地址
- 发送请求
//1.创建引擎对象
var xmlhttp = new XMLHttpRequest();
//2.绑定监听
xmlhttp.onreadystatechange =function(){
//5.接受响应数据
if(xmlhttp.readyState==4&&xmlhttp.status==200){
var text=xmlhttp.responseText;
alert(text);
}
}
//3.绑定地址
xmlhttp.open("get","${pageContext.request.contextPath}/ajax",true);
xmlhttp.send();
- Jquery的Ajax技术
jquery是一个优秀的js框架,自然对ajax做了封装,使操作更加简单,与ajax相关的方法经常使用的三钟:
- $.get(url, [data], [callback], [type])
- $.post(url, [data], [callback], [type])
其中:
url:代表请求的服务器端地址
data:代表请求服务器端的数据(可以是key=value形式也可以是json格式)
callback:表示服务器端成功响应所触发的函数(只有正常成功返回才执行)
type:表示服务器端返回的数据类型(jquery会根据指定的类型自动类型转换)
常用的返回类型:text、json、html等 - $.ajax( { option1:value1,option2:value2… } );
常用的option有如下:
async:是否异步,默认是true代表异步
data:发送到服务器的参数,建议使用json格式
dataType:服务器端返回的数据类型,常用text和json
success:成功响应执行的函数,对应的类型是function类型
type:请求方式,POST/GET
url:请求服务器端地址
二. Session和Cookie
1.什么是一次会话?
从打开一个浏览器访问某个服务器,到关闭这个浏览器的整个过程叫,一次会话。
会话技术分为session和cookie。
session:将数据存储到服务器端,为每个客户端分配独有的空间。
cookie:将数据存储到客户端,安全性不好,cookie可以清除。
2.Cookie技术
- 服务器端向客户端发送cookie:
- 创建cookie
Cookie cookie=new Cookie("name","xiaodeng");//注意cookie不能存储中文
//设置cookie的的持久化时间,cookie信息会持久化到浏览器的磁盘中,如果不设置,就默认保存在浏览器的内存中,关闭浏览器,清空内存,cookie也就没了
cookie.setMaxAge(int seconds);
//设置cookie的携带路径,如果不设置,默认客户端访问服务端获取到cookie信息后,访问该web项目都会携带cookie信息。
cookie.setPath("/WEB16/cookieServlet")//客户端获取到cookie后只有访问该路径才会携带cookie信息。
//向要响应给客户端的response添加cookie
response.addCookie(cookie);
- 服务器端如何接受客户端发送的cookie信息
Cookie[] cookies=request.getCookies();//获取所有的cookie信息
2.Session技术
Session技术是将数据存储到服务器端,为每个客户端创建一块内存空间存储客户端信息,但客户端每需要携带一个标识JSESSIONID去寻找自己的session空间。
//获得session对象,根据JSESSIONID在服务器端寻找session,如果存在,直接返回,不存在,创建一个返回。
HttpSession session=request.getSession();
session.setAttribute(String name,Object obj);
session.getAttribute(String name);
session.removeAttribute(String name);
3.Session对象的生命周期,合适创建,何时销毁,作用范围?
- 创建:第一次执行request.getSession时创建
- 销毁:1.服务器非正常关闭,
2.session过期/失效(默认30分钟(当然时间可以配置),从不操作服务器端开始计时)
3.手动销毁session.invalidate() - 作用范围:默认在一次会话中公用一个sesion对象。
三. HttpServletRequest和HttpServletResponse
我们在创建servlet时,会覆盖service()方法,或者覆盖doGet()/doPost()方法,这些方法中都有两个参数,service()中是ServletRequest和ServletResponse,而doGet和都Post()方法中是HttpServletRequest和HttpServletResponse,一个代表请求request,一个代表响应response.。因为HttpServletRequest是ServletRequest的子接口,功能更多。
1.request和response的运行流程
像平时我都是把web项目发布运行在tomcat上,当客户端发送http请求给tomcat内核,tomcat内核会进行:
- 解析请求的http资源
- 将请求的信息封装成request对象,同时创建一个response对象(每次访问servlet的service方法都会创建一对新的)
- 创建servlet对象,
- 调用service方法,service方法结束返回后,tomcat内核会去读response缓冲区的内容,从中获取设置的信息,封装成一个http响应,返回给客户端
注意:(每次访问servlet的service方法都会创建一对新的request和response)
四. http响应和http请求
五.servlet
1.什么是servlet?
其实servlet是处理客户端请求和响应给浏览器的动态资源,servlet本质上就是java代码,通过java的API动态地向客户端输出内容。
2.快速搭建servlet
实现步骤:
- 创建类实现servlet接口
- 覆盖尚未实现的方法-service方法
- 在web.xml中进行servlet的配置
但在开发中我们不会这样做,因为覆盖的方法太多,我们都是创建类继承HttpServlet
- 创建类继承HttpServlet类
- 覆盖doGet和doPost()方法
- 在web.xml中配置servlet
3.Servlet的API,
- Servlet接口的方法:
- init(ServletConfig config) 何时执行:servlet对象创建的时候执行
- service(ServletRequest request,ServletResponse response) 何时执行:每次请求都会执行。
ServletRequest 封装的是http请求的信息,ServletResponse 封装的是响应的信息。 - destroy() 何时执行:销毁的时候执行。
- HttpSerlet类的方法:
- init()
- doGet(HtttpServletRequest request,HttpServletResponse response)
doGet(HtttpServletRequest request,HttpServletResponse response) - destroy()
4.Servlet的生命周期?
- Servlet何时创建:默认第一次访问servlet时创建该对象。
如果在web.xml中配置servlet的就可以在服务器启动时就创建。 - Servlet何时销毁:服务器关闭,servlet就销毁了。
- service()方法: 每次访问服务器时都会执行service方法。
5.Servlet在web.xml中配置
<servlet>
<servlet-name>servlet1</servlet-name>
<servlet-class>com.xiaodeng.DemoServlet</servlet-class> //servlet类
</servlet>
<servlet-mapping>
<servlet-name>servlet1</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
url-patten三种配置方式:
- 完全匹配:访问的资源与配置的资源完全相同才能访问到
<url-pattern>/startServlet</url-pattern>
- 目录匹配: 格式:/虚拟的目录…/* *代表任意
<url-pattern>/aaa/bbb/ccc/*</url-pattern>
- 扩展名匹配: 格式:*.扩展名
<url-pattern>*.abcd</url-pattern>
6.ServletContext对象
- 什么是ServletContext对象?
ServletContext代表的web应用的上下文对象,ServletContext对象一个web应用只有一个,内部封装该web应用的信息。 - ServletContext的生命周期
创建:服务器启动,web应用被加载后创建的。
销毁:web应用卸载后。 - ServletContext的作用
- 获得web应用的全局的初始化参数。
<servlet>
<servlet-name>servlet1</servlet-name>
<servlet-class>com.xiaodeng.DemoServlet</servlet-class>
<!--配置全局的初始化参数>
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
<context-param>
</servlet>
//获得ServletContext对象
ServletContext context=getServletContext();
//获得初始化参数
String param=context.getInitParameter("driver");
- 获得web应用中任何资源的绝对路径
String path = context.getRealPath(相对于该web应用的相对地址); - ServletContext 是一个域对象
ServletContext 域对象的作用范围:整个web应用。(都可以向该域存储对象,取对象,是web应用中共享数据的区域)
- setAtrribute(String name,Object obj);
- getAttribute(String name);
- removeAttribute(String name);