import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
import com.mashen.util.ConfigUtil;
import com.mashen.util.SignUtil;
/**
*Servlet implementation class WeiXinServlet
*
*/
@WebServlet("/WeiXinServlet")
//一个继承于HttpServlet的子类WeiXinServle类,HttpServlet类主要提供了doGet、doPOST以及Service方法
public class WeiXinServlet extendsHttpServlet {
privatestatic final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
publicWeiXinServlet() {
super();
//TODO Auto-generated constructor stub
}
/**
* 验证微信公众号开发者
* 只有在微信官网填写服务器配置的时候被调用
*/
//重写doGet方法,里面传入HttpServletRequest以及HttpServletRsponese的对象,我们需要通过调用他们来实现发送请求以及做出回应的动作
protectedvoid doGet(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
//TODO Auto-generated method stub
//提醒程序员现在是doGet方法在被调用
System.out.println("doGetstart");
//声明字符串signature(加密签名)、timestamp(时间戳)、nonce(随机数)、echostr(随机字符串)
Stringsignature = request.getParameter("signature");
Stringtimestamp = request.getParameter("timestamp");
Stringnonce = request.getParameter("nonce");
Stringechostr = request.getParameter("echostr");
//如果加密签名为空的话就调用HttpServletResponse类的对象response做出回应动作,在客户端输出“参数错误”(通过调用response的getprintwriter动作来成为一个PrintWriter类的对象然后再调用Printwriter对象的write动作进行输出)
if(signature == null) {
response.getWriter().write("参数错误");
//不为空的话就通过SignUtil类经过一系列操作,看这个加密签名、时间戳、随机数、随机字符串、token是否相符合
}else if (SignUtil.validSign(signature, ConfigUtil.getValues("token"),timestamp, nonce)) {
//验证符合之后输出验证成功,并在客户端打输出echostr(随机字符串)
System.out.println("验证成功");
response.getWriter().write(echostr);
}else {
//验证不通过在客户端打印验证失败,并在客户端输出fail
System.out.println("验证失败");
response.getWriter().write("fail");
}
}
/**
* @see HttpServlet#doPost(HttpServletRequestrequest, HttpServletResponse
* response)
*/
protectedvoid doPost(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
//TODO Auto-generated method stub
//同理,当调用doPOST方法时会打印出doPOST start,但是这里面并没有写除了打印之外的任何操作,并且当doget与doPOST同时存在的时候默认调用doGet方法,所以这里并不会使用到doPOST方法。
System.out.println("doPoststart");
}
}
------有些代码不应该被忘记,也没有源代码不应该被记住。