xsi="http:
//www.w3.org/2001/XMLSchema-instance"xmlns="xsi:
schemaLocation="id="WebApp_ID"version="3.0">
javaweb16ValidateDemo
index.jsp
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2
/*
2.struts.xml文件配置
对action的拦截及使用com.javaweb.action.RegisterAction处理。
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEstrutsPUBLIC
"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.3//EN"
"http:
//struts.apache.org/dtds/struts-2.3.dtd">
--定义register的Action,其实现类为com.javaweb.action.RegisterAction-->
--定义处理结果与视图资源之间的关系-->
/result.jsp
/register2.jsp
3.Action的实现
主要核心处理功能。
packagecom.javaweb.action;
//导入关键类
publicclassRegisterActionextendsActionSupport{
privateStringusername;
privateStringpassword;
privateStringrepassword;
//实现getter和setter以及构造器部分略
publicvoidvalidate(){
//判断用户名是否输入,如果输入了再判断格式是否正确
if(username==null||"".equals(username)){
this.addFieldError("username","用户名必须输入");
}elseif(!
Pattern.matches("\\w{6,20}",username.trim())){
this.addFieldError("username","用户名必须是字母和数字,长度为6到20之间");
}
//判断密码是否输入,如果输入了再判断格式是否正确
if(password==null||"".equals(password)){
this.addFieldError("password","密码必须输入");
}elseif(!
Pattern.matches("\\w{6,20}",password.trim())){
this.addFieldError("password","密码必须是字母和数字,长度为6到20之间");
}
//判断确认密码是否输入,如果输入了再判断格式是否正确
if(repassword==null||"".equals(repassword)){
this.addFieldError("repassword","确认密码必须输入");
}elseif(!
Pattern.matches("\\w{6,20}",repassword.trim())){
this.addFieldError("repassword","确认密码必须是字母和数字,长度为6到20之间");
}
//判断确认密码和密码是否相同
if(password!
=null&&repassword!
=null&&!
repassword.equals(password)){
this.addFieldError("repassword","确认密码和密码必须相同");
}
//判断年龄是否合法
if(age<0||age>130){
this.addFieldError("age","请输入有效的年龄");
}
//判断出生日期是否合法
Calendarstart=Calendar.getInstance();
Calendarend=Calendar.getInstance();
start.set(1900,1,1);
end.set(2010,1,1);
if(birth!
=null&&(birth.after(end.getTime())||birth.before(start.getTime()))){
this.addFieldError("birth","请输入有效的出生日期");
}
//判断邮箱地址是否合法
if(email!
=null&&!
"".equals(email)&&email!
=""&&!
Pattern.matches("[a-zA-Z][a-zA-Z0-9._-]*@([a-zA-Z0-9-_]+\\.)+(com|gov|net|com\\.cn|edu\\.cn)",email)){
this.addFieldError("email","请输入正确的邮箱地址");
}
}
publicStringexecute()throwsException{
returnSUCCESS;
}
}
4.运行结果
图1-2
实验二持久化层hibernate
1.实验类型
验证类型
2.实验目的
掌握hibernate访问数据库,以及对数据库进行操作。
3.实验要求
1.实现对product表的插入查询
2.编写product表的操作的junit的测试
4.实验内容
1.hibernate.cfg.xml文件配置
该文件是hibernate最重要的一个配置文件。
在这里配置了连接数据库的信息,比如数据库连接字符串,驱动,用户名,用户密码还有数据库方言等等。
还有指定映射文件。
DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD3.0//EN"
"
--数据库连接URL-->
jdbc:
mysql:
//localhost/javaweb
--数据库连接驱动-->
com.mysql.jdbc.Driver
--数据库用户名-->
root
--数据库用户密码-->
admin
--数据库方言-->
org.hibernate.dialect.MySQLDialect
--指定映射文件-->
2.实体类和映射文件
1.实体类product
packagecom.javaweb.ch17.hibernate;
publicclassProduct{
//产品ID
privateStringid;
//产品名称
privateStringname;
//产品价格
privatedoubleprice;
//对每一个属性设置getter和setter方法略。
}
2.映射文件Product.hbm.xml
xmlversion="1.0"?
>
DOCTYPEhibernate-mappingPUBLIC
"-//Hibernate/HibernateMappingDTD3.0//EN"
"
--每个class对应一个持久化对象-->
--id元素用来定义主键标识,并指定主键生成策略-->
--定义其他属性-->
3.创建数据库操作
在CreateDB.java文件是创建数据库的主入口。
importorg.hibernate.tool.hbm2ddl.SchemaExport;
publicclassCreateDB{
publicstaticvoidmain(String[]args){
//读取配置文件hibernate.cfg.xml
Configurationcfg=newConfiguration().configure();
//创建SchemaExport实例
SchemaExportsExport=newSchemaExport(cfg);
//创建数据库表
sExport.create(true,true);
}
}
4.Product的增删查
这个自定义实现一个操作操作的工具类。
publicclassHibernateUtil{
privatestaticSessionFactoryfactory;
static{
//读取配置文件hibernate.cfg.xml
Configurationcfg=newConfiguration().configure();
//创建SessionFactory
factory=cfg.buildSessionFactory();
}
//获得SessionFactory实例
publicstaticSessionFactorygetSessionFactory(){
returnfactory;
}
//获得Session实例
publicstaticSessiongetSession(){
returnfactory.openSession();
}
//关闭指定Session
publicstaticvoidcloseSession(Sessionsession){
if(session!
=null){
if(session.isOpen()){
session.close();
}}}
}
增加product的操作
publicclassInsertProduct{
publicstaticvoidmain(String[]args){
//创建Session
Sessionsession=HibernateUtil.getSession();
//开启事务
session.beginTransaction();
//实例化一个Product
Productproduct=newProduct();
product.setId("0511234");
product.setName("冰箱");
product.setPrice(1250.00);
session.save(product);//保存数据
session.getTransaction().commit();//事务提交
ibernateUtil.closeSession(session);
}
}
查询所有信息
publicclassQueryAllProduct{
publicstaticvoidmain(String[]args){
Sessionsession=HibernateUtil.getSession();
Productp=null;
Stringhql="FROMProductaspro";//使用HQL查询
Queryq=session.createQuery(hql);//通过Query方法查询
Listlist=q.list();//查询结果保存到list中
Iteratoriter=list.iterator();//遍历是否存在该id的产品,如果存在则进行输出
while(iter.hasNext()){
p=(Product)iter.next();
System.out.println("id:
"+p.getId()+"name:
"+p.getName()+"price:
"+p.getPrice());
}
//关闭session
ibernateUtil.closeSession(session);}
}
其他的删除和修改类似。
3.运行结果
完成插入删除后的结果。
实验三SSM整合实验
1.实验类型
验证类型
2.实验目的
掌握ssh的整合过程,能够使用ssh创建网站。
3.实验要求
1.使用hibernate实现数据库表的插入和查询
2.用Struts2实现RESTAPI
3.使用Spring实现service的注入。
4.实验内容
1.applicationContext.xml文件配置
xmlversion="1.0"encoding="UTF-8"?
>
--定义数据源Bean-->
com.mysql.jdbc.Driver
jdbc:
mysql:
//localhost/javaweb
root
admin
--定义SessionFactory-->
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
org.hibernate.dialect.MySQLDialect
false
com/javaweb/po/User.hbm.xml
--定义hibernateTemplate-->
--配置DAO组件-->
2.struts.xml文件配置
xmlversion="1.0"encoding="UTF-8"?
>
…..
--struts为配置文件根元素-->
--Action必须放在指定的包名空间中-->
--定义处理结果与视图资源之间的关系-->
/showAll.jsp
--定义处理结果与视图资源之间的关系-->
/showAll.action
--定义处理结果与视图资源之间的关系-->
/showAll.action
/add.jsp
/add.jsp
--定义处理结果与视图资源之间的关系-->
/s