maven ssh框架搭建问题

SSH版本:spring4.3.2 + struts2.3.16 + hibernate5.1.0数据库使用的mysql
具体搭建方法建议参考:http://blog.csdn.net/zhuanzhe117/article/details/ &&
& & & && http://blog.csdn.net/zndxlxm/article/details/8714383&
两篇不错的文章,讲解的很详细,并附有具体代码。
需要注意的问题:
1.数据库名不能为username,系统会自动匹配为本机电脑名。
2.&找不到dataSource的类 Build path is incomplete. Cannot find class file for com/mchange/v2/ser/ Ind
解决:导入mchange-commons-java-0.2.3.1.jar&
3.hibernate4之后,使用openSession()代替getCurrentSession();
4.表名 is not mapped [FROM USER S WHERE S.ID = :id]
USER应为数据库表对应的对象名,S.ID id应为对象的属性,而不是数据库的字段。应该为:FROM User S WHERE S.id=:id
5.java中转json的问题
使用json必须的包(目前使用的版本):
&commons-lang-2.6.jar
commons-logging-1.1.3.jar
json-lib-2.4-jdk15.jar
ezmorph-1.0.6.jar
commons-collections-3.2.2.jar
commons-beanutils-1.9.2.jar&
错误及对应包名
出现ava.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException错误因为没有导入commons-lang-2.4.jar文件或版本不对。(需导入2.x版本 (commons-lang-2.4.jar)不删除3.x版本)
出现java.lang.NoClassDefFoundError: net/sf/json/JSONObject错误因为没有导入json-lib-2.3-jdk15.jar
出现java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher错误是因为没有导入ezmorph.jar文件或版本不对。
出现java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ListOrderedMap错误是因为没有导入commons-collections.jar文件或版本不对。
出现java.lang.ClassNotFoundException: mons.beanutils.DynaBean
是因为没有导入commons-beanutils-1.9.2.jar文件或版本不对。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1749次
排名:千里之外
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'主题信息(必填)
主题描述(最多限制在50个字符)
申请人信息(必填)
申请信息已提交审核,请注意查收邮件,我们会尽快给您反馈。
如有疑问,请联系
CSDN &《程序员》研发主编,投稿&纠错等事宜请致邮
你只管努力,剩下的交给时光!
个人大数据技术博客:
人生得意须尽欢,莫使金樽空对月。
学了一个多月的SSH框架,对于其中的原理知识很模糊不清,关于的数据的传送都不懂,学起来真难, 到底怎么学????!!!!1. 发现通过注解注入bean不起作用(对应的.java文件上没有'S'标记)
  需要在pring .xml配置文件中加
&!-- 使用自动注解就必须配置加入自动扫描加载容器的包 --&
&context:component-scan base-package="com.*"&&/context:component-scan&
2. getSession时&sessionFactory.getCurrentSession()获取不到session,原因是没有配置事务绑定线程,在spring .xml中配置事务即可。
&bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"&
&property name="sessionFactory" ref="sessionFactoryBean"&&/property&
&tx:advice id="advice" transaction-manager="transactionManager"&
&tx:attributes&
&!-- 执行事务的方法名 --&
&tx:method name="*"/&
&/tx:attributes&
&/tx:advice&
&aop:config&
&!-- 配置切点
&aop:pointcut expression="execution(* com.blog.service.*.*(..))" id="pointcut"/&
&aop:advisor advice-ref="advice" pointcut-ref="pointcut"/&
&/aop:config&
阅读(...) 评论()问题:struts如何传递数据到jsp?答案:Struts的action传参给jsp:可以用传统的在request/session中加入参数的方法也可以:& & &s:set name="userList" value="persons"&&/s:set& (persons是action的变量,需要有getPersons())& & &s:property value="persons"/&也相当于用传统的jsp嵌入java的写法:& & &%=request.getAttribute("persons") %&如果比较逻辑比较复杂的时候,如果不熟悉struts,建议后最后这种传统方法
Struts2获取response和requestHttpServletRequest request = ServletActionContext.getRequest();HttpServletResponse response = ServletActionContext.getResponse();HttpSession session = request.getSession();  如果你只是想访问session的属性(Attribute),你也可以通过ActionContext.getContext().getSession()获取或添加session范围(Scoped)的对象在action中返回下载流或者json:如果单独返回,不用配置的返回的话,就需要手工配置返回的字符编码action函数执行完不要返回任何东西,但需要先操作responseresponse.reset();response.setContentType("application/x-charset=utf-8");&& &response.setHeader("Content-disposition", " filename="+&"table.xls"); & & & &try {&& & & & & &excelWriter.expt(); & & & & & &System.out.println(" 导出Excel文件[成功] ");&& & & &} catch (IOException ex) {&& & & & & &System.out.println(" 导出Excel文件[失败] ");&& & & & & &ex.printStackTrace();&& & & &}&& & & &response.getOutputStream().flush();Hibernate:1.由于没有配置openSessionInView(一个request过程中用一个Hibernate的session),现在需要每次查询都打开一次session。这样的好处是减低数据库连接池的消耗,另外不会出一些难以理解的问题。所&以,例如选择了class(班级)&a,然后a里边有一个studentList。student是class的1对多,多的那端。这个studentList.get(0).id是有的,&但其他信息都为null。也就是说,如果需要student信息,需要利用id再查询student。
问题:下拉列表怎么多个联动?回答:1.可以全部一次获取到前台2.可以下拉一个之后,就submit到同一个jsp,刷新页面(但如果jsp有原来struts的action传来的收据的话,这种做法就行不通了)3.ajax~~建议使用第一种:参考:/question/.html
问题:struts2如何返回错误信息到提交请求的页面?答案:在result中配置一个name为input的跳转,然后处理请求的函数返回&input&,返回前需要把错误信息放到session中,然后jsp获取出来显示这样会有问题,也就是原来那个jsp的页面状态保存不了(例如下拉框选择了什么,分页显示到第几页)。这没办法的~~需要我们自己另外把页面的状态保存起来。
问题:怎么上传excel的时候做到不刷新本页面,就等待返回成功或者错误的弹出框?答案:在fm中设置target属性,指向一个&隐藏的iframe,表示返回的内容在哪里显示。可以参考filemanager的fileManager.html。然后action处理完不要转到jsp,只需要返回&alert(""xxxxxx"")"或者自定义函数,使得在iframe中控制父页面执行某些动作。我做文件管理器就是这样做的。&fm id="uploadFileFm" target="hiddenFrame" method="post" enctype="multipart/fm-data"&&&&&&&&&&&&&&&&&&&&&&&&&& & &input id="fileInput" type="file" name="upload" &&&&&&&&&&&&&&&&&&&&&&&&&& & &input id="hiddenDirecty" type="hidden" value="" name="directy"&&&&&&&&&&&&&&&&&&&&&&&&&& & &input type="button" id ="uploadButton" value="开始上传"/&&&&&&&&&&&&&&&&&&&&&& & &/fm&
问题:jsp页面怎么在提交之后,继续保持状态?例如当前是第几页,下拉框选择了什么?答案:没有像asp.net这么简单的做法,只能&根据原理去做。提交的时候,把页码,下拉框之类的都post过去。第一个action处理完之后,带着request参数转到另外一个action。在第&二个action中获取相应的参数(这时还是继续有struts自动封装的效果)。(见阳江项目)
&---------------------转自网络,觉得不错,,忘了地址了
问题:struts2如何批量删除?答案:这个跟普通的jsp+Servlet做法类似。定义checkbox,name都统一为例如。普通Servlet做法就是,request.getParameterValues(""),获取String[]。action中定义String[] 数组(或者其他类型)。struts2自动装配进去。例如:&fm action="testPerson.action" method="post"&&&&&&&&&& & &input type="checkbox" name="" value="1"&&&&&&&&&& & &input type="checkbox" name="" value="2"&&&&&&&&&& & &input type="checkbox" name="" value="3"&&&&&&&&&& & &input type="checkbox" name="" value="4"&&&&&&&&&& & &input type=""submit"" value="Submit" /&&&&&& & &/fm&在前台,例如我只选中了1,4两个框。那么在后台获取的String[],则只有&1&和&4&
问题:怎么直接new新建一个DAO或者Service进行测试?答案:通过Spring,获取配置文件中的Bean。这些bean将会在ApplicationContext.xml加载的时候初始化。&&&&& & ApplicationContext ac = new FileSystemXmlApplicationContext("classpath:applicationContext.xml");&&&&& & PersonDAO personDAO = (PersonDAO) ac.getBean("personDAO");&&& & System.out.println(personDAO.getEntityName());
问题:在XXXXList页面,点击修改,跳转到修改页面,修改之后,如何返回XXXList页面,同时保持原来的状态(页码)?回答:使用弹出窗口。XXXXList页面使用以下代码:&script&function refresh(){& & XXXXfm.submit(); & //使用post的方式刷新}function newWin(){window.open(""newWin.htm"");}&/script&新开的页面,保存/关闭的时候,调用:function closeme(){&window.opener.refresh();//以下代码是为了避免浏览器提问是否关闭var browserName=navigat.appN&if (browserName=="Netscape") {&window.open("""",""_parent"","""");&window.close();&} else if (browserName=="Microsoft Internet Expler") {&window.opener = "whocares";&window.close();&} }&如果没必要保持状态的修改,例如用户列表,联系人列表,就直接同一个窗口内跳转就可以了。
问题:java.io.CharConversionException: Not an ISO 8859-1 character: XXX
回答:这个问题可能是因为outputstream输出中文字造成的影响。
response.setContentType("text/charset=UTF-8");//response.getOutputStream().print("中文字");&//这行会出错response.getWriter().print("中文字");&//换成这个就好了response.getWriter().close();
原因我个人觉得是因为outputstream是以字节为单位输出字符串的,需要符合那个ISO 8859-1编码;但要输出的字符串是UTF8编码的,所以就有问题。但根源问题,我真没想通。
换成Writer就好了。可能是因为那个inputstream和reader,outputstream和Writer的区别吧。
问题:使用struts2,如何处理action的路径?还有,在action转到的jsp中,如何写js,css,图片的路径?(例如访问http://localhost/project/listUser.action后转到http://localhost/project/user/listUser.jsp,这时候浏览器还是停留在http://localhost/project/addUser.action)答:action的话,就不需要关心路径问题。我们不使用action的命名空间。因为使用了这样的匹配:& & &filter-mapping&&&&&& & &filter-name&struts2&/filter-name&&&&&& & &url-pattern&*.action&/url-pattern&& & &/filter-mapping&无论前边是什么路径,struts2只看后边的匹配。而解决jsp的路径问题,以下方式就基本完美了:第一步:在jsp的head中添加base标签和一段java&%& & String path = request.getContextPath();& & String basePath = request.getScheme() + "://"&&&&&&&&& & + request.getServerName() + ":" + request.getServerPt()&&&&&&&&& & + path + "/";%&&base href="&%=basePath%&"&第二步:所有的路径使用&半绝对路径&。所谓半绝对路径,是我乱说的。例如:&link rel="stylesheet" type="text/css" href="style/table.css" /&这种本来是相对路径,就是当前jsp目录下的style目录的table.css。在我们struts2和配置了base的前提下,这里就会被浏览器解释为http://localhost/project/style/table.css。也就是说,需要写从项目根目录算起的绝对路径,但去掉开头的"/"第三步:所有action跳转,fm提交写的action路径,都不要带目录位置。只写action名,例如addUser.action。这样,浏览器就一直停留在http://localhost/project/XXXXX.action& 这一层。
第一步:在jsp的head中同样添加base,但把getContextPath改为getRequestURId&%& & String path = request.getRequestURI();& & String basePath = request.getScheme() + "://"&&&&&&&&& & + request.getServerName() + ":" + request.getServerPt()&&&&&&&&& & +%&&base href="&%=basePath%&"&注意是request.getRequestURI,这样获取出来的正好就是jsp的绝对路径。例如浏览器地址栏是:http://localhost:8084/project/listUser.actionbase是&base href="http://localhost:8084/project/admin/listUser.jsp"&第二步:jsp页面内,全部使用相对路径访问。第三步,就不必管action的路径如何了。这个方法,可以兼容使用action和不使用action两种情况
问题:如何使用多个Struts和Spring配置文件?回答:有不少方法,但我喜欢在主配置文件中impt其他子文件。Spring:在文件最后&/beans&前,加入include。例如& & &impt resource="wenhui-springConfig.xml"&&/impt&&& & &impt resource="xiangpeng-springConfig.xml"&&/impt&&& & &impt resource="mingyi-springConfig.xml"&&/impt&&& & &impt resource="haichuan-springConfig.xml"&&/impt&&&/beans&然后子文件写法跟主配置文件一致,从beans节点开始,里边全部是beanStruts:在文件最后&/struts&前,include其他文件。例如&include file="struts_wenhui.xml"&&/include&&& & &include file="struts_xiangpeng.xml"&&/include&&& & &include file="struts_mingyi.xml"&&/include&&& & &include file="struts_haichuan.xml"&&/include&&&/struts&然后子文件写法跟主配置文件一致,从&struts&开始,然后是&package&。需要注意的是每个文件的package的name属性要不相同。
问题:数据库没有设置级联删除,Hibernate删除&一那方&的时候,会不会删除&多的那方&?答案:如果按默认配置是不会的。需要在hbm文件中配置cascade规则。参考:http://www.blogjava.net/zhyiwww/archive//39576.html但这样其实也不方便,还不如直接到数据库里边设置级联删除。所以我们做法是:Hibernate里就不设置级联的配置,基本一旦有外键就无法删除,需要手工去删除多的一方(这样一般来说也符合业务要求)。如果真需要(例如删除用户,就删除UserToRole和LoginLog),所以就到数据库设置级联删除。
问题:spring启动的线程,或者普通的java类中怎么获取web目录?例如删除临时文件的线程类中。答案:
在web.xml中的&web-app&节点内加入:
&context-param&&&param-name&webAppRootKey&/param-name&&&param-value&tansungWeb.root&/param-value&&&/context-param&&&listener&&&listener-class&g.springframewk.web.util.WebAppRootListener&/listener-class&&&/listener&然后在普通类中,使用System.getProperty("tansungWeb.root")获取了web根目录。然后再拼凑路径的时候,最好不要直接使用/或者\,最好使用File.separatChar
阅读(...) 评论()}

我要回帖

更多关于 ssh框架开发项目实例 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信