clazz=Class.forName(handler);MessageProcessingHandlerprocessingHandler=(MessageProcessingHandler)clazz.newInstance();//取得消息类型Stringtype=msg.getMsgType();Methodmt=clazz.getMethod(type"TypeMsg",InMessage.class);oms=(OutMessage)mt.invoke(processingHandler,msg);if(oms==null){oms=newTextOutMessage();((TextOutMessage)oms).setContent("系统错误!");}setMsgInfo(oms,msg);}catch(Exceptione){logger.error(e);oms=newTextOutMessage();((TextOutMessage)oms).setContent("系统错误!");try{setMsgInfo(oms,msg);}catch(Exceptione1){logger.error(e);}}//把发送发送对象转换为xml输出xs=XStreamFactory.init(true);xs.alias("xml",oms.getClass());xs.alias("item",Articles.class);Stringxml=xs.toXML(oms);logger.debug("输出消息:["xml"]");response.getWriter().write(xml);}privatevoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException{Stringsignature=request.getParameter("signature");//微信加密签名Stringtimestamp=request.getParameter("timestamp");//时间戳Stringnonce=request.getParameter("nonce");//随机数Stringechostr=request.getParameter("echostr");////验证if(Tools.checkSignature(_token,signature,timestamp,nonce)){response.getWriter().write(echostr);}}privatevoidsetMsgInfo(OutMessageoms,InMessagemsg)throwsException{//设置发送信息Class>outMsg=oms.getClass().getSuperclass();FieldCreateTime=outMsg.getDeclaredField("CreateTime");FieldToUserName=outMsg.getDeclaredField("ToUserName");FieldFromUserName=outMsg.getDeclaredField("FromUserName");ToUserName.setAccessible(true);CreateTime.setAccessible(true);FromUserName.setAccessible(true);CreateTime.set(oms,newDate().getTime());ToUserName.set(oms,msg.getFromUserName());FromUserName.set(oms,msg.getToUserName());}/***启动的时候加载wechat.properties配置可以在过滤器配置wechat.properties路径*/@Overridepublicvoidinit(FilterConfigconfig)throwsServletException{Stringcf=config.getInitParameter("conf");if(cf!=null){conf=cf;}StringclassPath=this.getClass().getResource("/").getPath().replaceAll("%20","");conf=conf.replace("classPath:",classPath);p=newProperties();Filepfile=newFile(conf);if(pfile.exists()){try{p.load(newFileInputStream(pfile));}catch(FileNotFoundExceptione){logger.error("未找到wechat.properties",e);}catch(IOExceptione){logger.error("wechat.properties读取异常",e);}}logger.info("WeChatFilter已经启动!");}}-IMDN开发者社群-imdn.cn">
clazz=Class.forName(handler);MessageProcessingHandlerprocessingHandler=(MessageProcessingHandler)clazz.newInstance();//取得消息类型Stringtype=msg.getMsgType();Methodmt=clazz.getMethod(type"TypeMsg",InMessage.class);oms=(OutMessage)mt.invoke(processingHandler,msg);if(oms==null){oms=newTextOutMessage();((TextOutMessage)oms).setContent("系统错误!");}setMsgInfo(oms,msg);}catch(Exceptione){logger.error(e);oms=newTextOutMessage();((TextOutMessage)oms).setContent("系统错误!");try{setMsgInfo(oms,msg);}catch(Exceptione1){logger.error(e);}}//把发送发送对象转换为xml输出xs=XStreamFactory.init(true);xs.alias("xml",oms.getClass());xs.alias("item",Articles.class);Stringxml=xs.toXML(oms);logger.debug("输出消息:["xml"]");response.getWriter().write(xml);}privatevoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException{Stringsignature=request.getParameter("signature");//微信加密签名Stringtimestamp=request.getParameter("timestamp");//时间戳Stringnonce=request.getParameter("nonce");//随机数Stringechostr=request.getParameter("echostr");////验证if(Tools.checkSignature(_token,signature,timestamp,nonce)){response.getWriter().write(echostr);}}privatevoidsetMsgInfo(OutMessageoms,InMessagemsg)throwsException{//设置发送信息Class>outMsg=oms.getClass().getSuperclass();FieldCreateTime=outMsg.getDeclaredField("CreateTime");FieldToUserName=outMsg.getDeclaredField("ToUserName");FieldFromUserName=outMsg.getDeclaredField("FromUserName");ToUserName.setAccessible(true);CreateTime.setAccessible(true);FromUserName.setAccessible(true);CreateTime.set(oms,newDate().getTime());ToUserName.set(oms,msg.getFromUserName());FromUserName.set(oms,msg.getToUserName());}/***启动的时候加载wechat.properties配置可以在过滤器配置wechat.properties路径*/@Overridepublicvoidinit(FilterConfigconfig)throwsServletException{Stringcf=config.getInitParameter("conf");if(cf!=null){conf=cf;}StringclassPath=this.getClass().getResource("/").getPath().replaceAll("%20","");conf=conf.replace("classPath:",classPath);p=newProperties();Filepfile=newFile(conf);if(pfile.exists()){try{p.load(newFileInputStream(pfile));}catch(FileNotFoundExceptione){logger.error("未找到wechat.properties",e);}catch(IOExceptione){logger.error("wechat.properties读取异常",e);}}logger.info("WeChatFilter已经启动!");}} - IMDN开发者社群-imdn.cn">
首页 »
Java »
微信公众平台开发模式(JAVA) SDK/微信app
于 2014-01-21 发布
0 186
【核心代码】package com.gson;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.Date;import java.util.Properties;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletInputStream;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.log4j.Logger;import com.gson.bean.Articles;import com.gson.bean.InMessage;import com.gson.bean.OutMessage;import com.gson.bean.TextOutMessage;import com.gson.inf.MessageProcessingHandler;import com.gson.util.Tools;import com.gson.util.XStreamFactory;import com.thoughtworks.xstream.XStream;/** * 请求拦截 * * @author GodSon * */public class WeChatFilter implements Filter { private final Logger logger = Logger.getLogger(WeChatFilter.class); private String _token; private String conf = "classPath:wechat.properties"; private String defaultHandler = "com.gson.inf.DefaultMessageProcessingHandlerImpl"; private Properties p; @Override public void destroy() { logger.info("WeChatFilter已经销毁"); } @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; Boolean isGet = request.getMethod().equals("GET"); String path = request.getServletPath(); String pathInfo = path.substring(path.lastIndexOf("/")); if (pathInfo == null) { response.getWriter().write("error"); } else { _token = pathInfo.substring(1); if (isGet) { doGet(request, response); } else { doPost(request, response); } } } private void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setCharacterEncoding("UTF-8"); response.setContentType("text/xml"); OutMessage oms = new OutMessage(); ServletInputStream in = request.getInputStream(); // 转换微信post过来的xml内容 XStream xs = XStreamFactory.init(false); xs.alias("xml", InMessage.class); String xmlMsg = Tools.inputStream2String(in); logger.debug("输入消息:[" xmlMsg "]"); InMessage msg = (InMessage) xs.fromXML(xmlMsg); // 获取自定消息处理器,如果自定义处理器则使用默认处理器。 String handler = p.getProperty("MessageProcessingHandlerImpl"); if (handler == null) handler = defaultHandler; try { // 加载处理器 Class clazz = Class.forName(handler); MessageProcessingHandler processingHandler = (MessageProcessingHandler) clazz.newInstance(); // 取得消息类型 String type = msg.getMsgType(); Method mt = clazz.getMethod(type "TypeMsg", InMessage.class); oms = (OutMessage) mt.invoke(processingHandler, msg); if (oms == null) { oms = new TextOutMessage(); ((TextOutMessage) oms).setContent("系统错误!"); } setMsgInfo(oms,msg); } catch (Exception e) { logger.error(e); oms = new TextOutMessage(); ((TextOutMessage) oms).setContent("系统错误!"); try { setMsgInfo(oms,msg); } catch (Exception e1) { logger.error(e); } } // 把发送发送对象转换为xml输出 xs = XStreamFactory.init(true); xs.alias("xml", oms.getClass()); xs.alias("item", Articles.class); String xml = xs.toXML(oms); logger.debug("输出消息:[" xml "]"); response.getWriter().write(xml); } private void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { String signature = request.getParameter("signature");// 微信加密签名 String timestamp = request.getParameter("timestamp");// 时间戳 String nonce = request.getParameter("nonce");// 随机数 String echostr = request.getParameter("echostr");// // 验证 if (Tools.checkSignature(_token, signature, timestamp, nonce)) { response.getWriter().write(echostr); } } private void setMsgInfo(OutMessage oms,InMessage msg) throws Exception { // 设置发送信息 Class outMsg = oms.getClass().getSuperclass(); Field CreateTime = outMsg.getDeclaredField("CreateTime"); Field ToUserName = outMsg.getDeclaredField("ToUserName"); Field FromUserName = outMsg.getDeclaredField("FromUserName"); ToUserName.setAccessible(true); CreateTime.setAccessible(true); FromUserName.setAccessible(true); CreateTime.set(oms, new Date().getTime()); ToUserName.set(oms, msg.getFromUserName()); FromUserName.set(oms, msg.getToUserName()); } /** * 启动的时候加载wechat.properties配置 可以在过滤器配置wechat.properties路径 */ @Override public void init(FilterConfig config) throws ServletException { String cf = config.getInitParameter("conf"); if (cf != null) { conf = cf; } String classPath = this.getClass().getResource("/").getPath().replaceAll("%20", " "); conf = conf.replace("classPath:", classPath); p = new Properties(); File pfile = new File(conf); if (pfile.exists()) { try { p.load(new FileInputStream(pfile)); } catch (FileNotFoundException e) { logger.error("未找到wechat.properties", e); } catch (IOException e) { logger.error("wechat.properties读取异常", e); } } logger.info("WeChatFilter已经启动!"); }}
下载说明:请别用迅雷下载,失败请重下,重下不扣分!
-
android 图片放大缩小,简洁 附完整源码
android 图片放大缩小,简洁 附完整源码
- 2013-05-23下载
- 积分:1
-
android nfc EasyTagWrite示例源码下载
android nfc EasyTagWrite示例源码下载
- 2014-03-20下载
- 积分:1
-
java 为图片添加水印 示例
为图片添加水印 【核心代码】 /*** 添加水印* @param imagePath 图片绝对路径* @param watermarkPath 水印图片绝对路径* @param position 水印图片位置* @return 生成水印图片的绝对路径*/public static String addWatermark(String imagePath, String watermarkPath, String position) {logger.info("为图片({})在位置{}添加水印({})", imagePath, position, watermarkPath);if (StringUtils.isNotBlank(imagePath) && StringUtils.isNotBlank(watermarkPath)) {File image = new File(imagePath);File watermark = new File(watermarkPath);Position pos = getPostion(position);if (image.isFile() && image.exists() && watermark.isFile()) {try {BufferedImage bi = ImageIO.read(image);Builder builder = Thumbnails.of(imagePath);BufferedImage watermarkImg = ImageIO.read(watermark);File newWatermark = null;// 原图的宽或高是水印图片宽或高的2倍及以上,则直接打上水印原图;否则缩略水印图片,以原图宽或高的二分之一if (bi.getWidth() / watermarkImg.getWidth()
- 2017-10-13下载
- 积分:1
-
客车网上售票系统分析与设计(源码+数据库)
本系统分为两部分(可用于毕业设计): 一、前台功能模块 A.用户注册(游客进行该网站需要进行注册方可在系统中进行一系列与预订有关的活动) B.票务查询(旅客按出发地、到达地查询各车次的车票情况) C.车票销售(选择需要的车票,填写购买信息,比如:身份证号等,进行提交) D.改签(用户对已付款的订单车票信息进行变更操作) E.退票(用户对已付款的订单车票信息进行退货操作) F.信息浏览(查看管理员发布的各种信息) G.留言板(用户登陆后可以在留言板中发表留言,未登陆的用户则只能浏览其它用户发表的留言) H.个人信息修改 二、后台系统管理部分 A.用户管理(管理系统用户信息,作增删改查操作) B.票务管理(列车票务信息的增删改查) D.信息发布(管理员发布公告类新闻和图片类新闻) F.留言中心管理 G.订单统计 H.销售情况查询 I.个人信息修改
- 2018-03-18下载
- 积分:1
-
android 图片高斯模糊 实例源码下载
android 图片高斯模糊 实例源码下载
- 2014-12-05下载
- 积分:1
-
android 调用webservice(json),在listview上显示数据
android 调用webservice(json),在listview上显示数据
- 2014-08-26下载
- 积分:1
-
android 仿微信浏览相册图片例子源码下载
[实例简介] 仿微信浏览相册图片, 相册浏览 [实例截图] [核心代码]import java.io.File;import java.io.FilenameFilter;import java.util.ArrayList;import java.util.Arrays;import java.util.HashSet;import java.util.List;import android.app.Activity;import android.app.ProgressDialog;import android.content.ContentResolver;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.os.Environment;import android.os.Handler;import android.provider.MediaStore;import android.util.DisplayMetrics;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup.LayoutParams;import android.view.WindowManager;import android.widget.GridView;import android.widget.PopupWindow.OnDismissListener;import android.widget.RelativeLayout;import android.widget.TextView;import android.widget.Toast;import com.zhy.bean.ImageFloder;import com.zhy.imageloader.ListImageDirPopupWindow.OnImageDirSelected;public class MainActivity extends Activity implements OnImageDirSelected{ private ProgressDialog mProgressDialog; /** * 存储文件夹中的图片数量 */ private int mPicsSize; /** * 图片数量最多的文件夹 */ private File mImgDir; /** * 所有的图片 */ private List mImgs; private GridView mGirdView; private MyAdapter mAdapter; /** * 临时的辅助类,用于防止同一个文件夹的多次扫描 */ private HashSet mDirPaths = new HashSet(); /** * 扫描拿到所有的图片文件夹 */ private List mImageFloders = new ArrayList(); private RelativeLayout mBottomLy; private TextView mChooseDir; private TextView mImageCount; int totalCount = 0; private int mScreenHeight; private ListImageDirPopupWindow mListImageDirPopupWindow; private Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { mProgressDialog.dismiss(); // 为View绑定数据 data2View(); // 初始化展示文件夹的popupWindw initListDirPopupWindw(); } }; /** * 为View绑定数据 */ private void data2View() { if (mImgDir == null) { Toast.makeText(getApplicationContext(), "擦,一张图片没扫描到", Toast.LENGTH_SHORT).show(); return; } mImgs = Arrays.asList(mImgDir.list()); /** * 可以看到文件夹的路径和图片的路径分开保存,极大的减少了内存的消耗; */ mAdapter = new MyAdapter(getApplicationContext(), mImgs, R.layout.grid_item, mImgDir.getAbsolutePath()); mGirdView.setAdapter(mAdapter); mImageCount.setText(totalCount "张"); }; /** * 初始化展示文件夹的popupWindw */ private void initListDirPopupWindw() { mListImageDirPopupWindow = new ListImageDirPopupWindow( LayoutParams.MATCH_PARENT, (int) (mScreenHeight * 0.7), mImageFloders, LayoutInflater.from(getApplicationContext()) .inflate(R.layout.list_dir, null)); mListImageDirPopupWindow.setOnDismissListener(new OnDismissListener() { @Override public void onDismiss() { // 设置背景颜色变暗 WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.alpha = 1.0f; getWindow().setAttributes(lp); } }); // 设置选择文件夹的回调 mListImageDirPopupWindow.setOnImageDirSelected(this); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); DisplayMetrics outMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(outMetrics); mScreenHeight = outMetrics.heightPixels; initView(); getImages(); initEvent(); } /** * 利用ContentProvider扫描手机中的图片,此方法在运行在子线程中 完成图片的扫描,最终获得jpg最多的那个文件夹 */ private void getImages() { if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { Toast.makeText(this, "暂无外部存储", Toast.LENGTH_SHORT).show(); return; } // 显示进度条 mProgressDialog = ProgressDialog.show(this, null, "正在加载..."); new Thread(new Runnable() { @Override public void run() { String firstImage = null; Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; ContentResolver mContentResolver = MainActivity.this .getContentResolver(); // 只查询jpeg和png的图片 Cursor mCursor = mContentResolver.query(mImageUri, null, MediaStore.Images.Media.MIME_TYPE "=? or " MediaStore.Images.Media.MIME_TYPE "=?", new String[] { "image/jpeg", "image/png" }, MediaStore.Images.Media.DATE_MODIFIED); Log.e("TAG", mCursor.getCount() ""); while (mCursor.moveToNext()) { // 获取图片的路径 String path = mCursor.getString(mCursor .getColumnIndex(MediaStore.Images.Media.DATA)); Log.e("TAG", path); // 拿到第一张图片的路径 if (firstImage == null) firstImage = path; // 获取该图片的父路径名 File parentFile = new File(path).getParentFile(); if (parentFile == null) continue; String dirPath = parentFile.getAbsolutePath(); ImageFloder imageFloder = null; // 利用一个HashSet防止多次扫描同一个文件夹(不加这个判断,图片多起来还是相当恐怖的~~) if (mDirPaths.contains(dirPath)) { continue; } else { mDirPaths.add(dirPath); // 初始化imageFloder imageFloder = new ImageFloder(); imageFloder.setDir(dirPath); imageFloder.setFirstImagePath(path); } int picSize = parentFile.list(new FilenameFilter() { @Override public boolean accept(File dir, String filename) { if (filename.endsWith(".jpg") || filename.endsWith(".png") || filename.endsWith(".jpeg")) return true; return false; } }).length; totalCount = picSize; imageFloder.setCount(picSize); mImageFloders.add(imageFloder); if (picSize > mPicsSize) { mPicsSize = picSize; mImgDir = parentFile; } } mCursor.close(); // 扫描完成,辅助的HashSet也就可以释放内存了 mDirPaths = null; // 通知Handler扫描图片完成 mHandler.sendEmptyMessage(0x110); } }).start(); } /** * 初始化View */ private void initView() { mGirdView = (GridView) findViewById(R.id.id_gridView); mChooseDir = (TextView) findViewById(R.id.id_choose_dir); mImageCount = (TextView) findViewById(R.id.id_total_count); mBottomLy = (RelativeLayout) findViewById(R.id.id_bottom_ly); } private void initEvent() { /** * 为底部的布局设置点击事件,弹出popupWindow */ mBottomLy.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mListImageDirPopupWindow .setAnimationStyle(R.style.anim_popup_dir); mListImageDirPopupWindow.showAsDropDown(mBottomLy, 0, 0); // 设置背景颜色变暗 WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.alpha = .3f; getWindow().setAttributes(lp); } }); } @Override public void selected(ImageFloder floder) { mImgDir = new File(floder.getDir()); mImgs = Arrays.asList(mImgDir.list(new FilenameFilter() { @Override public boolean accept(File dir, String filename) { if (filename.endsWith(".jpg") || filename.endsWith(".png") || filename.endsWith(".jpeg")) return true; return false; } })); /** * 可以看到文件夹的路径和图片的路径分开保存,极大的减少了内存的消耗; */ mAdapter = new MyAdapter(getApplicationContext(), mImgs, R.layout.grid_item, mImgDir.getAbsolutePath()); mGirdView.setAdapter(mAdapter); // mAdapter.notifyDataSetChanged(); mImageCount.setText(floder.getCount() "张"); mChooseDir.setText(floder.getName()); mListImageDirPopupWindow.dismiss(); }}
- 2015-04-08下载
- 积分:1
-
android 刮刮卡 例子源码下载
android 刮刮卡 例子源码下载
- 2014-12-01下载
- 积分:1
-
android 实现调用系统相机拍照,并且存到sd卡 实例 附完整源码
一个demo,实现调用系统相机拍照,将其显示在屏幕上,并且存到sd卡。 Android中实现拍照有两种方法,一种是调用系统自带的相机,然后使用其返回的照片数据。 还有一种是自己用Camera类和其他相关类实现相机功能,这种方法定制度比较高,洗染也比较复杂,一般平常的应用只需使用第一种即可。 用Intent启动相机的代码:Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);startActivityForResult(intent, 1); 拍完照后就可以在onActivityResult(int requestCode, int resultCode, Intent data)中获取到Bitmap对象了。Bitmap bitmap = (Bitmap) data.getExtras().get("data"); 要将图像存储到sd卡之前最好先检查一下sd卡是否可用 String sdStatus = Environment.getExternalStorageState(); if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用 Log.v("TestFile", "SD card is not avaiable/writeable right now."); return; } 以下代码可以实现将图像文件存到“sdcard/myImage/”文件夹下,名称为“111.jpg” File file = new File("/sdcard/myImage/"); file.mkdirs();// 创建文件夹 String fileName = "/sdcard/myImage/111.jpg"; try { b = new FileOutputStream(fileName); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件 } catch (FileNotFoundException e) { e.printStackTrace(); } finally { try { b.flush(); b.close(); } catch (IOException e) { e.printStackTrace(); } } 另外要注意的是读写sd卡文件必须首先要在Mainifest.xml文件中配置权限: 一个demo,实现调用系统相机拍照,将其显示在屏幕上,并且存到sd卡。
- 2013-06-13下载
- 积分:1
-
android gridview 实例
girdview 读取 数组中数据 至 gridvew显示
- 2013-03-16下载
- 积分:1