javaee

CDI(Weld)高级<2> Interceptors(拦截器)

╄→尐↘猪︶ㄣ 提交于 2020-05-04 02:45:15
1.拦截器综述 拦截器的功能是定义在Java拦截器规范。 拦截器规范定义了三种拦截点: 业务方法拦截, 生命周期回调侦听, 超时拦截(EJB)方法。 在容器的生命周期中进行拦截 public class DependencyInjectionInterceptor { @PostConstruct public void injectDependencies(InvocationContext ctx) { ... } } EJB超时时使用的拦截器 public class TimeoutInterceptor { @AroundTimeout public Object manageTransaction(InvocationContext ctx) throws Exception { ... } } 在业务上,对某一个Bean的方法进行拦截 public class TransactionInterceptor { @AroundInvoke public Object manageTransaction(InvocationContext ctx) throws Exception { ... } } @AroundInvoke注释指定了要用作拦截器的方法,拦截器方法与被拦截的业务方法执行同一个java调用堆栈、同一个事务和安全上下文中。用

JavaEE细节问题05——Cookie和Session

心不动则不痛 提交于 2020-03-02 09:05:36
Cookie和Session的作用: 都是用于存储一些关键数据。 Cookie和Session的存储位置: Cookie储存在客户端,Session储存在服务器 Cookie的产生和销毁以及原理: Cookie由服务器产生,通过HTTP协议发送给客户端。 在协议的响应头中的: Set-Cookie标注了这个cookie的信息 : 下次如果有cookie带给服务器时,将会在 在协议的请求头中的:Cookie标注了这个cookie的信息: /* * 正值表示 cookie 将在经过该值表示的秒数后过期。注意,该值是 cookie 过期的最大 生存时间, 不是 * cookie的当前生存时间。 负值意味着 cookie 不会被持久存储,将在 Web 浏览器退出时删除。0 值会导致删除cookie */ cookie.setMaxAge(Integer.MAX_VALUE); 删除Cookie注意 :由于在Http协议中请求发送Cookie的时候只是带有Cookie的名称和值, 但是一个Cookie的唯一标识是Cookie的名称+domain+path。 所以我们在 删除Cookie的时候为了能真正把原来的Cookie的MaxAge改成0的话,就必须要设置这个Cookie的domain和path, 设置的要与之前发送Cookie时一样。也就是说

Eclipse下maven项目Tomcat部署调试

被刻印的时光 ゝ 提交于 2020-03-01 04:13:46
我一直喜欢使用NetBeans编写Maven的项目,但是单位同事很多还是更愿意使用Eclipse,我总觉得Eclipse下Maven没NetBeans好用,但是人家喜欢呀,只好帮忙做这方面的部署,不然就没法推广Maven了。 还好现在最新的Eclipse 4.3已经内置了Maven插件,这让我的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目需要部署在Tomcat下面进行调试,这个仍然是无法避免的问题,经过半天折腾终于完成。 首先要在pom.xml中添加Tomcat插件,我使用的是官方插件(NetBeans直接可以部署调试根本不用配置这个,汗!)。 <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.1</version> </plugin> 这样就可以使用插件内置的Tomcat了,如果想要部署到独立的服务器上面则需要添加configuration 配置信息。 <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.1<

快速JavaEE轻量级框架&公用业务模块 设计&实现 7

隐身守侯 提交于 2020-02-28 12:01:44
这部分的代码在 http://git.oschina.net/terrymanu/miracle-framework/tree/master/miraclesea/framework-webmvc 这个部分写的比较晚了,本来是设计的时候应该写的,但是因为当时写这个项目的时候,还没想好需要往这个模块中放什么。 现在随着rbac模块的开发,渐渐的想到了一些可以提取出来的东西。 目前第一版,只支持rest api,以后会考虑支持freemarker。 1. 首先是一个流程。基本的CRUD都有一些标准流程。 如,增加一个实体的时候,首先要validate这个实体,其次通过业务方法从数据库中查询,判断这个实体是否打破了业务规则(如:唯一的用户名),如果失败,则返回相应的错误代码,如果成功。则返回正确的。 2. 基于这个流程,需要定义一个BaseResponse,用于封装Http状态码和业务对象。springmvc虽然提供了ResponseEntity,但是并没有可以放入error以及warn的地方。所以需要扩展一下。 所以现在新增加了两个包,com.miraclesea.webmvc.vo,用于存放 BaseResponse ;com.miraclesea.webmvc.controller用于存放模板逻辑。 其中核心的代码在AsyncBaseMangementController这个类中

分布式轻量级框架 设计&实现 2

对着背影说爱祢 提交于 2019-12-07 19:59:38
概述 使用maven管理项目的生命周期。用一个parent项目,聚合其他子模块。这样做的好处是在项目开发中物理的分离功能模块,保证每个子项目的独立性和内聚性。以后可以发布一个all-in-one的jar包,也可以发布成几个独立的jar包。比如发布成Repository.jar, Remote.jar等。 站点生成 cobertura, 统计代码覆盖率。 问题: cobertura如何跳过私有构造器和无用的getter,setter方法的测试覆盖率统计 ,望高人赐教。 findbugs,静态分析代码bug。 checkstyle, 统一 代码风格。 maven-jxr-plugin,生成源代码,便于查看。 taglist,查看还有多少todo的代码。 dashboard-maven-plugin,生成聚合报告。 希望大家多提建议指正。想近期有时间把项目搭建起来。 来源: oschina 链接: https://my.oschina.net/u/719192/blog/168755

Vert-x-通过异步的方式使用JDBC连接SQL

我的未来我决定 提交于 2019-12-06 21:09:37
欢迎关注 http://quanke.name/ 交流群: 231419585 转载请注明出处,谢谢 在这篇文章中,我们将会看到怎样在vert.x应用中使用 HSQL ,当然也可以使用任意JDBC,以及使用vertx-jdbc-client提供的异步的API,这篇文章的代码在 github 上。 异步? vert.x一个很重要的特点就是它的异步性。使用异步的API,不需要等结果返回,当有结果返回时,vert.x会主动通知。为了说明这个,我们来看一个简单的例子。 我们假设有个 add 方法。一般来说,会像 int r = add(1, 1) 这样来使用它。这是一个同步的API,所以你必须等到返回结果。异步的API会是这样: add(1, 1, r -> { /*do something with the result*/}) 。在这个版本中,你传入了一个Handler,当结果计算出来时才被调用。这个方法不返回任何东西,实现如下: public void add(int a, int b, Handler<Integer> resultHandler) { int r = a + b; resultHandler.handle(r); } 为了避免混淆概念,异步API并不是多线程。像我们在add例子里看到的,并没有涉及多线程。 异步JDBC 看了一些基本的异步的API,现在了解下

Hibernate的学习笔记(4)

前提是你 提交于 2019-12-06 20:20:54
通过前段时间的学习,hibernate的映射关系尤为重要,需要理解的也有挺多的。 1 、一对一映射 1 )主键关联。一对一默认使用的是立即加载,如果需要时用延迟加载,那么需要在 one-to-one 元素中将 constrained 属性设为 true ,并且将待加载的一方的 class 元素中的 lazy 属性设为 true (或者不去设置,因为该属性默认值就是 true )。一对一加载默认使用左外连接,可以通过修改 fetch 属性为 select 修改成每次发送一条 select 语句的形式。 2 )外键关联。本质上一对多的蜕变形式。在 many-to-one 元素中增加 unique=”true” 属性就变成了一对一。 3 、 map 与 set 标签中的 element 子标签映射的是原子类型( string , date,int,long…. ),即能够直接映射到数据库表字段上的类型,而 one-to-many 映射的则是实体类型,指的是无法映射到表的字段,而是要映射到整张表的类型。 4 、 Bag (结合了 List 与 Set ),可以重复且没有顺序的一种集合,是 Hibernate 提供的。 5 、查询排序(内存排序及数据库排序) 6 、数据库排序使用 order-by 属性。 7 、内存排序使用 sort 属性,它有两个属性值( unsorted ,

Vert.x 实现REST

僤鯓⒐⒋嵵緔 提交于 2019-12-06 06:07:40
欢迎关注 http://quanke.name/ 交流群: 231419585 转载请注明出处,谢谢 回顾 在第一篇文章中开发了一个非常简单的Vert.x 3应用程序,还包括怎么测试、打包和执行。在第二篇文章中对端口进行了可变配置。 这篇文章中,开发一个CRUD(增删改查)应用,发布一个HTML页面,通过REST API与后台进行交互。RESTfull形式的API不简单,这篇文章中就不涉及了。 接下来,能看到: Vert.x Web - 使用Vert.x创建Web应用的框架 怎么发布静态资源 怎么开发REST API 这篇文章开发的代码放在 GitHub 上,是从第二篇文章的代码基础上进行的。 开始Vert.x Web 如果你看了 前面的文章 ,使用Vert.x Core来处理复杂的HTTP应用还是很麻烦的,所以就有了 Vert.x Web ,它可以使Vert.x开发一个web应用更加简单,而且不会改变Vert.x的思想。 更新pom.xml文件,添加下面的依赖: <dependency> <groupId>io.vertx</groupId> <artifactId>vertx-web</artifactId> <version>3.0.0</version> </dependency> 这就是使用Vert.x Web的唯一前提。 还记得在上一篇文章中,当请求 http:/

使用Eclipse-Maven-git做Java开发(5)--Eclipse的Java项目的创建过程

倖福魔咒の 提交于 2019-12-05 19:46:42
前面已经把所需要的基础设施准备好了,eclipse这个最关键的工具也进行了介绍,接下来就应该进行如何使用工具进行代码编写的介绍了。 上一篇博客发表也已经有较长的一段时间了,这段时间里面在公司的工作机操作系统切换到了Fedora 22,不得不说eclipse在上面的界面有点丑,但是用上大体还是和在windows上是一样的,算了,扯远啦…… 下面就来说一下使用eclipse创建SE和EE项目的流程,不涉及到maven和git,仅仅是熟悉eclipse的使用。 先说SE后说EE,创建的工程后面的博客还会使用到,用完了别慌着删除。 0、前提 我们假设已经按照前面的文章设置了环境什么的,对eclipse的视图什么的也有了一些了解,总之就是已经看过前面的文章了。 1、进入创建工程的选择窗口 使用eclipse的创建工程向导来创建工程,首先需要进入工程类型的选择窗口,这是创建所有类型的工程的必经步骤。 在Project视图,右键->"New"->"Project",打开选择新建工程类型的选择窗口,开始创建新工程的第一步。 2、创建Java SE工程 在弹出来的选择窗口中,下面有一个树形菜单,展开"Java",找到里面的“Java Project”,然后点击“Next”。 然后就正式进入创建Java SE项目的向导啦,有很多像配置可以选择或者修改,我们都直接使用默认的,只有项目的名字需要我们指定

Struts2学习整理

…衆ロ難τιáo~ 提交于 2019-12-04 00:31:42
Struts2的相关配置文件 * default.properties -- 在org/apache/struts2/目录下,代表的是配置的是Struts2的常量的值 * struts-default.xml -- 在Struts2的核心包下,代表的是Struts2核心功能的配置(Bean、拦截器、结果类型等) * struts-plugin.xml -- 配置插件的信息 * struts.xml -- 重点中的重点配置,代表WEB应用的默认配置,可以配置常量,基本就配置它就可以 * struts.properties -- 该文件是Struts的默认配置文件 (可以配置常量 ) * web.xml -- 配置前端控制器(可以配置常量) 注意:后加载的配置文件会覆盖掉之前加载的配置文件(在这些配置文件中可以配置常量) Struts2核心配置文件Struts2.xml的配置入门 <package>标签 如果要配置<Action>的标签,那么必须要先配置<package>标签,代表的包的概念。 包含的属性 name 包的名称,要求是唯一的,管理action配置。 extends 继承,可以继承其他的包,只要继承了,那么该包就包含了其他包的功能,一般都是继承struts-default namespace 名称空间,一般与<action>标签中的name属性共同决定访问路径