JavaWeb11-jsp.cookie.session(2)

http协议规定

Http协议对Cookie做了一些规定,如下所示:

a. 一个Cookie的大小,最大为4KB;

b. 一个服务器最多向一个浏览器保存20个Cookie;

c. 一个浏览器最多可以保存300个Cookie。

我们知道,浏览器将服务器发送过来的cookie保存在本地磁盘,如果cookie过多,必然会加大浏览器的压力,因此Http协议对Cookie做了以上规定。

但是,目前浏览器之间因为竞争,很多都在一定范围内违反了Http规定,例如,一个浏览器最多保存的Cookie个数超过300个。但是也不会出现浏览器允许一个Cookie的大小超过4GB。

2. cookie常用api及其原理

cookie是由服务器生成,通过响应回去的. set-cookie:akey=avalue

浏览器再次访问服务器的时候,通过一定的规则携带不同的cookie 请求头: cookie: akey=avalue

javax.servlet.http.Cookie类用于创建一个Cookie,response接口中也定义了一个addCookie方法,它用于在其响应头中增加一个相应的Set-Cookie头字段。 同样,request接口中也定义了一个getCookies方法,它用于获取客户端提交的Cookie。

构造方法

Øpublic Cookie(String name, String value):构造带指定名称和值的 cookie。

Cookie cookie= newCookie(String key,String value);

写到浏览器

response.addCookie(Cookie cookie);

获取cookie

Cookie [] cookies=request.getCookies();

成员方法

Øpublic String getName():返回(获取) cookie 的名称(key)

Øpublic String getValue():返回(获取) cookie 的值。

Øpublic void setMaxAge(int expiry):设置 cookie 的最大生存时间,以秒为单位(持久化cookie)

Øpublic void setPath(String uri):指定客户端应该返回 cookie 的路径。(设置路径)

代码实现

案例:看下cookie是如何使用的.

在day10工程下创建一个CookieDemo1Servlet,写入以下代码:

//1.创建cookie

Cookie cookie=new Cookie("cookieName","cookieValue");

//2.通过response对象将cookie响应到浏览器

response.addCookie(cookie);

然后通过抓包工具看下:

当在浏览器上访问http://localhost/day10/cookieDemo1时,抓取到的http请求与响应信息如下:

请求信息:

GET /day10/cookieDemo1 HTTP/1.1

Accept: text/html, application/xhtml+xml, */*

Accept-Language: zh-CN

User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)

Accept-Encoding: gzip, deflate

Host: localhost

Connection: Keep-Alive

响应信息

HTTP/1.1 200 OK

Server: Apache-Coyote/1.1

Set-Cookie: cookieName=cookieValue

Content-Length: 0

Date: Tue, 12 May 2015 05:26:53 GMT

再次访问此页面

请求信息:

GET /day10/cookieDemo1 HTTP/1.1

Accept: text/html, application/xhtml+xml, */*

Accept-Language: zh-CN

User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)

Accept-Encoding: gzip, deflate

Host: localhost

Connection: Keep-Alive

Cookie: cookieName=cookieValue

通过以上分析,我们通过下面图进行总结:

执行流程:

浏览器第一次访问服务器

服务器生成cookie,通过响应信息返回浏览器 键值对

浏览器再次访问服务器的时候,通过一定的规则携带不同的cookie 请求头携带

注意:

cookie不能跨浏览器

cookie默认浏览器关闭的时候消亡

cookie不支持中文

3. cookie的持久化

持久化

如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器的内存中),用户退出浏览器之后即被删除。

若希望浏览器将该cookie存储在磁盘上,则需要使用Cookie类的setMaxAge方法,并给出一个以秒为单位的时间。

setMaxAge(int expiry)以秒为单位的时间

0代表的是删除持久cookie,注意,删除cookie时,path路径必须一致,否则不会删除

-1代表的是浏览器关闭后失效.

路径:

Cookie的路径是在服务器创建Cookie时设置的,它的作用是决定浏览器访问服务器的某个资源时,需要将浏览器端保存的那些Cookie归还给服务器,可以通过Cookie类的setPath方法来设置cookie的路径.

关于路径包含关系

setPath(path):根据路径的不同携带不同cookie

注意:路径必须以"/"开始,以"/"结尾

默认的路径:

从项目名称开始,到访问的页面(serlvet)结束之间的最后一个"/"结束

例如:

http://localhost/day11/remplus

cookie的默认路径: /day11/

http://localhost/day11/a/b/c/d.jsp

cookie的默认路径为:/day11/a/b/c/

练习:

例如,浏览器中保存如下几个cookie,它们的路径分别是:

aCookie.path=/day10/

bCookie.path=/day10/jsps/

cCookie.path=/day10/jsps/cookie/

访问路径是:http://localhost:8080/day10/index.jsp

浏览器发送给服务器的cookie有:aCookie;

访问路径是:http://localhost:8080/day10/jsps/a.jsp

浏览器发送给服务器的cookie有:aCookie,bCookie;

访问路径是:http://localhost:8080/day10/jsps/cookie/b.jsp

浏览器发送给服务器的cookie有:aCookie,bCookie,cCookie。

4. 案例--记录上次访问时间

功能描述

当访问day10工程下的某一个servlet时,会显示出上一次访问这个资源的时间。

案例分析

使用到的知识点分析

Cookie cookie=new Cookie(); 创建cookie

response.addCookie() 将cookie添加到http响应中

request.getCookies(); 获取所有的cookie

代码实现(1)

VisitServlet
public class VisitServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1.得到系统当前时间
Date date=new Date();
//2.创建一个cookie
Cookie cookie=new Cookie("time",date.getTime()+"");
//3.将 cookie通过response响应到浏览器端
response.addCookie(cookie);
}
}
ShowTimeServlet
public class ShowTimeServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置响应编码
response.setContentType("text/html;charset=utf-8");
//1.得到名称叫time的cookie
Cookie[] cs = request.getCookies();
//2.遍历cs,得到cookie
for(Cookie c:cs){
if("time".equals(c.getName())){//判断cookie的名称是否有叫time
long time=Long.parseLong(c.getValue()); //得到名称叫time的cookie的value
Date date=new Date(time); //构造出新的时间
response.getWriter().write(date.toLocaleString());
return;
}
}
response.getWriter().write("第一次访问:"+new Date().toLocaleString());
}
}

上面的代码已经实现了我们的需求,但是不妥的地方是还得需要单独访问一下才知道上次的时间.我们完全可以把两个合二为一

public class ShowCurrentTimeServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1.设置响应编码
response.setContentType("text/html;charset=utf-8");
// 2.获取一个名称叫time的cookie.
Cookie cookie = findCookieByName("time", request.getCookies());
Date now = new Date();
if (cookie == null) {
// 说明第一次访问
response.getWriter().write("第一次访问时间是:" + now.toLocaleString());
} else {
// 不是第一次访问
long time = Long.parseLong(cookie.getValue());
response.getWriter().write("上次访问时间是:" + new Date(time).toLocaleString());
}
// 需要将这时访问的时间存储到cookie中。
cookie = new Cookie("time", now.getTime() + "");
//持久化cookie
//cookie.setMaxAge(60*60*24*7);
cookie.setMaxAge(0);//删除cookie
response.addCookie(cookie);
}
// 根据名称查找cookie
private Cookie findCookieByName(String name, Cookie[] cs) {
if (cs == null || cs.length == 0) {
return null;
}
for (Cookie c : cs) {
if (name.equals(c.getName())) {
return c;
}
}
return null;
}
}

代码实现(2)

RemServlet
package cn.itcast.cookie.b_rem;
import java.io.IOException;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 记录时间
* @author Administrator
*
*/
public class RemSerlvet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//0.设置编码
response.setContentType("text/html;charset=utf-8");
//1.生成cookie
Cookie c=new Cookie("lastTime", new Date().getTime()+"");
//1.1设置生存时间
c.setMaxAge(3600);
//2.写回去
response.addCookie(c);
//3.提示信息
response.getWriter().print("时间已记录");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
ShowServlet
package cn.itcast.cookie.b_rem;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 展示remservlet最后一次访问时间
* @author Administrator
*
*/
public class ShowServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//0.设置编码
response.setContentType("text/html;charset=utf-8");
PrintWriter w = response.getWriter();
//1.获取指定的cookie
Cookie[] cookies=request.getCookies();
if(cookies!=null){
for (Cookie c : cookies) {
if("lastTime".equals(c.getName())){
//3.提示信息
//3.1.有cookie提示信息
//获取值
String value = c.getValue();
//转成long
long l = Long.parseLong(value);
//写信息
w.print("您上次访问的时间为:"+new Date(l).toLocaleString());
return;
}
}
}
//3.2没有cookie 提示信息
w.print("您还没有访问过remservlet");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}

两个合二为一

Cookie工具类

package cn.itcast.util;
import javax.servlet.http.Cookie;
/**
* cookie工具类
* @author Administrator
*
*/
public class CookieUtils {
/**
* 从数组中获取指定名称的cookie
* @param name cookie名称
* @param cookies cookie数组
* @return cookie
*/
public static Cookie getCookieByName(String name,Cookie[] cookies){
//判读cookie是否为空
if(cookies!=null){
//不为空
for (Cookie c : cookies) {
if(name.equals(c.getName())){
return c;
}
}
}
return null;
}
}

两个Servlet合二为一

package cn.itcast.cookie.c_rem_plus;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.itcast.util.CookieUtils;
public class RemPlusServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//0.设置编码
response.setContentType("text/html;charset=utf-8");
PrintWriter w = response.getWriter();
//1.获取指定cookie
Cookie c=CookieUtils.getCookieByName("lastTime", request.getCookies());
//2.判断cookie
if(c==null){
//2.1cookie为空 提示第一次访问
w.print("您是第一次访问!");
}else{
//2.2cookie不为空 把当前时间打印到页面上
w.print("您上一次访问的时间为:"+(new Date(Long.parseLong(c.getValue())).toLocaleString()));
}
//3.将当前时间记录下
c=new Cookie("lastTime", new Date().getTime()+"");
c.setMaxAge(3600);
//写回浏览器
response.addCookie(c);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}

5. 案例--查看历史记录

功能描述

做一个商品页面,当我们访问后,在页面上点击查看商品浏览记录后,可以查看到以前浏览过的商品信息

案例分析

使用到的知识点分析

超连接带参数 <a href=”/day10/book?id=1”>

获取请求参数 request.getParameter()

创建Cookie cookie=new Cookie()

获取所有cookie request.getCookies()

将cookie响应到浏览器端 response.addCookies()

代码实现

book.jsp
<a href="/day10/book?id=1">西游记</a><br>
<a href="/day10/book?id=2">水浒传</a><br>
<a href="/day10/book?id=3">红楼梦</a><br>
<a href="/day10/book?id=4">三国演义</a><br>
<hr>
<a href="/day10/bookHistory.jsp">查看浏览商品记录</a>
BookServlet
public class BookServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
// 1.得到商品的id
String id = request.getParameter("id");
// 2.将id值保存到cookie的名称叫ids这个cookie中。
Cookie cookie = CookieUtils.findCookieByName("ids",
request.getCookies());
if (cookie == null) { // 第一次没有ids,就得到null
cookie = new Cookie("ids", id);
} else { // 不是第一次,就得到的不是null.
// 3.得到cookie的value值。
String ids = cookie.getValue();
// 判断id是否重复
List<String> list = Arrays.asList(ids.split("-")); //将数组转换成集合。
if (!list.contains(id)) {
ids = ids + "-" + id;
}
cookie = new Cookie("ids", ids);
}
response.addCookie(cookie);
response.getWriter().write("商品展示成功,<a href='/day10/book.jsp'>继续浏览</a>");
}
}
bookHistory.jsp
<%
String[] books = { "西游记", "水浒传", "红楼梦", "三国演义" };
//1.得到所有的cookie,得到名称叫ids的cookie
Cookie[] cs = request.getCookies();
Cookie c = CookieUtils.findCookieByName("ids", cs);
if (c == null) {
//没有浏览记录
out.print("无浏览记录");
} else {
//有浏览记录
//2.得到cookie的value
out.print("浏览记录如下:<br>");
String ids = c.getValue(); //1-2-4
String[] id = ids.split("-");
for (int i = 0; i < id.length; i++) {
int bookid = Integer.parseInt(id[i]) - 1;
out.print(books[bookid] + "<br>");
}
}
%>

四.session

1. session的介绍

首先,HttpSession是javax.servlet.http包下的一个接口。从名字来看,我们可以知道HttpSession与Http协议有一定的关系,但是它并不是由Http协议定义的,而是由Javaweb提供。我们可以在JavaEE api中查看它的详细信息。

其次,HttpSession是用来进行会话跟踪的接口,我们之前也学过另外一个与会话相关的技术Cookie。在Cookie介绍中我们了解到,Cookie是由Http协议制定的,在请求信息和响应信息中分别对应了Cookie请求头和Set-Cookie响应头,并且Cookie是由服务器创建,保存在客户端。而HttpSession对象也是由服务器创建,但是与Cookie不同的是,它保存在服务器端。

HttpSession对象是Servlet的三大域对象之一,其他两个域对象是HttpServletRequest和ServletContext。这三个域中,request的域范围最小,它的域范围是整个请求链,并且只在请求转发和包含时存在;session域对象的域范围是一次会话,而在一次会话中会产生多次请求,因此session的域范围要比request大;application的域范围是最大的,因为一个web应用只有唯一的一个application对象,只有当web应用被移出服务器或服务器关闭它才死亡,它的域范围是整个应用。

2. session常用api,生命周期及其原理

session底层是依赖Cookie的,如果浏览器禁用Cookie则session会依赖URL重写。详情我们会在后面介绍。如何获取HttpSession对象?在服务器端,例如在Servlet中,我们通过request对象的getSession()方法获取服务器为当前用户创建的session对象,即:HttpSession session=request.getSession()。而在jsp中,session是jsp的内置对象,不用获取就可以直接使用。

session的常用api

我们知道每一个域对象都会有以下三个方法,HttpSession也不例外:

Øvoid setAttribute(String name,Object value):向域中添加域属性;

ØObject getAttribute(String name):从域中获取指定名称的属性值;

ØVoid removeAttribute(String name):移出域中指定名称的域属性

接下来,咱们来做个案例看下session是如何使用的.

在day10工程下创建一个SessionDemo1Servlet,写入以下代码:

// 1.获取session
HttpSession session = request.getSession();
// 2.向session中存储数据据
session.setAttribute("name", "tom");
在day10工程下创建一个SessionDemo2Servlet,写入以下代码:
// 1.获取session
HttpSession session = request.getSession();
// 2.获取session中信息
String name = (String) session.getAttribute("name");
System.out.println(name);

接下来使用抓包工具看下:

打开浏览器访问http://localhost/day10/sessionDemo1

请求信息:

GET /day10/sessionDemo1 HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Accept-Encoding: gzip, deflate
Host: localhost
Connection: Keep-Alive

响应信息:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=2021FCEFDF31A6DAC8E7CC201F7AF404; Path=/day10/; HttpOnly
Content-Length: 0
Date: Tue, 12 May 2015 21:58:39 GMT

再次访问http://localhost/day10/sessionDemo2:

请求信息:

GET /day10/sessionDemo2 HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Accept-Encoding: gzip, deflate
Host: localhost
Connection: Keep-Alive
Cookie: JSESSIONID=2021FCEFDF31A6DAC8E7CC201F7AF404

响应信息

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Length: 0
Date: Tue, 12 May 2015 22:00:46 GMT

程序执行完成后,在控制台上打印出tom.

session对象的创建分析

如果请求时,cookie中有jsessionid这个cookie,那么我们通过request.getSession()时,

就会根据jsessionid值查找session的id,如果查找到,会使用已有的,如果没有查找到,会创建。

如果请求时,cookie中没有jsessionid这个cookie,那么request.getSession()就会创建一个新的session对象.

session对象的销毁分析

浏览器关闭了,session对象不会销毁的,session的销毁与关闭浏览器无关.

session对象销毁方式:

1.关闭服务器

2.默认超时

在tomcat/conf/web.xml文件中设置了session默认超时时间

<session-config>
<session-timeout>30</session-timeout>
</session-config>

默认30分钟超时

3.可以设置session超时时间(以秒为单位)

void setMaxInactiveInterval(int interval)

4.销毁session

invalidate();

session的原理

第一次访问,请求中不存在jsessionid值,这时发送请求到服务器端就会创建HttpSession对象.工将session的id值存储到cookie中响应到浏览器端

当下一次在请求时,这时会在请求中存在jsessionid值,到服务器端后,就会根据jsessionid值,查找指定id的session对象。

如果查找到,就直接使用,而不会重新创建。如果没有查找到,会重新创建.

HttpSession session=request.getSession();

扩展

HttpSession session=request.getSession(true/false);

如果值是true与无参数一样.

如果是false,它不会重新创建session对象,会返回null值。(用的很少)

3. 案例--购物车

功能描述

有一个商品页面,可以点击超连接将商品添加到购物车,并可以查看购物车中商品信息

案例分析

使用到的知识点分析

购物车使用的数据结构 Map<String,Integer>

获取session request.getSession()

解决请求参数乱码 new String(name.getBytes(“iso8859-1”),”utf-8”)

代码实现

Productlist.jsp
<table border='1' width="65%">
<tr>
<td>商品名称</td>
<td>操作</td>
</tr>
<tr>
<td>洗衣机</td>
<td><a href="/day10/addProductToCart?name=洗衣机">添加到购物车</a></td>
</tr>
<tr>
<td>电视机</td>
<td><a href="/day10/addProductToCart?name=电视机">添加到购物车</a></td>
</tr>
<tr>
<td>缝纫机</td>
<td><a href="/day10/addProductToCart?name=缝纫机">添加到购物车</a></td>
</tr>
<tr>
<td>打火机</td>
<td><a href="/day10/addProductToCart?name=打火机">添加到购物车</a></td>
</tr>
</table>
AddProductToCartServlet
public class AddProductToCartServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
// 1.获取商品名称
String name = request.getParameter("name");
// 2.解决乱码
name = new String(name.getBytes("iso8859-1"), "utf-8");
// 3.获取购物车
HttpSession session = request.getSession();
Map<String, Integer> cart = (Map<String, Integer>) session
.getAttribute("cart");
// 4.判断购物车是否存在
Integer count = null; //代表的是商品数量
if (cart == null) {
cart = new HashMap<String, Integer>();
// cart.put(name, 1);
count = 1;
} else {
// 如果购物车存在,我们需要考虑商品在购物车中是否存在。
count = cart.get(name);
if (count == null) {
// 说明购物车中无此商品
count = 1;
} else {
// 如果有此商品,将数量加1
count += 1;
}
}
cart.put(name, count);
// 5.将购物车存储到session中.
session.setAttribute("cart", cart);
response.getWriter().write("添加成功,<a href='/day10/productlist.jsp'>继续购物</a>,<a href='/day10/cart.jsp'>查看购物车</a>");
}
}
cart.jsp
<table border='1' width="65%">
<tr>
<td>商品名称</td>
<td>商品数量</td>
</tr>
<%
//1.得到session
HttpSession mysession = request.getSession();
//2.得到购物车
Map<String, Integer> cart = (Map<String, Integer>) mysession
.getAttribute("cart");
//3.判断购物车是否存在
if (cart == null || cart.size() == 0) {
out.print("购物车中无商品<br>");
} else {
//4.遍历cart
for (String name : cart.keySet()) {
out.print("<tr><td>" + name + "</td><td>" + cart.get(name)
+ "</td></tr>");
}
}
%>
</table>

4. 案例--验证码

5. url重写

url重写介绍

如果浏览器不支持Cookie或用户阻止了所有Cookie,可以把会话ID附加在HTML页面中所有的URL上,这些页面作为响应发送给客户。这样,当用户单击URL时,会话ID被自动作为请求头的一部分而不是作为头行发送回服务器。这种方法称为URL重写(URL rewriting)。

url重写作用

当客户机不接受cookie时,server就使用URL重写作为会话跟踪的基本方式.URL重写,添加了附加数据(会话ID)到请求的URL路径上.

会话ID必须被编码作为该URL字符串中的路径参数。该参数的名称为jsessionid,

简单说就是cookie禁用了jsessionid就不能携带,那么每次请求,都是一个新的session对象。

如果想要使用同一个session对象,可以使用url重写.

url重写实现

response. encodeRedirectURL(java.lang.String url)

用于对sendRedirect方法后的url地址进行重写。

response. encodeURL(java.lang.String url)

用于对表单action和超链接的url地址进行重写

修改jsp文件的默认字符编码

修改文件的打开方式


原文发布于微信公众号 - Java帮帮(javahelp)

原文发表时间:2017-01-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java3y

Servlet第三篇【request和response介绍、response的常见应用】

response、request对象 Tomcat收到客户端的http请求,会针对每一次请求,分别创建一个代表请求的request对象、和代表响应的respon...

81960
来自专栏Vamei实验室

Java网络03 Servlet沙拉

Servlet开胃酒中介绍了Servlet的基本流程和设置方式。这里,我们将看一些Servlet实例。这些实例都是HTTP通信(参考HTTP协议)中的常见问题。...

20780
来自专栏Java后端生活

JavaWeb(五)Servlet-2

21760
来自专栏Java帮帮-微信公众号-技术文章全总结

Web-第十五天 Ajax学习【悟空教程】

在实际开发中,完成注册功能前,如果用户填写用户信息,准备填写其他信息时,将提示当前用户的用户名是否可用。效果图如下:

13630
来自专栏Android 研究

OkHttp源码解析(十) OKHTTP中连接与请求及总结

主要看下ConnectInterceptor()方法,里面代码已经很简单了,受限了通过streamAllocation的newStream方法获取一个流(Htt...

19140
来自专栏轮子工厂

由浅入深,解析Java Servlet工作过程

如果是post请求的话则编写dopost函数,是get请求的话就编写doget函数。但此时web服务器还不能调用该servlet类,还需在web.xml文件中...

12830
来自专栏王金龙的专栏

Jedis与Redisson选型对比

44740
来自专栏jeremy的技术点滴

获取后台任务进度的另类办法

60560
来自专栏积累沉淀

Filter过滤器

web.xml中元素执行的顺序listener->filter->struts拦截器->servlet。 1.过滤器的概念 Java中的Filter 并不是一个...

19850
来自专栏Android先生

OKHttp源码解析--初阶

这段时间老李的新公司要更换网络层,知道现在主流网络层的模式是RxJava+Retrofit+OKHttp,所以老李开始研究这三个项目的源代码,在更换网络层后,开...

13720

扫码关注云+社区

领取腾讯云代金券