1、加入如下jsp文件头之后,会遇到一些错误。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="ctx" value="${pageContext.request.contextPath}" scope="page"/>
需要加入
jstl.jar
standard.jar
jsp-api.jar(位于tomcat/lib下)
jsp-2.1-6.1.12.rc4.jar(这个版本才有SetTag类,对应c:set)
2、eclipse 控制台输出乱码
进入eclipse-preferences-general-workspace-text file encoding
根据需要变成UTF-8格式或GBK格式
3、错误:createCriteria is not valid without active transaction
解决办法:
在sessionFactory bean中加入:hibernate.current_session_context_class=thread
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:hibernate.cfg.xml"/>
<property name="hibernateProperties">
<value>
hibernate.dialect=${hibernate.dialect}
hibernate.query.substitutions=true 'Y', false 'N'
hibernate.cache.use_second_level_cache=true
hibernate.show_sql=${hibernate.show_sql}
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
hibernate.current_session_context_class=thread
</value>
<!-- Turn batching off for better error messages under PostgreSQL -->
<!-- hibernate.jdbc.batch_size=0 -->
</property>
</bean>
Session session = sessionFactory.getCurrentSession();
Transaction tx = session.beginTransaction();
//这里在事务里面进行操作
...
tx.commit();
//session.close();
//也可以这样做:
Session session = sessionFactory.openSession();
//这里在事务里面进行操作
....
//session.close();
采用上一种getCurrentSession()方法需要将以下bean注释掉。
推荐用openSession(),这样你可以不必注释transactionManager。
<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/> </bean>
4、action调用不了service层,service层调用不了dao层。
(1)、action调用不了service层方法,看看applicationContext-struts.xml中property有没有设置正确,且UserManagerImpl.java实现类中有没有声明@Service("userManager")
<bean id="userAction" class="net.juntech.action.UserAction" scope="prototype">
<property name="userManager" ref="userManager" />
</bean>
(2)、service层调用不了dao层方法,在UserManagerImpl.java实现类中添加一个构造方法,其中@Autowired不能少,因为我没并没有再UserManager.java接口类声明这个方法。
@Autowired
public UserManagerImpl(UserDao userDao){
super(userDao);
this.userDao=userDao;
}
5、tomcat无法启动,提示端口被占用
Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost
are already in use. The server may already be running in another process, or
a system process may be using the port. To start this server you will need
to stop the other process or change the port number(s)
再次启动tomcat遇到这个错误,很奇怪,明明之前已经启动过一次并且关闭了。
我的系统是OS X 10.9,结合之前每次运行tomcat会有一个java图标在Dock栏中,我觉得应该是tomcat可能没有正确退出。去查看进程,果然有一个叫java的进程在运行。
终端使用killall java或活动管理器(Linux、OS X等系统)、windows控制台应该有个taskill命令或任务管理器可以解决这个问题。
上面的命令也许杀不掉进程,因为它的父进程是eclipse,可以选择先关闭eclipse再杀掉这个进程。也可以用killall -9 java强制结束进程。
killall java
killall -9 java
当然,如果还解决不了问题,去尝试寻找并结束使用这3个端口的程序。
实在不行,就去更改tomcat目录下cfg/server,xml中8005,8080,8009端口,改成其他未被使用的端口,访问端口也将有所变化。