nutz servlet添加 并 获取service

本文深入探讨了微信开发中的关键组件,包括servlet配置、请求处理和消息解析流程。详细介绍了如何通过签名验证、消息类型判断及相应事件处理来实现高效的消息交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

web.xml

 <servlet>
  	<servlet-name>weichatServlet</servlet-name>
  	<servlet-class>cn.hy.weixin.controller.WeichatServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>weichatServlet</servlet-name> 
  	<url-pattern>/weichat.do</url-pattern>
  </servlet-mapping>

 

 

servlet

package cn.hy.weixin.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.mvc.Mvcs;

import cn.hy.activity.data.Activity;
import cn.hy.activity.service.ActivityService;
import cn.hy.weixin.entity.AccessToken;
import cn.hy.weixin.util.AccessTokenUtil;
import cn.hy.weixin.util.CheckUtil;
import cn.hy.weixin.util.MessageUtil;
import net.sf.json.JSONObject;

 
public class WeichatServlet extends HttpServlet{

	 
	private static final long serialVersionUID = 3264201758083219979L;
 
		public 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");
			System.out.println("signature="+signature);
			System.out.println("timestamp="+timestamp);
			System.out.println("nonce"+nonce);
			
			PrintWriter out = response.getWriter();
			if(CheckUtil.checkSignature(signature, timestamp, nonce)){
				out.print(echostr);
			}
		} 
		
	   
		public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException{
			request.setCharacterEncoding("UTF-8");
			response.setCharacterEncoding("UTF-8");
			PrintWriter out = response.getWriter();
			try {
				
				Map<String,String> map = MessageUtil.xmlToMap(request);
				String toUserName = map.get("ToUserName");
				String fromUserName = map.get("FromUserName");
				String msgType = map.get("MsgType");
				String content = map.get("Content");
				for(String str : map.keySet()) {
					System.out.println("key..." + str + "  " + map.get(str));
				}
				String message = null;
				if(MessageUtil.MESSAGE_EVENT.equals(msgType)){
					String eventType = map.get("Event");
					System.out.println("msgType" +msgType);
					System.out.println("scene_id = " + map.get("EventKey"));//获取二维码自定义参数
					if(MessageUtil.MESSAGE_EVENT_SUBSCRIBE.equals(eventType)){//关注事件
						//创建自定义菜单
						AccessToken token = AccessTokenUtil.getAccessToken();
						String menu = JSONObject.fromObject(MessageUtil.initMenu()).toString();
						int result = MessageUtil.createMenu(token.getToken(), menu);
					    System.out.println("-------------------------------------");
						  System.out.println(token.getToken());
						  System.out.println(menu +"\r\n"+menu.getBytes().length);
						  System.out.println("--crate menu--"+result +"--------------");
						  System.out.println("-------------------------------------");	
						int activityId =0;
					   String sceneId = map.get("EventKey");
					  if(sceneId != null && sceneId !=""){
						try{
						 activityId =Integer.parseInt(sceneId.split("_")[1]);
						}catch(Exception e){
							activityId =0;
						}
					  }
					if(activityId == 0 ){
							message = MessageUtil.initText(toUserName, fromUserName, MessageUtil.initMenuMsaage());
						}else{
							ActivityService activityService = (ActivityService) Mvcs.ctx().getDefaultIoc().get(ActivityService.class);
						   System.out.println("activityService"+activityService);
							Activity activity = activityService.getActivityDetail(activityId);
							StringBuffer sb =new StringBuffer();
							sb.append("名称:  "+ activity.getName()+"\n\n");
							sb.append("活动代码:  "+ activity.getCode()+"\n\n");
							message = MessageUtil.initText(toUserName, fromUserName, MessageUtil.initMenuMsaage(sb));
						}
					}
					 if(MessageUtil.MESSAGE_EVENT_UNSUBSCRIBE.equals(eventType)){//取消关注
						//todo
					}
					 if(MessageUtil.MESSAGE_EVENT_VIEW.equals(eventType)) {
						System.out.println("here...." + eventType);
						
					}
				} else if(MessageUtil.MESSAGE_TEXT.equals(msgType)){
					if(content.equals("1")){
						System.out.println("toUserName------------------------" +toUserName);
						message = MessageUtil.initText(toUserName, fromUserName, MessageUtil.fristKey());
						System.out.println("message------------------------" +message);
					}else if(content.equals("2")){
						System.out.println("toUserName------------------------" +toUserName);
						message = MessageUtil.initText(toUserName, fromUserName, MessageUtil.secKey());
						
					}else if(content.equals("3")){
						System.out.println("toUserName------------------------" +toUserName);
						message = MessageUtil.initNews(toUserName, fromUserName);
					}else if(content.equals("?") || content.equals("?")){
						message = MessageUtil.initText(toUserName, fromUserName, MessageUtil.initMenuMsaage());
					}
				}
				out.print(message);
				
			} catch (Exception e) {
				e.printStackTrace();
			}finally{
				out.close();
			}
			
		}
	
}

 

service 获取

ActivityService activityService = (ActivityService) Mvcs.ctx().getDefaultIoc().get(ActivityService.class);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

捐助开发者 

在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(支持支付宝和微信 以及扣扣群),没钱捧个人场,谢谢各位。

 

个人主页http://knight-black-bob.iteye.com/



 
 
 谢谢您的赞助,我会做的更好!

<think>嗯,用户问的是如何在Nutz框架中查询获取String类型的数据。首先,我需要回忆一下Nutz框架的基本用法,尤其是数据库操作部分。Nutz主要提供了Dao接口来进行数据库操作,比如查询、插入、更新等。 用户的问题可能涉及到如何执行一个SQL查询,将结果中的某个字段转换为String类型。可能的情况有两种:一种是查询单个字段的值,比如某个用户的姓名;另一种是查询整个实体对象,但只想获取其中的String类型字段。 首先,我需要考虑使用Nutz的查询方法,比如使用dao.fetch方法或者dao.query方法。如果是获取单个字段,可能需要使用Sqls类来创建查询语句,然后通过fetchString或类似的方法来获取结果。例如,使用Sqls.fetchString来直接获取字符串类型的值。 另外,用户可能对Nutz不太熟悉,所以需要详细说明步骤。比如,首先创建SQL语句,然后执行查询,最后处理结果。同时,可能需要提醒异常处理,比如当结果为空或者字段不存在时的处理方式。 还有一种情况是,用户可能查询的是一个实体对象,然后从中提取String类型的字段。这时候需要先获取实体对象,再通过getter方法获取具体的字段值。例如,User对象的name字段是String类型,通过user.getName()来获取。 还需要考虑是否需要处理结果集为null的情况,避免空指针异常。比如,在使用fetchString时,如果查询结果为空,可能返回null,这时候用户可能需要做空值处理。 此外,可能还需要提到使用NutMap来处理结果,或者使用回调函数来处理结果集,但这种情况可能比较复杂,用户可能只需要基本的查询方法。 总结一下,回答应该包括两种情况:直接查询单个String字段和查询实体对象后获取String字段。同时,需要给出示例代码,说明如何编写SQL语句,执行查询,处理结果。还要提醒可能的异常情况和注意事项,比如结果为空的情况。</think>在 Nutz 框架中,查询获取 `String` 类型的数据通常可以通过以下两种方式实现,具体取决于你的查询场景: --- ### 1. **查询单个字段(String 类型)** 如果只需要获取表中的某个字段(如 `name` 字段),可以通过 `Sqls` 类直接映射结果到 `String`。 #### 示例代码: ```java // 创建 SQL 语句 String sql = Sqls.create("SELECT name FROM user WHERE id = @id"); sql.params().set("id", 1); // 执行查询获取 String 类型结果 String name = dao.execute(sql).getString(); ``` --- ### 2. **查询实体对象后提取 String** 如果查询的是一个完整的实体对象,可以通过 `fetch` 或 `query` 方法获取对象,再从中提取 `String` 字段。 #### 示例代码: ```java // 查询单个用户对象 User user = dao.fetch(User.class, Cnd.where("id", "=", 1)); // 获取 String 类型字段(假设 User 类有 name 属性) String name = user.getName(); ``` --- ### 3. **多行结果的 String 字段** 如果查询多行数据,可以使用 `Sqls.queryEntity` 或 `query` 方法,遍历结果集提取 `String`。 #### 示例代码: ```java List<String> names = new ArrayList<>(); List<Record> records = dao.query("user", Cnd.where("age", ">", 20)); for (Record record : records) { names.add(record.getString("name")); } ``` --- ### 注意事项: - **空值处理**:结果可能为 `null`,建议使用 `Optional` 或判空逻辑。 - **SQL 注入**:建议用 `@条件参数` 或 `Cnd` 类构建条件,避免拼接字符串。 如果需要更具体的帮助,可以提供你的查询场景和表结构!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值