J2EE
文章平均质量分 65
司青-已停止更新
本博客已停更;
展开
-
Spring Boot: HttpMediaTypeNotAcceptableException: Could not find acceptable representation原因及解决方法
错误场景使用Spring Boot的Web项目,在其 resources/static/目录下存在login.html静态文件,同时还有一个处理/login请求的控制器方法(该方法会返回JSON格式的数据)。此时如果访问localhost:8080/login.html,用户期望返回login.html页面,但框架却报错:org.springframework.web.HttpMediaTypeNo原创 2016-06-01 18:05:13 · 63929 阅读 · 2 评论 -
Spring MVC不要在@Service bean中保存状态
先看这么一段代码:原创 2014-11-11 21:33:38 · 2040 阅读 · 0 评论 -
基于JMS消息中间件的分布式系统初探究(二) - 服务端反射调用组件方法
在上一篇文章中,我们解决了子系统之间的通讯问题,并跑起来了一个模型项目。这里我们要详细实现服务端程序。我们在服务端运行Spring,利用Spring的IoC容器来管理所有的Service组件,然后根据接收到的JMS消息通过反射动态调用Service方法。首先要先设计一下协议:public class MessageProtocol implements Serializable { /**原创 2015-03-25 02:46:02 · 2109 阅读 · 0 评论 -
对EntityManager进行封装以简化JPA操作
如果你用过 Seam,那就一定知道 Seam 又对JPA进行了封装,使得我们只需要让实体bean继承 Home类而不需要编写任何代码就能实现CRUD操作。例如我们想持久化Customer实体bean,则只需要编写如下代码:public class CustomerHome extends Home {}就可以直接注入 CustomerHome 对象,然后调用customer.set原创 2014-09-15 23:31:42 · 4173 阅读 · 0 评论 -
「Java Web」主页静态化的实现
一个网站的主页一般不会频繁变动,而大多数用户在访问网站时仅仅是浏览一下主页(未登陆),然后就离开了。对于这类访问请求,如果每次都要通过查询数据库来显示主页的话,显然会给服务器带来多余的压力。这时候我们可以将主页静态化,在减轻数据库服务器压力的同时又能大大提高主页高访问速度。对于Java来说,现在有很多框架可是实现主页的静态化。其实这并不难,我们也可以自己手动实现。思路如下:首先编写原创 2014-07-14 23:27:00 · 4861 阅读 · 1 评论 -
Spring-MVC4 + JPA2 + MySql-5.5 + SLF4J + JBoss WildFly-8.1开发环境搭建
由于面试被问到了Spring4,所以打算把过去Spring3的项目全部升级为Spring4。现将环境搭建过程记录在此。首先使用Maven Archetype创建项目骨架,执行以下命令:mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-ar原创 2014-07-12 15:36:06 · 4941 阅读 · 2 评论 -
Linux下Tomcat死活找不到JSP页面中import指定类的解决方法
如果你没有使用任何的IDE,只是用自己喜欢的文本编辑器写代码,并手动部署到webapps/下的话,经常会遇到 "类 cannot be reloved to a type" 的错误。解决方法:1. 检查你的.class文件有没有放到/WEB-INF/classes/目录下,如果没有,则创建需要的目录并放进去。2. 如果.class文件的位置都放对了,包的问题也处理好了,但还是找不到原创 2013-04-22 11:08:57 · 3753 阅读 · 1 评论 -
GlassFish下手动部署JSF程序
以login项目为例:目录结构:login | |---index.jsp |---page.jsp |---WEB-INF/ |---web.xml |---faces-config.xml |---classes/web.xml : Web容器配置文件原创 2013-05-02 23:04:50 · 1662 阅读 · 0 评论 -
ejb3.0 中数据库的配置
persistence.xml中的数据为:<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persist转载 2013-05-18 21:02:43 · 1200 阅读 · 0 评论 -
Ubuntu下 Tomcat + JSF + Ant + eclipse 开发环境搭建
JDK的安装就不用说了,这是必须的。。1. 去http://tomcat.apache.org/tomcat-7.0-doc/index.html下载Tomcat应用服务器,我用的版本是7.02. 从网上下载jsf-impl.jar 和 jsf-api.jar 这2个JSF实现jar包,放到tomcat_home/lib/ 目录下3. 去http://ant.apache.or原创 2013-06-03 01:34:51 · 1855 阅读 · 0 评论 -
Hibernate + MySQL中文乱码问题
如果持久化的类中有包括了汉字的String对象,那么对应到数据库中汉字的部分就会是乱码。这主要是由于MySQL数据表的字符集与我们当前使用的本地字符集不相同造成的。如果是windows系统,那么系统默认的本地字符集是gb2312,为了让数据表也使用gb2312字符集,我们要这样编写创建数据表的SQL语句:CREATE TABLE TEST{ ... ... ...}d原创 2013-07-01 11:13:31 · 1347 阅读 · 0 评论 -
SpringMVC: web.xml中声明DispatcherServlet时一定要添加load-on-startup标签
游历SpringMVC源码后发现,在web.xml中注册的ContextLoaderListener监听器只是初始化了一个根上下文,仅仅完成了组件扫描和与容器初始化相关的一些工作,并没有探测到具体每个URL应当map到哪个Controller, 哪个方法上。而剩一下的这些复杂工作都是由DispatcherServet来完成的,即应用服务器加载DispatcherServlet调用init()方法时才原创 2015-03-12 20:58:38 · 3564 阅读 · 1 评论 -
Spring MVC的单元测试和集成测试(不使用mock)
文章要点:1. 为Controller编写测试,不需要应用服务器环境2. 为Service编写测试,不需要应用服务器环境原创 2014-11-05 09:11:59 · 6308 阅读 · 0 评论 -
总结在使用JPA时需要注意的几点
在调用persist(entity)方法之前,一定要保证entity所有的非集合类成员都已经被正确地赋值。在@OneToMany关系中,如果要删除many端(主动端)的实体,必须先从one端(被动端)的集合类中移除该实体,然后再调用remove(entity)方法才能删除成功。在@OneToMany关系中,未设置级联删除的情况下,如果要删除one端(被动端)实体,则必须先删除one端集合类中所有原创 2015-03-09 15:13:07 · 2030 阅读 · 0 评论 -
Spring Boot Web应用的异常处理
Web应用在处理请求时可能会出现多种错误,如请求参数不正确、URL不存在、请求方法错误、内部未知错误等。SpringMVC有多种异常处理方式,使用某种方式的判断标准是,你的异常是在请求处理的哪个阶段发生的。在执行@RequestMapping方法时发现的异常这也是最常见的异常了,处理业务逻辑时可能会发生各种问题,如数据库报错、请求参数格式错误/缺失/值非法等。此类异常的捕获方法有两种,对于提供RES原创 2016-04-07 23:19:54 · 11856 阅读 · 1 评论 -
替换Servlet容器的HttpSession实现集群中Session共享(With Redis)
本文是我个人在开发web-security 安全框架中使用的方案。 在Web Server集群环境中需要实现 session 共享,一个很好的方法就是将 session 数据存放至 Redis 中。我打算在自己的安全框架中集成此功能,只需要几行配置就能自动让你的 web 项目集成 redis session 共享功能。实现思路为:将 Servlet 容器的HttpSession实现替换成自己的实现原创 2016-03-11 17:16:36 · 5785 阅读 · 1 评论 -
集群环境下使用Shiro的技术方案(With Redis)
在此之前,我是使用自己编写的web安全框架完成基于角色role的权限验证的,在集群环境中只需要将session中的信息存放到redis中即可。然而换成Shiro后,我发现事情麻烦了很多,因为需要学习Shiro的文档,自定义SessionDAO实现Redis的Session存储,但是这里面还是有一些坑。通过Reids实现Shiro Session共享首先在集群环境下,我们不能使用 servlet 规范原创 2016-03-09 23:00:09 · 5522 阅读 · 1 评论 -
Spring Boot + Mybatis + Log4j2开发环境搭建
近些年来由于微服务架构越来越受欢迎,基于JVM平台的”微框架”也如雨后春笋般涌现:小清新的如Spark Framework, 重量级的如Spring Boot。Spring Boot相比其它微框架来说,有以下几点优势:自带实时监控、开发者工具与Spring无缝集成社区活跃配置依赖首选我们的web项目需要从spring-boot-starter-parent父项目中继承而来:<parent>原创 2016-03-04 14:56:13 · 9284 阅读 · 1 评论 -
JavaWeb: Redis存储Session方案
所有支持Servlet规范的容器都自带session管理,于是大多数人都使用HttpSession接口存放状态信息。事实上, servlet的session会使得应用服务器水平扩展变的非常困难。使用Servlet Session时的妥协方案Session Replication这无疑是一种浪费内存的方法,对于5台左右的集群还可以忍受,如果你需要几十甚至上百台集群,这就完全不可行。Session St原创 2016-01-06 03:23:01 · 13355 阅读 · 4 评论 -
Spring MVC Tomcat下GET请求和POST请求乱码的解决
POST乱码服务端取出参数时发现汉字乱码。解决方法有二种,可以写一个过虑器,调用request.setCharacterEncoding("UTF-8"),或者直接用spring提供的过虑器:<filter> <filter-name>CharacterEncoding</filter-name> <filter-class>org.springframework.w原创 2015-07-06 23:12:21 · 3227 阅读 · 0 评论 -
Linux下Tomcat VM参数修改
不可行的方法最初我直接修改catalina.sh, 将JAVA_OPTS变量加上了-server -Xms1G -Xmx1G -XX:+UserG1GC最初看起来没啥问题,但是当服务器运行几天后,发现执行shutdown.sh无法关闭tomcat, 错误信息如下:# root@iZ94hjppdqzZ:~/projects/taolijie# cat hs_err_pid5519.log # Th原创 2015-07-27 12:07:46 · 5361 阅读 · 0 评论 -
使用Spring Cache + Redis + Jackson Serializer缓存数据库查询结果中序列化问题的解决
应用场景我们希望通过缓存来减少对关系型数据库的查询次数,减轻数据库压力。在执行DAO类的select***(), query***()方法时,先从Redis中查询有没有缓存数据,如果有则直接从Redis拿到结果,如果没有再向数据库发起查询请求取数据。序列化问题要把domain object做为key-valuec对保存在redis中,就必须要解决对象的序列化问题。Spring Data Redis给原创 2015-07-08 10:32:21 · 25255 阅读 · 12 评论 -
基于JMS消息中间件的分布式系统初探究(一) - 通过JMS实现Web服务器与服务框架的通讯
在一个大型网站中,如果要把整个业务拆分成N个子业务,每个业务单独部署到一台服务器上,那么需要解决的问题有:自身的部署。是部署到JavaEE容器中随容器启动,还是做为一个standalone程序单独启动?子系统如何暴露服务接口(如何与其它系统进行通讯)。服务请求者直接通过Socket直连,还是通过Web Service, RMI等技术?这里我们尝试通过standalone方式部署,通过JMS中间原创 2015-03-24 00:47:48 · 3093 阅读 · 0 评论 -
Debian下将WildFly作为Service启动
ln -s $JBOSS_HOME/bin/init.d/wildfly-init-debian.sh /etc/init.d/cp $JBOSS_HOME/bin/init.d/wildfly.conf /etc/default/wildfly然后打开/etc/default/wildfly文件,修改JBOSS_HOME, JAVA_HOME等参数。至此执行service wildfly sta原创 2015-04-01 10:20:51 · 1640 阅读 · 0 评论 -
JBoss + EJB3 + MySql : 开发第一个EJB
JBoss开发Bean并不困难,而对于不知道的人来说,数据库配置才是比较棘手的问题。现在我们就来一步一步开发一个EJB3 + MySql的Bean。一、MySql数据库的配置1. 配置数据源在 %JBOSS_HOME%/docs/examples/jca 目录下找到一个名叫 "mysql-db.xml" 的文件,这个是官方为我们写好的针对mysql的数据源配置文件,我们改改它就原创 2013-07-15 00:29:47 · 3242 阅读 · 0 评论 -
GeoServer 2.3 发布地图
最近因为项目需要,要用GeoServer发布地图数据,因此不得不研究了一下。根据官方文档,我们可以直接发布*.shp文件,也可以通过PostGis中的数据表来发布。下面分别介绍一下这两种方式。GeoServer简介:GeoServer 是 OpenGIS Web 服务器规范的 J2EE 实现,利用 GeoServer 可以方便的发布地图数据,允许用户对特征数据进行更新、删除、插入操原创 2013-08-01 22:14:32 · 3763 阅读 · 0 评论 -
使用Seam Framework + JBoss 5.0 开发第一个Web应用 - 简单投票程序
Seam这个单词的本意是缝合、连接,因而,Seam的作用即是把Java EE 规范里的JSF 和 EJB技术完美融合在一起,免去了很多胶合代码,并增强了JSF 和 EJB的很多功能。Seam的设计目标之一是,写最少的代码,做最多的事,并且极力减少 “对XML的编程”。原创 2013-08-24 18:19:18 · 2492 阅读 · 0 评论 -
使用 maven:archetype 创建JSF2 + EJB3.1 + JPA2项目骨架并在JBoss WildFly 8.1上部署
执行以下命令创建项目骨架:mvn archetype:generate -DarchetypeGroupId=org.jboss.spec.archetypes -DarchetypeArtifactId=jboss-javaee6-webapp-ear-archetype -DarchetypeVersion=7.1.1.Final -DgroupId={你的groupId} -Dartif原创 2014-05-06 23:42:02 · 2489 阅读 · 0 评论 -
Debian-7.1下JBoss Forge + Arquillian + JBoss-as-7.1 测试环境搭建
下载安装ForgeJBoss Forge是一种能够快速创建、开发Java项目的工具,通过它我们可以迅速生成项目骨架,解决库依赖问题,并与Arquillian测试框架集成。Forge有点类似于seam-gen,但其最大的不同之处在于,seam-gen只能在项目创建时一次性成生class,而Forge可以随时动态添加class,field, 依赖库等。我们可以从官网(http://forge.jb原创 2013-12-26 22:39:48 · 2534 阅读 · 0 评论 -
JPA + Hibernate + PostgreSQL + Maven基本配置示例
JPA + Hibernate + PostgreSQL工程示例。注意 user 在 postgresql 中为保留关键字,所以如果你persist一个名为User的类的时候就会报语法错误。创建项目用JBoss Forge或maven archetype 或 eclipse创建一个maven项目,添加以下依赖: org.hibernate.javax.pe原创 2014-01-29 20:48:58 · 8663 阅读 · 1 评论 -
Arquillian测试框架快速上手教程 (一) - 环境搭建、容器适配、单元测试
本系列教程共四篇,分别是:一、 环境搭建、容器适配、单元测试二、JBoss Forge、ShrinkWrap快速指南三、使用 Arquillian 进行Java持久化测试四、使用 Arquillian + Drone + Selenium 进行功能测试(UI测试或Web自动化测试)其中,Web容器以JBoss为例,工程以maven目录结构为准。Arquill原创 2014-02-23 13:40:41 · 16358 阅读 · 8 评论 -
JBoss WildFly(JBoss8)如何将应用部署到根上下文
当我们访问 localhost:8080/ 的时候,总会出现JBoss的欢迎页面,如果我们想访问根目录的时候直接转到我们的Web应用,则需要两步,一是在/WEB-INF/ 目录下添加jboss-web.xml文件命令JBoss将应用注册到根上下文,二是取消欢迎页面。而WildFly跟JBoss以前的版本取消欢迎页面的配置又有所不同。首先在项目目录WEB-INF 下添加jboss-web原创 2014-07-21 14:58:43 · 5571 阅读 · 0 评论 -
Ubuntu下Tomcat连接MySql数据库
Linux下在tomcat上配置MySql数据库没Windows那么简单,得折腾一翻。。。因此值得写下来做个记录,供日后参考。1. 下载安装MySQLUbuntu下安装MySQL非常简单,只需要:sudo apt-get install mysql-server安装过程中会让你设置用户名、密码,我的是root,root.2、下载JDBC去http://www原创 2013-04-20 23:43:18 · 3669 阅读 · 1 评论 -
Ubuntu下安装NetBeans步骤和相关问题的解决方法
折腾了一下午,总算搭好了NetBeans + JSF 开发环境。现将折腾期间出现的问题和解决方案记录如下。。:1. 去 https://netbeans.org/downloads/ 下载 netbeans-7.3-javaee-linux.sh2. 为 netbeans-7.3-javaee-linux.sh 添加可执行权限执行 chmod +x netbeans-7.3-j原创 2013-05-03 15:04:43 · 3119 阅读 · 1 评论 -
JavaBean中的get/set 的命名规范
最近的struts项目中遇到了这样的问题: 我的action中全局变量明明有getset方法,而且是自动生成的,但是在使用的时候,总是说找不到这个属性的getset方法,取不到从jsp传来的值, 原因如下:变量名为:hDeptment,在自动生成getset方法为:setHDeptment,getHDeptment。下面是解释这个问题。(1)JavaBean 类必须是一个公共类,并将其访问转载 2013-04-04 15:15:49 · 3961 阅读 · 0 评论 -
【javascript】解决setTimeout不能传参的问题
setTimeout函数是javascript中实现动态效果最关键的函数。但昨天在写代码的时候发现当第一个参数是函数调用的时候,不能向被调函数传递参数。这真是个非常严重的问题,我排查了好久才发现问题,浪费了N多时间啊。。后来上网查了查,这其实是IE的一个BUG。解决方法有很多,其中我觉得最牛的一种就是重写setTimeout函数。。。这个太麻烦了。。这里推荐一种十分简单的方法。只需要在你要原创 2012-10-06 16:50:58 · 2167 阅读 · 2 评论 -
在JBoss中部署JSF应用时报错"Could not find backup for factory javax.faces.application.ApplicationFactory" 解决方法
这个错误出现的原因是classpath中存在多个jsf实现。比如,JBoss7有一个默认的JSF实现,而你的应用中却用了MyFaces作为JSF实现,这时候应用部署时就会报这个错误。解决方法:1。坚持使用项目中的JSF实现。这时在WEB-INF/web.xml中添加这个参数即可: org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL原创 2014-04-12 14:20:56 · 5184 阅读 · 0 评论 -
跳转(Forward)和页面重定向(Redirect)的区别
我们通过两个流程来看一下它们之间的区别。Redirect1. 用户浏览器向 http://localhost:8080/demo/start.xhtml 发送 GET 请求。2. JSF收到请求,返回 start.xhtml 页面。3. 用户点击页面中的按钮。4. JSF收到请求,向浏览器发送 Redirect 指令(3XX的HTTP状态值)。5. 浏览器收到指令,原创 2014-03-01 15:25:07 · 6632 阅读 · 0 评论 -
Seam的Conversation上下文
为了解决数据跨请求传递的问题,Seam为我们提供了 conversation 上下文。有了 conversation 以后,我们不需要再将需要跨越多个请求的数据都放到session里了,conversation是一个更好的解决方案。当然对话上下文也是从session中分配出来的,但是我们可以更好地控制组件的生命周期。在Seam中,任何一个请求到来时,都会启动一个对话,也就是说,对话上下文是seam原创 2014-03-01 15:10:55 · 1915 阅读 · 0 评论 -
在JBoss中部署GeoServer
GeoServer一直就不能在 JBoss应用服务器中正常部署。最近我在一个国外的论坛上找到了该问题的解决方案。以下方法经测试,可以将GeoServer 2.1.3 成功部署在 JBoss 5.0 和 JBoss 7.1.1中。添加 jboss-classloading.xml在 geoserver.war/WEB-INF目录下,添加 jboss-classloading.xml原创 2013-08-31 00:56:42 · 1840 阅读 · 0 评论