基本格式,如:
JavaBean对象User{id:int; name:String}
访问属性的方式为:
#user.name
ActionContext中的对象:
获取application中的对象:
#application.name或#application.['name']
获取request中的对象:
#request.name或#request.['name']
获取session中的对象:
#session.name或#session.['name']
获取parameters中的对象:
#parameters.name或#parameters.['name']
获取attr中的对象:
#attr.name或#attr.['name']
在JSP页面中获取对象的属性:
或
注意:Struts2的JSP页面需要导入标签库:
<%@taglib prefix="s" uri="/struts-tags"%>
静态属性的调用方法如下:
//通过@符号来标注
@com.michale.djh.Bean@NAME
注意:默认情况下,struts2不允许调用静态方法,需要在struts.xml文件中手动开启
访问集合:
Map集合:键值对形式,通过key访问value:
map.key 或 map.['key']
获取所有的Key和value:
map.keys //获取所有的Key
map.values //获取所有的value
集合的操作:
collection.isEmpty//判断集合元素是否为空
colloection.size()//获取集合的长度
投影与选择:
投影:对集合中列的操作,指将集合中的某一列数据都抽取出来形成一个集合,如:
#list.{name} //获取一个包含多个学生对象集合的所有学生姓名
选择:对集合中行的操作,指通过一定的条件获取集合中满足这一条件的的数据,所获取的行就是对集合中数据的选择操作,如:
#list.{?#this.age>10}//获取所有年龄大于10的所有学生,"?"表示满足这一条件的所有对象
数据标签:
set:用于定义一个变量,可以为所定义的变量赋值及设置变量的作用域(application、request、session),set标签属性:
set标签用法:
push:用于将对象或值压入到值栈中并放置到顶部,简化操作,用法如下:
include:类似于JSP的include标签,添加了可以在目标页面中通过param标签传递请求参数的功能,用法如下:
<%@include file="/pages/common/admin.jsp"%>
控制标签:
if:
使用方式:
//test属性用于设置标签的判断条件,其值为布尔类型的条件表达式,如:
expression1
expression2
...
expression3
验证文件的编写风格:
字段验证器编写格式: 如:验证用户名与密码(注意xml文件需要指定编码格式),其中name为需要检验的字段
Please Input user name
Please Input password
非字段验证器编写格式: 如:用户名与密码验证
password
username
Please Input text
案例:
index.jsp:
User Register
struts.xml:
success.jsp
UserAction.java:
public class UserAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private String name;
private String password;
private String description;
private int sex=0;
private String province;
private String[] hobby;
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return SUCCESS;
}
//Getter and Setter method
......
}
struts.xml:
success.jsp
login.jsp
success.jsp
web.xml:
Struts 2 Rest Example
login.jsp
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2
/*
Hibernate通过读取默认的XML配置文件hibernate.cfg.xml加载数据库的配置信息,该配置文件被默认放于项目的classpath根目录下,如:
//连接应用的MySQL数据库
com.mysql.jdbc.Driver
root
java
org.hibernate.dialect.MySQLDialect //Hibernate方言
true
//打印SQL语句
//映射文件
Hibernate映射:
映射文件的命名规则为:*.hbm.xml,如(User对象配置):
//持久化类的唯一标识
Hibernate数据持久化:
Hibernate工具类,避免Session的多线程共享数据问题, SessionFactory的获取:
Configuration configuration = new Configuration.configure();
SessionFactory factory = configuration.buildSessionFactory();
HibernateUtil.java:(用于初始化Hibernate)
public class HibernateUtil{
private static final ThreadLocal threadLocal = new ThreadLocal();
private static SessionFactory sessionFactory = null;
static{
try{
Configuration configuration = new Configuration.configure();
sessionFactory = configuration.buildSessionFactory();
}cathc(Exception e){
e.printStackTrace();
}
}
//get Session
public static Session getSession() throws HibernateException(){
Session session = (Session)threadLocal.get();
if(session == null || !session.isOpen()){
if(sessionFactory == null){
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession : null;
threadLocal.set(session);
}
return session;
}
public static void rebuildSessionFactory(){
try{
Configuration configuration = new Configuration.configure();
sessionFactory = configuration.buildSessionFactory();
}cathc(Exception e){
e.printStackTrace();
}
}
//get SessionFactory
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
//close Session
public static void closeSession() throws HibernateException{
Session session = (Session)threadLocal.get();
threadLocal.set(null);
if(session != null){
session.close();
}
}
}
数据保存:
数据的持久化过程:
application->Configuration->SessionFactory->Session->数据操作->正常commit,失败rollback->close()
开启事务:
session.beginTransaction();
执行数据库添加操作:
session.save(user);
事务提交:
session.getTransaction().commit();
事务回滚:
session.getTransaction().rollback();
查询数据:Session对象提供了两种对象装载的方法,即get()与load()方法
如:
User user = (User)session.get(User.class, new Integer("1"));
String name = user.getName();
String sex = user.getSex();
...
延迟加载: load方法或者设置property元素的lazy属性,如:
Hibernate缓存:
利用EHCache作为Hibernate的二级缓存的配置,如:(查询产品信息)
hibernate.cfg.xml:
...
true //开启二级缓存
org.hibernate.cache.EhCacheProvider
在持久化类的映射中需要指定缓存的同步策略,关键代码如下:
//指定的缓存的同步策略
...
缓存的配置文件放在classpath目录下ehcache.xml(在Hibernate的zip包下的etc目录中可查看到),代码如下:
实体关联关系映射:
多对一单向关联:
product与factory表:
tb_product{id, name, price, factoryid}
tb_factory{factoryid, name}
在产品对象的映射文件中建立多对一的关联,代码如下:(Product类引用Factory类)
//id 值
//product name
//product price
//多对一关联映射
//映射字段
多对一双向关联:
Product与Factory类:
Product{int:id, String:name, double:price, Factory:factory}
Factory{int:factoryid, String:factoryName, Set:products}
映射代码:
//id 值
//product name
//product price
//定义一多映射
级联操作:
映射文件的配置,如:
...
HQL(Hibernate Query Language):Hibernate查询语言
HQL的基本语法:
select "对象.属性名"
from "对象"
where "过滤条件"
group by "对象.属性名" having "分组条件"
order by "对象.属性名"
如:
select * from Employee emp where emp.flag='1'
等价于
from Employee emp where emp.flag='1'
通过from子句查询指定字段数据,如:
select Person(id, name) from Person per
如:查询Employee对象的所有信息
List employees = new ArrayList();
Session session = null;
session = HibernateUtil.getSession();
String hql = "from Employee employee";
Query query = session.createQuery(hql);
employees = query.list();
HibernateUtil.closeSession();
HQL参数邦定机制:
HQL提供动态赋值的两种实现方式:
利用顺序占位符”?”替代具体参数,如:(类似于JDBC中的PreparedStatement对象的操作方式)
//查询性别为"male"的员工信息
session = HibernateUtil.getSession();
String hql = "from Employee employee where employee.sex=?";
Query query = session.createQuery(hql);
query.setParameter(0, "male");
employees = query.list();
利用引用占位符”:parameter”替代具体参数,引用占位符是”:”与自定义参数名的组合,如:
session = HibernateUtil.getSession();
String hql = "from Employee employee where employee.sex=:sex";
Query query = session.createQuery(hql);
query.setParameter("sex", "male");
employees = query.list();
排序查询:使用的是对象的属性,如:
//以年龄从小到大排序
from Employee employee order by employee.age desc
聚合函数,类似于SQL,如:
select avg(employee.age) from Employee employee
Spring内置了日志组建log4j.jar,所以在使用Spring之前需要对log4j进行简单的配置,即在src根目录下创建log4j.properties 属性文件,代码如下:
#输出级别,输出错误信息,输出源为标准出源stdout
log4j.rootLogger=WARN.stdout
#将stdout输出到控制台
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#日志输出的布局类
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#指定日志输出内容的格式
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c]-%m %n
使用BeanFactory管理bean
BeanFactory通过从XML配置文件或属性文件中读取JavaBean的定义,来实现JavaBean的创建、配置和管理,其中XmlBeanFactory可以通过流行的XML文件格式读取配置信息来装载JavaBean,如:
Resource resource = new ClassResource("applicationContext.xml");
BeanFactory factory = new XmlBeanFactory(resource);
Test test = (Test)factory.getBean("test");
applicationContext.xml:
Spring中bean的生命周期:
实例化JavaBean、初始化JavaBean、使用JavaBean、销毁JavaBean
依赖注入:IoC(Inversion of Control):控制反转,依赖注入
依赖注入的三种实现类型(Spring支持后两种):
Setter注入,如:
package com.michael.djh.User;
public class User{
private String name;
private Integer age;
//Getter与Setter方法
...
}
则Spring的配置文件applicationContext.xml为:
Michael
20
主程序如下即可获取bean对象:
Resource resource = new ClassPathResource("applicationContext.xml"); //load configuration file
BeanFactory factory = new XmlBeanFactory(resource);
User user = (User)factory.getBean("user"); //user.getName()、user.getAge()即可得到值
Srping 设置singleton模式的三种方式:(对bean请求方式类似于静态的getInstance()方法)
//默认的即为singleton作用域
Spring IoC设置prototype的两种方式:(对bean的请求类似于new对象,每次都会重新创建一个新的)
//设置singleton的值为false
Spring AOP:(面向切面编程)
Spring的DAO理念:
事务应用管理:
创建XML文档对象:
Document document = DocumentHelper.createDocument();
或者
Document document = DocumentFactory.getInstance().createDocument();