ideashow开发记事

第一步
1.需求分析---讨论沟通,分析了解ideashow使用客户的想法及及需求,相关设计理念风格等
2.根据了解的情况进行平面设计和相关数据库设计,详细每个页面的主功能,
3.在平面设计的基础上进行网页html写入,写出对应的静态页面
第二步
分析项目
考虑用spring+hibernate+struts框架+mysql数据库操作
1.整合ssh
SSH的整合分为两步:
1)将 Hibernate 整合到 Spring 中.
将SessionFactory作为Bean配置在Spring容器中.spring容器要求项目启动就初始化,通过使用 ServletContextListener 接口,监听application作用域(项目本身)的初始化事件,以Eager的方式第一时间实例化容器;将容器存入 application作用域,供其他组件使用,默认实现单例模式我采用在web.xml中初始化spring容器.
spring applicationContext.xml的配置: 
dataSource数据源
sessionFactory
事务管理器TM
声明式事务是如何进行的tx:advice
aop配置
2)将 Struts2 和 Spring 整合。
Struts2管理Action类, Spring管理业务组件,业务组件依赖注入到Action类。


2.微信端
确定了整体使用框架后.分析ideashow用户是从微信接口过来的,然后去了解微信接口:
用户通过服务号的自定义菜单中子菜单click,view事件访问网站.通过阅读微信api,了解需要获取用户涉及到oauth2网络协议,绑定服务号实现相关接口对接.


开始开发
1.理清相关数据库表结构,对应关系,表关联确定user,idea两张表为主表
建对应实体类,通过注解配置hibernate映射关系
2.结合mvc思想,分层处理,逻辑,视图,DB访问,业务,附日志,相关工具类,配置文件,jar包,还有单元测试.


细节:
(使用ssh框架时最好每次访问jsp视图时先访问action资源,通过struts.xml访问jsp,可以先行对页面数据进行预处理)
1.数据删除不是物理删除,一般是通过ajax处理,在逻辑层设置某一字段为某值,在查询是排除这一字段的值范围
2.一般页面都是预加载,减轻服务器压力,当有用户操作时再根据情况处理,比如加载列表时一般是显示满页面下拉加载更多
3.下拉加载时采用append拼接时应注意:因为是后加载的不是页面加载完毕后有的对象,所以jquery对象取不到,判断也应该用js写.
4.文本框验证:非空,去空格非空,换行,关键字,html网页标签.. disabled避免用户多次提交
5.一般共有的逻辑会抽出共同函数,封装写方法,通过调用利于后期维护和代码整洁
6.一般常量封装到一个类中,通过调用可以方便使用,便于以后修改。
7.微信公众平台开发中access_token的有效期是7200秒(两小时),需要保证不过期,ideashow中采用的是启动一个线程,在线程的run()方法中写一个死循环,然后使用Thread.sleep()来保证线程到7000s时刷新执行某项任务
8.json中含有双引号分号回车换行等不能正常解析
9.用户点赞后台需要进行判断是否已点过。同时对相关的积分做处理
10做分享接口时出现的问题:
1)由于jsapi_ticket的有效期是7200秒(两小时),在有效期内,可以一直使用,只有当jsapi_ticket过期时,才需要再次调用接口获取jsapi_ticket,本项目是保存到内存中。 
2)只做了分享到朋友圈,用户点分享到朋友报错,考虑不周全,没有作为用户去体验
3)分享出去的应该是动态的,实时的,更能吸引人。
11.文件上传
1)上传文件应该放在web-inf-目录上
2)防止文件覆盖,产生唯一文件名
3)为防止一个目录下太多文件,使用hash算法打散
4)限制文件上传大小的最大值
5)限制文件上传类型,判断后缀是否合法
11.微信获取用户昵称中含有表情符号会出现乱码,报错
数据在 Mysql 5.5 之前,UTF-8 支持1-3个字节的编码,从 Mysql5.5 开始后,可以支持4个字节的 UTF 编码,但要特殊标记。修改 Mysql 相应存储字段为 utf8mb4 。修改语句如下: 
ALTER TABLE table_name
MODIFY COLUMN content varchar(500) CHARACTER
SET utf8mb4 COLLATE utf8mb4_unicode_ci
DEFAULT NULL COMMENT 'content of message';
12.alert(location.href.split('#')[0])显示页面完整url
13. MySQL数据库连接超时(wait_timeout)问题的处理
错误原因:org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.JDBCConnectionException
由于MySQL服务在长时间不连接之后断开了,断开之后的首次请求会抛出这个异常,打开MySQL的控制台,运行:show variables like ‘%timeout%’,查看和连接时间有关的MySQL系统变量,
MySQL的系统变量由配置文件控制,当配置文件中不配置时,系统使用默认值,这个28800就是wait_timeout的默认值
14.在一般系统中药对session的有效期进行处理,默认是180分钟。session的过期时间计算是从当前session的最后一次请求开始
session失效后需要用到监听器,即当session因为各种原因失效后,监听器就可以监听到,然后执行监听器中定义好的程序,就可以了。 
监听器类为:HttpSessionListener类,有sessionCreated和sessionDestroyed两个方法 


微信公众平台开发记事   
接入测试
(get请求接入) 
发送消息                               转发(参数signature、timestamp、nonce、echostr)           (将token + timestamp + nonce 按字典序排序,拼接成字符串进行SHA-1加密)
微信客户端------------------------------------->微信服务器---------------------------------------------------------------->公网服务器(servlet)
  微信加密签名、时间戳、随机数、随机字符串              (url)
                                                                             返回加密后新字符串  (与signature 比较,相同返回 echostr)                                                
                                                微信服务器    <--------------------------------------------------------------  
                                    (返回的echostr 与发过去的echostr比较  
     相同表示接入成功,不同就失败)  
点击开发者中心,首先启用服务器配置。填写url和token(和java代码中的一样)、EncodingAESKey是随机生成,消息加解密方式选择明文模式。
这里的url就是在服务器中中创建应用的地址,我们已经将写好的java代码上传到这个地址。token是微信服务器和自身服务器进行对接验证是用到的(必须保持一致),消息
加密暂时选择明文模式,如果选择加密模式需要编写加密代码,以后会再转到加密或兼容模式,这里先用明文模式(服务器要打开),
如果现实成功就说明接入完成。
微信服务器与我们的服务器之间是通过xml传递数据的,需要实现消息实体与xml之间的互换 
当用户发消息给公众账号时,微信公众平台服务器会使用http请求对接入的网址进行消息推送,第三方服务器可通过响应包回复特定结构,从而达到回复消息的目的。 
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  
微信消息运行流程:
通过dom4j.jar解析xml,将名称和值封装到map集合中,从集合中获取消息参数,封装到响应消息中---------根据消息类型判断,对不同的消息请求回复不同的内容------将响应消息对象转XML返回给微信服务器
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
图文消息使用总结
1)一定要给图文消息的Url属性赋值。不管是单图文,还是多图文,或者是不含图片的图文,都有可能会被用户点击。如果Url为空,用户点击后将会打开一个空白页面,这给用户的体验是非常差的;

2)只有单图文的描述才会显示,多图文的描述不会被显示;

3)图文消息的标题、描述中可以使用QQ表情和符号表情。合理地运用表情符号,会使得消息更加生动;

4)图文消息的标题、描述中可以使用换行符。合理地使用换行符,会使得内容结构更加清晰;

5)图文消息的标题、描述中不支持超文本链接(html的<a>标签)。不只是技术上实现不了,就连逻辑上也说不通,因为一条图文消息的任何位置被点击,都将调用微信内置的浏览器打开Url,如果标题、描述里再放几个超链接,不知道点击该打开哪个页面。

6)图文消息的链接、图片链接可以使用外部域名下的资源,如本例中:柳峰的头像、博文的链接,都是指向CSDN网站的资源。

7)使用指定大小的图片。第一条图文的图片大小建议为640*320,其他图文的图片大小建议为80*80。如果使用的图片太大,加载慢,而且耗流量;如果使用的图片太小,显示后会被拉伸,失真了很难看。

8)每条图文消息的图文建议控制在1-4条。这样在绝大多数终端上一屏能够显示完,用户扫一眼就能大概了解消息的主要内容,这样最有可能促使用户去点击并阅读。
自定义菜单的创建步骤
1、找到AppId和AppSecret。自定义菜单申请成功后,在“高级功能”-“开发模式”-“接口配置信息”的最后两项就是; 
2、根据AppId和AppSecret,以https get方式获取访问特殊接口所必须的凭证access_token;    
3、根据access_token,将json格式的菜单数据通过https post方式提交。   封装一个通用的请求方法httpRequest(url,method,data)
1)自定义菜单是一个3x5结构的,即菜单最多只能有二级,一级菜单最多只能有3个,每个一级菜单下最多可以有5个二级菜单项;
2)菜单项都有一个key值。当用户点击某个菜单项时,微信会将该菜单项的key值以事件推送的方式发送给我们的后台处理程序。 

事件推送:
目前只开启自定义菜单接口事件推送
当MegType = event 就表示这是一条事件推送消息;而Event表示事件类型包括订阅(subscribe)、取消订阅(unsubscribe)和自定义菜单点击事件(CLICK) 、(VIEW)访问网页  
网页授权流程:
1、引导用户进入授权页面同意授权,获取code
2、通过code换取网页授权access_token(与基础支持中的access_token不同)
3、如果需要,开发者可以刷新网页授权access_token,避免过期
4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)

 "|<[^>]+>(.*)</[^>]+>|U"  此正则用于将一对对 html 标签挑出来  <[^>]+> 匹配标签开始  </[^>]+> 匹配标签结束 最后面的 |U 表示只匹配最近的一个字符串;不重复匹配; 
a.*?b 惰性匹配  a.*b 贪婪匹配  
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值