Servlet是什么呢?
Servlet是网页客户端与服务器交互的中介。网页要上传数据,要get信息,这些都需要servlet来接收请求,然后从服务器获取数据。
java 中Servlet常用的是HttpServlet, 它有两个常用方法,doGet(HttpServletRequest request, HttpServletResponse response), doPost(...)分别处理浏览器的get 与post请求。
一般来说我们实现这两个方法,就足以处理常用浏览器操作。
其中两个类特别重要:
1, HttpServletRequest 这个类记录了浏览器的请求信息,包括发送的数据, Cookie, Session, Header等等都可以调用相应的get方法来获取。
2, HttpServletResponse 这个类记录了服务器要发送给浏览器的数据。包括 Cookie, 应答数据, Header等都可以调用相应的set方法来设置。
可以说这个两个类是服务器与浏览器(客户端)通讯的关键。
那么什么是cookie, 什么是session呢?
众所周知,http协议是无状态的,但是现实中的很多需求要求我们保存http连接的状态,比如购物车。对此,有两种解决方案:
1, 客户端,cookie。 cookie是一段文本字段。由健值对,过期时间,域名,路径名四部分组成。
服务器段调用Cookie类新建一个cookie,然后调用response.addCookie(cookie)发送给客户端。
客户端接收后把它保存下来,在有效时间有效路径内,以后每一次请求都加上cookie字段,这样服务器端就知道客户端以前的状态了。
Cookie类有一系列的方法来设置cookie信息。获取Cookie时调用request.getCookies()即可。
2, 服务器端,session. session也是一段文本字段。保存在服务器端。服务器每次调用request.getSession(True)时(访问jsp也会自动创建session),创建session, 并自动创建一个sessionId来标识客户端。
这个sessionId并不需要我们手动发送给客户端, 服务器端会自动发送(一般通过cookie发送)。Java处理session主要靠HttpSession类。
我们可以通过它给session设置各种属性,来保存客户端信息。而客户端只需要一个保存sessionId即可,其他信息都保存在服务器端。
客户端每次请求时把sessionId带上,这样一个无状态的http连接,就变成有状态的了。
session会在到达有效时间时失效,我们也可手动调用invalidate() 方法来让它失效。