一、Strus2
1、配置文件Struts.xml
<package name="default" extends="struts-default" namespace="/">
<default-action-ref name="index"></default-action-ref>
<action name="indexAction" class="cn.bupt.mes.action.IndexAction">
<result>/index.jsp</result>
</action>
</package>
<package name="json" extends="json-default" namespace="/json">
<action name="enroll" class="cn.bupt.mes.action.GeneralEnrollAction">
<result type="json">
<param name="root">responseJson</param>
</result>
</action>
</package>
系统有默认命名空间(没有namespace这一属性)、根命名空间namespace="/"、和自定义命名空间namespace=“/json”
加入请求的url为“/jsp/indexAction” 则系统会先在/jsp命名空间下查找,找不到的话会在默认命名空间查找,
照上面的配置,果断出错。解决方案是删除default包的命名空间;
但是假如请求url为“/indexAction”的话,系统会先在根命名空间查找名为indexAction的Action,如上配置就能找到;
2、把对前台页面响应的参数通过Struts2转换为Json格式
Struts.xml配置为如上json包的配置,在前台页面配置action名的时候为如下格式:json/action名!方法名,例如 json/enroll!getMzAndTotal
GeneralEnrollAction代码如下:
public class GeneralEnrollAction extends ActionSupport {
private static final long serialVersionUID = 5634268379958777569L;
private NlqService nlqService;
public Map<String, Object> responseJson;
public NlqService getNlqService() {
return nlqService;
}
public void setNlqService(NlqService nlqService) {
this.nlqService = nlqService;
}
public Map<String, Object> getResponseJson() {
return responseJson;
}
public void setResponseJson(Map<String, Object> responseJson) {
this.responseJson = responseJson;
}
@SuppressWarnings("unchecked")
public String getMzAndTotal(){
Map<String, Object> map = new HashMap<String, Object>();
List<Map<String, Object>> list = (List<Map<String, Object>>) nlqService.findMZAndTotalGroupByMZM();
map.put("rows", list);
this.setResponseJson(map);
return SUCCESS;
}
}
如上代码,能够把List<Map>封装入一个Map中,然后通过在Struts.xml中的配置,
Struts能够把最终封装好的Map转为Json格式传到前台页面展示;
二、Spring
1、配置数据源
一句话,配置不同的数据源的时候<property name=“”/>要做相应更改 例如:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mesys"/>
<property name="user" value="root"/>
<property name="password" value="123456"/>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost/healthmanage?useUnicode=true&characterEncoding=UTF-8</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>123456</value>
</property>
</bean>
2、配置sessionFactory和transactionManager的时候Hibernate版本问题
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"
p:sessionFactory-ref="sessionFactory"/>
我的hibernate版本为4.1相应的上面配置的数字为4,有人hibernate是4以上,
配置成org.springframework.orm.hibernate3.LocalSessionFactoryBean,
这个果断出错;
3、现在的Spring版本不用在applicationContext.xml里面配置action,action使用的service注入问题,
现在有spring管理,你只要在action里面声明,并生成get/set方法即可
4、别忘了在web.xml里面配置applicationContext.xml的位置,否则读不出配置文件,假如applicationContext.xml在根目录下,配置为
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
三、Hibernate
只有一点,也是最坑爹的一点,Hibernate4.1 自动生成映射文件的时候 是错误的映射文件,需要改动的地方是:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd ">
hibernate-mapping-3.0.dtd后面有一个空格,需要删除才正确,否侧会爆出不能读取映射文件XML的错误。
而且你真找不到原因。你以为那是自动生成的肯定对的!
四、Java
java学得不好啊。。。内疚
hibernate查询结果为一个list,list里面的对象想要取出来用,假如对象为3列数据
//遍历list
for(Iterator<?> pit = mzList.iterator() ; pit.hasNext();){
// 把list里面的对象转为Object[]
Object[] objs = (Object[]) pit.next();
System.out.println(objs[0].toString());
System.out.println(objs[1].toString());
System.out.println(objs[2].toString());
}
当然 假如你的查询结果仅为 被查询表的几行数据,查询结果的结构和表一模一样,你就可以使用表的实体类,
强制转换list里的对象为表的实体类对象,直接使用对象里面的内容。
表TableA 对应实体类TableA 表的属性有 Name Sex Age
List<TableA> list = (List<TableA>) dao.findById();
for(int i = 0 ; i < list.size() ; i ++){
System.out.println(list.get(i).getName());
System.out.println(list.get(i).getSex());
System.out.println(list.get(i).getAge());
}