微信公众号开发要用到Servlet,但被JFinal的filter过滤掉了,如何解决?
背景:
在一个已经用JFinal框架开发的项目中,需要实现微信公众号的功能,参考了微信公众号开发的例子如下:
http://blog.csdn.net/lyq8479/article/details/8944988
创建公众帐号后台接口程序
创建一个Java Web工程,并新建一个能够处理请求的Servlet,命名任意,我在这里将其命名为org.liufeng.course.servlet.CoreServlet,代码如下:
package org.liufeng.course.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.liufeng.course.util.SignUtil; /** * 核心请求处理类 * * @author liufeng * @date 2013-05-18 */ public class CoreServlet extends HttpServlet { private static final long serialVersionUID = 4440739483644821986L; /** * 确认请求来自微信服务器 */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 微信加密签名 String signature = request.getParameter("signature"); // 时间戳 String timestamp = request.getParameter("timestamp"); // 随机数 String nonce = request.getParameter("nonce"); // 随机字符串 String echostr = request.getParameter("echostr"); PrintWriter out = response.getWriter(); // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败 if (SignUtil.checkSignature(signature, timestamp, nonce)) { out.print(echostr); } out.close(); out = null; } /** * 处理微信服务器发来的消息 */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO 消息的接收、处理、响应 } }
在我们的项目中web.xml配置如下:
<filter> <filter-name>jfinal</filter-name> <filter-class>com.jfinal.core.JFinalFilter</filter-class> <init-param> <param-name>configClass</param-name> <param-value>com.innfee.core.ApplicationConfig</param-value> </init-param> </filter> <filter-mapping> <filter-name>jfinal</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 微信servlet配置 --> <servlet> <servlet-name>weixinServlet</servlet-name> <servlet-class>com.innfee.app.weixin.WeixinServlet</servlet-class> </servlet> <!-- url-pattern中配置的/coreServlet用于指定该Servlet的访问路径 --> <servlet-mapping> <servlet-name>weixinServlet</servlet-name> <url-pattern>/weixinServlet</url-pattern> </servlet-mapping>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
不用Servlet,那这个类CoreServlet怎么改写,doGet方法和doPost方法怎么改写?
回复
getPara
你不用servlet不就行了。。
我是说demo用到Servlet,不是说一定要用到。那你知道不用Servlet怎么改写吗?
谁说要用到servlet...额.胡扯.
回复
post和get仅仅是访问的两种方式而已,老大的那个index,同时都搞定了
可行。。非常感谢!!!
很简洁的回复,但我估计不懂的人看了你的回复还是不懂。
那个demo可以直接用jfinal的方法直接搞定的,没必要去写servlet的