zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Java Web技术经验总结(四)

JAVA技术Web 经验总结
2023-09-14 09:03:12 时间
Spring 3 MVC ContentNegotiatingViewResolver example,该视图解析器,可以用于将同一份模型数据展现为不同的表现形式,例如JSON、XML和RSS等; 利用@ResponseBody注解修饰控制器方法,并在xxx-servlet.xml中开启spring mvc支持—— mvc: annoation-driven/ ,这种机制背后的原理是MessageConverter。

最近用Mockito写单元测试的感受,单元测试有两点好处:(1)利于解耦代码,降低代码的耦合性,在写单测的过程中,你会不自觉将不属于当前业务逻辑的代码分割出去;(2)单元测试是修改代码的有力保障,使得我们在修改代码之后能及时测试本次修改是否正确。总之:单元测试并不只是为了验证你当前所写的代码是否存在问题,更为重要的是它可以很大程度的保障日后因业务变更、修复Bug或重构等引起的代码变更而导致(或新增)的风险。


Comman + Y,删除一行 alt + Enter:当光标在类名时,使用该快捷键可以创建测试用例、创建子类和使得该类局部化;当光标在局部变量上时,使用该快捷键可以添加Javadoc、转变成ThreadLocal变量、转变成Atomic变量、改变变量的开放级别;当光标在函数上时,也有对应的功能,可自己去探索; alt + Command + u:将光标放在某个类上,通过该快捷键可以构造出该类所属的继承体系,如下图所示:
1240
ViewResolver的继承体系
Refactor功能,具体可参考《重构》一书;我之前也有一篇读书笔记:《重构》阅读笔记-代码的坏味道 Git版本管理 查看commit记录 查看每个commit的修改记录 查看指定文件的修改历史 比较不同版本直接的diff 提交代码(提交之前可做静态扫描、优化import、查看todo等) 分支合并,区分rebase和merge的区别
远程调试功能 :在Edit Configuration中可新建Remote,指定远程服务器的IP地址和端口,即可远程调试
日志级别调成warn级别; 发现CPU占用过高时,利用jstack查看进程栈,看看什么动作比较耗CPU;具体可参考关于JVM CPU资源占用过高的问题排查。我最近遇到一个case,是RSA解密消耗了大量的CPU时间,那么我们在开发时,要注意尽量减少RSA解密的次数。

MyBatis报错:“Error querying database. Cause: java.lang.UnsupportedOperationException”,错误代码如下:

 select id="getInPaging" resultType="java.util.List" 

 ![CDATA[

 SELECT

 number

 FROM

 example_table

 WHERE

 id=#{id}

 /select 

在这里,resultType指的是查询到的每条记录的类型,因此应该用java.lang.String。


在ArrayList Object 中去掉重复的对象(按照自定义的重复定义规则),如:原创]JAVA技巧:去除ArrayList Object 里面的重复记录


在通过URL参数传入时间时,后台可考虑使用InitBinder自动将时间字符串转换成Date对象,并绑定到Controller的入参,例子代码如下:

//the parameter was converted in initBinder

@RequestMapping("/date")

public String date(Date date){

System.out.println(date); return "hello";

//At the time of initialization,convert the type "String" to type "date" @InitBinder

public void initBinder(ServletRequestDataBinder binder){

binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));

}

关于Spring MVC中 mvc:annotation-driven 、@ResponseBody、HttpMessagerConverter等的实现原理,SpringMVC关于json、xml自动转换的原理研究[附带源码分析]这篇文章,以及对应的代码分析,基本上都讲清楚了。PS:MappingJackson2HttpMessageConverter和MappingJacksonHttpMessageConverter的区别在于,Spring 4版本都用前一个。


常用Git作为代码管理工具,除了熟练使用IDEA中提供的图形化Git管理功能,也需要了解这些GUI背后对应的指令,那么久需要看如下资料:

猴子都能懂的Git入门 Pro Git(V2)

Spring MVC基础知识总结:史上最全的SpringMVC学习笔记。在第十七节,作者只是提出了要建两个容器配置文件(applicationContext.xml和xxx-servlet.xml),并通过exclude和include配置防止bean的重复加载,不过没有深入讲解其背后的原因。
Spring 容器(Spring 的上下文)这篇文章给出了详细解释:在Spring MVC项目中,这两个父子容器的角色不同:(1)父容器中保存数据源、服务层、DAO层、事务的Bean;(2)子容器中保存Mvc相关的Action的Bean。对应到例子中,applicationContext.xml定义父容器,xxx-servlet.xml定义子容器。
引用官方文档中的一张图片,可以清晰地看出dispatcherservlet上下文和Root应用上下文之间的关系:Root应用上下文用于提供service、数据库等bean,可供多个dispatcherservlet上下文使用。


1240
mvc-context-hierarchy.png

最后,再重温下spring mvc的处理流程,在进行Java Web开发的时候,也时刻不要忘记对HttpRequest的处理流程。

1240
Spring MVC详细运行流程图.png
Java Web实战 | MVC案例:用户登录验证 本文结合图1的多层设计架构,以用户登录验证应用程序为例,说明如何将MVC模式应用于Web应用程序的开发,具体步骤如下所述。
Java Web实战 | 设计一个监听器 在Web应用程序设计中,经常需要对某些事件进行监听,以便及时做出处理。对于桌面应用程序而言,鼠标单击或双击、键盘上的键被按下等都是事件。类似地,对于Web应用程序来说,session对象的创建、请求域中某个属性的移除等都是事件。为此,Servlet规范提供了监听器(Listener),专门用于监听Servlet事件。监听器技术涉及几个重要的概念,分别如下。
一文读懂Java Web是什么? Java Web应用开发是基于Jakarta EE技术平台的。Jakarta EE是企业级应用的解决方案。Jakarta EE框架提供的Web开发技术主要支持两类软件的开发:一类是Web应用服务器(Web Application Server);另一类是在Web应用服务器上运行的Web应用程序(Web Application)。本系列推文介绍的Java Web应用开发就是第二类,即在Web应用服务器上运行的Web应用程序的开发。 Java Web是使用Java技术解决Web相关领域开发问题的技术栈。开发一个完整的Java Web项目涉及静态Web资源、动态Web资源以及项目的部署。
Java web 开发涉及多线程和锁定的应用场景有哪些?(邮件发送和接收示例) Java web 开发中,有一些场景需要用到多线程和锁定,以提高性能、保证数据一致性或实现特定的功能,多线程和锁定提升网站性能、保障数据安全或实现复杂功能的重要技术手段。
Java Web之Filter过滤器原理简介与功能演示 Filter被称作过滤器,其基本功能就是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet 进行响应处理前后实现一些特殊功能。