微信公众号开发要用到Servlet,但被JFinal的filter过滤掉了,如何解决?

发布于 2021-11-24 15:36:48 字数 3085 浏览 837 评论 9

背景:

在一个已经用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>



按照以上的配置,微信的servlet被JFinal的filter过滤掉了,请问怎么处理才可以在JFinal框架下完成微信公众号这个Servlet的功能?谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

羁拥 2021-11-28 09:27:13

不用Servlet,那这个类CoreServlet怎么改写,doGet方法和doPost方法怎么改写?

归途 2021-11-28 09:25:26

回复
getPara

爱的那么颓废 2021-11-28 09:07:59

你不用servlet不就行了。。

做个少女永远怀春 2021-11-28 08:23:33

我是说demo用到Servlet,不是说一定要用到。那你知道不用Servlet怎么改写吗?

冷默言语 2021-11-28 06:58:32

谁说要用到servlet...额.胡扯.

少女净妖师 2021-11-28 04:35:45

回复
post和get仅仅是访问的两种方式而已,老大的那个index,同时都搞定了

无法言说的痛 2021-11-28 02:15:29

可行。。非常感谢!!!

看透却不说透 2021-11-26 15:56:37

很简洁的回复,但我估计不懂的人看了你的回复还是不懂。

甜扑 2021-11-25 23:32:56

那个demo可以直接用jfinal的方法直接搞定的,没必要去写servlet的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文