ssh框架开发过程问题及其解决方法log

本文总结了SSH框架(Spring 3.2.4,Struts 2.3,Hibernate 3.6)开发中遇到的问题,包括Tomcat超时、Log4j配置、Hibernate映射文件、页面跳转、JS文件乱码、注销功能实现等问题,并提供了相应的解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

资料管理系统
开发环境:
- ssh框架:spring 3.2.4,struts 2.3,hibernate 3.6
- 数据库:兼容达梦数据库和oracle数据库
- web服务器:tomcat
以下是项目开发过程中遇到的小问题汇总
1、 tomcat打开超时

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

解决:hibernate项目下默认只有slf4j日志工具的api包,没有实现包。登录www.slf4j.org/download.html 下载slf4j日志工具,解压后将添加到lib目录下。

Initializing Spring root WebApplicationContext
log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

解决:项目中使用连接了数据库的操作,而却没有开启数据库,直到tomcat连接数据库超时之后才会进行下一步,所以启动比较慢。打开数据库后再启动tomcat。成功。
2、配置log4j文件时发现找不到文件问题
一般我们直接将log4j.properties放置在src目录下,这样系统自动会找到的,其实就是放在WEB-INF/classes文件下。这个路径在classpath下,所以直接就能找到。如果现在我们想把log4j.properties文件放置在其它目录下,例如:WEB-INF下和web.xml放在一起。这时候就需要我们手动指定log4j配置文件的路径,否则系统是找不到的。
在web.xml中配置好log4j.properties路径:

 <context-param>
     <param-name>log4jConfigLocation</param-name>
     <param-value>/WEB-INF/log4j.properties</param-value>
 </context-param>

3、hibernate映射文件问题
http-bio-8080-exec-4 : PERSON is not mapped from PERSON
配置文件

<hibernate-mapping>
  <class name="org.military.po.Warship" table="warship" schema="MilitaryMS" optimistic-lock="all" dynamic-update="true">
        <id name="shipversion" type="string">
            <column name="shipversion" length="100" />
            <generator class="assigned" />
        </id>
     ……
 </hibernate-mapping>

解决:因为hql操作的是po,不是table,所以hql=“from Warship”,而不是写成“from warship”。
4、无法解析的成员访问表达式[PERSON0_.USERNAME]
达梦查询语句会默认自动改成大些字母,如果在安装数据库时选择大小写敏感,而表名或者字段名为小写,则会报错。
5、bootstrap或者html标签写的页面跳转到action时总是找不到?
解决:添加struts标签引用<%@ taglib prefix =”s” uri =”/struts-tags”%>,在form元素前添加s:标记。form表单内的元素可以不添加s:前缀,只需输入表单元素的name与action中封装的属性名称一致即可。
本质原因:s:前缀会自动将action添加相应前缀路径,另一个解决方法是更改action路径:

String path = request.getContextPath();
action="<%=path%>/loginAction"

6、jsp文件中引入js文件时,js文件中的中文会乱码
解决:eclipse中,在js文件上右击,选择属性,选择编码方式为utf-8(跟jsp编码方式一致);
<script src ="./js/login.js" type ="text/javascript" charset ="utf-8">
7、ssh框架中,使用< a href=”“/>跳转到/WEB-INF/文件夹下的jsp页面方法
在struts.xml文件中配置

<action name= "*_*">
    <result> /WEB-INF/{1}/{2}.jsp </result>
</action>

然后在< a href=”<%=path>/admin_userInfo.jsp” />
其中String path = request.getContextPath();
表示将跳转到/WEB-INF/admin目录下的userInfo.jsp页面
8、jsp中注销功能实现
登录action中登录成功后添加session:

ActionContext.getContext().getSession().put("username", username);         
ActionContext. getContext().getSession().put( "password", userpassword );

在每个jsp显示页面头部添加语句判断:

String path=request.getContextPath();
Object username=session.getAttribute("username");
Object password=session.getAttribute("password");
if(username==null || password==null ){
       request.getRequestDispatcher( "/admin_login_first.jsp").forward(request, response);
}

当点击注销时,在注销的jsp页面中添加:

<%
session.removeAttribute("username");
session.removeAttribute("password");
%>

9、如果表单中有js处理代码,而且提交后没有跳转到对应的action页面,而是跳转到了其他页面,可以检查下js文件中表单事件的submitHandler,去掉或修改即可。
10、action中配置的自定义方法只能是无参的,如果加上参数会找不到方法
如:

<action name= "registerCheckAction" class ="employeeAction" method="queryUserinfoBypage" >
      <param name= "state">未审核 </param>
      <result name="success" >
      /WEB-INF/ admin/registerCheck.jsp</result >
 </action>

本想通过param传递参数给方法,但是报错。所以不能这样写

11、js通过href传参给action乱码
方法:在href传的参数 userlevel=encodeURI(encodeURI(level)) , 然后在action处理类中进行解码:userlevel =URLDecoder.decode(userlevel, “utf-8”);
12、select列表框选择问题
表格数据是动态生成的,当生成多行时,如果select组件id设为固定的,那么所有行的select组件id都一致,在用window.document.getElementById(id) 取数据时,实际上取的可能是第一行的数据。所以在生成表格select组件时,应根据表格主键设置不一样的id,比如id =’level< s:property value =”username” /> ’ ,而在取值时,可以

var obj1=window.document.getElementById('level <s:property value= "username" /> ');                                                                                               
 var level=obj1.value; 

小技巧:因为取得select选中的文本比较麻烦,可以将value设置成和文本值一致,这样使用 var level=obj1.value 取value值即可。
13、state状态改成varchar(20),如果是char(20)属性,不满足20个长度的会补空格,那在判断跟某一字符相等时可能会出现错误。
14、使用jquery.validate.js验证表单时出现TypeError: $(…).validate is not a function错误
原因:检查jquery.min.js文件是否导入不同版本
jquery.validate.min.js文件是否导入。两者引用顺序不可改变
15、TypeError: $(…).pagination is not a function
遇到该类……不是一个函数之类的问题,往往是由于js包冲突,该问题就是由于引入的两个jquery版本冲突造成的。
注意:同一个jquery.js引入两次也会出错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值