关于Servlet里的doget执行了两次的问题
如题,我正在开发微信公账号,但是由于域名没有备案,所以在微信授权获取基本信息,跳转到第三方网页的时候会出现
这样的页面,其实在这个时候已经获取到了需要的信息
,但是在点击一图的继续访问后,他再次执行了doget方法,导致了报错
因为code被使用过一次了,官方文档说的很清楚,code只能用一次。现在有什么办法能让doget在点击继续访问的时候不会再次执行呢,或者其他办法也行,求教大神们,以下是Servlet代码:
public class OAuthServlet extends HttpServlet {
private static final long serialVersionUID = -1847238807216447030L;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
// 用户同意授权后,能获取到code
String code = request.getParameter("code");
String state = request.getParameter("state");
// 用户同意授权
if (!"authdeny".equals(code)) {
// 获取网页授权access_token
WeixinOauth2Token weixinOauth2Token = AdvancedUtil.getOauth2AccessToken("wxe34a90ac7bxxcab85c", "1207d566090a8344xxxd6224c02c", code);
// 网页授权接口访问凭证
String accessToken = weixinOauth2Token.getAccessToken();
// 用户标识
String openId = weixinOauth2Token.getOpenId();
// 获取用户信息
SNSUserInfo snsUserInfo = AdvancedUtil.getSNSUserInfo(accessToken, openId);
// 设置要传递的参数
request.setAttribute("snsUserInfo", snsUserInfo);
request.setAttribute("state", state);
}
// 跳转到index.jsp
request.getRequestDispatcher("index.jsp").forward(request, response);
}
}
这样的页面,其实在这个时候已经获取到了需要的信息
,但是在点击一图的继续访问后,他再次执行了doget方法,导致了报错
因为code被使用过一次了,官方文档说的很清楚,code只能用一次。现在有什么办法能让doget在点击继续访问的时候不会再次执行呢,或者其他办法也行,求教大神们,以下是Servlet代码:public class OAuthServlet extends HttpServlet {
private static final long serialVersionUID = -1847238807216447030L;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
// 用户同意授权后,能获取到code
String code = request.getParameter("code");
String state = request.getParameter("state");
// 用户同意授权
if (!"authdeny".equals(code)) {
// 获取网页授权access_token
WeixinOauth2Token weixinOauth2Token = AdvancedUtil.getOauth2AccessToken("wxe34a90ac7bxxcab85c", "1207d566090a8344xxxd6224c02c", code);
// 网页授权接口访问凭证
String accessToken = weixinOauth2Token.getAccessToken();
// 用户标识
String openId = weixinOauth2Token.getOpenId();
// 获取用户信息
SNSUserInfo snsUserInfo = AdvancedUtil.getSNSUserInfo(accessToken, openId);
// 设置要传递的参数
request.setAttribute("snsUserInfo", snsUserInfo);
request.setAttribute("state", state);
}
// 跳转到index.jsp
request.getRequestDispatcher("index.jsp").forward(request, response);
}
}
...全文
相关推荐
【servlet】彻底解决doGet、doPost以及控制台中文乱码问题
我们在javaWeb项目时,使用doget和dopost总是会出现各种原因的中文乱码问题,楼主在查阅大量资料后,将为什么有这样的问题,和如何解决这种问题做个总结。 思维导图: 1. 应答乱码处理(response输出页面时乱码) 1.1 问题: 输出到页面时中文会乱码 后端代码: PrintWriter out = response.getWriter(); out.println(你好,世界!); 前端显示: 1.2 原因 没有设置HttpServletResponse使用哪种编码,默认编码跟浏览器解码不匹配。 1.3 解决方案: 方案1: 在PrintWriter out = re
Servlet中doGet()测试方法
Servlet中doGet()测试方法,方便测试Servlet中数据库的查询功能
servlet中方法执行次序及API简介(init,service,doservice,doget等)
NULL 博文链接:https://utopiasky.iteye.com/blog/678417
13-Servlet访问流程以及doGet和doPost.pdf
Servlet访问流程以及doGet和doPost 能力目标 能叙述Servlet访问流程以及Servlet的生命周期 能描述init()、service()、destory()什么时候被调用的 能描述doGet()和doPost()内部访问流程
Servlet中doGet与doPost的区别
Servlet中doGet与doPost的区别


Web 开发
