SSH
1.使用maven对项目的管理
Maven的生命周期:
clean(清理)--->compile(编译)--->test(测试)--->package(打包)--->集成测试--->验证--->部署
Maven的依赖范围:
用于指定maven在哪个生命周期范围内有效,我们平时开发项目,需要将jar导入classpath中
maven为我们提供了三种classpath: 编译 测试 运行
在scope标签中通过配置
score有6种:
1.compile:编译 测试 运行都有效
2.provided:在编译和测试有效,运行无效
3.runtime:在测试和运行有效,编译期间无效 如:jdbc的驱动类
4.test:只在测试范围有效 如: junit单元测试
5.system: 在编译和测试有效,但与本机系统关联,可移植性差
6.import:导入的依赖范围,它只使用在dependencyManagement中,表示从其它pom中导入
2.使用SSH完成后端框架的整体搭建
Model: 模型,存放实体类(对应数据库表中的实体类)
Dao: 数据访问层,主要做数据库的交互工作,把数据库中的数据永久的保存在硬盘中.
Service:管理具体的功能(做相应的业务逻辑处理),Action只负责管理,Service负责实施
Action:控制器,管理业务调度和管理跳转的.
从这里可以跳转到Service层,调用Service中的方法,可以对前端请求进行业务逻辑处理
Struts:控制界面和Action之间的关系
Hibernate:连接数据库操作,用的的Hibernate完成增删改查
使用Hibernate注解,可以不用配置Hibernate.hbm.xml
@Entity
@Table(name = "manager")
@Id
@GeneratedValue(strategy = Generation.IDENTITY) //主键自动递增
@Column(name = "mAccount")
四本一言:
dataSource.xml
sessionFactory.xml
org.hibernate.dialect.MySQL5InnoDBDialect
update
true
true
使用Spring注解进行依赖注入,不用配置beans.xml了
//在SpringIOC容器中指定一个Dao层的bean,如果value不指定默认该对象为id的类名,如果指定,id为value的值
@Repository(value = "userDao")
@Autowired //默认是byType
@Qualifier(value = "userDao") //配合上面的注解使用,byName
@Resource //javaEE提供的依赖注入的注解,1.6之后才可以使用
@Service(value = "userService")
@Controller(value = "userAction")
@Scope("prototype") //action是多例模式,需要经action设置为原型模式
使用Struts2注解,不需要配置struts.xml
//如果我们只是给前端返回数据,并不进行页面的跳转,package就继承自json-default
@ParentPackage("json-default")
@nameSpace("/user")
@Action(value = "queryRoom", results = {
@Result(name = "success",type = "json", params = {"root", "result"})})
3.管理员登录界面的国际化
(1)前端:
三大指令: page include taglib
1)将html文件转化为jsp文件
2)导入jsp标签库
3)用 标签
4)使用a标签
(2)Action.java
public class CCAction extends ActionSupport {
@Override
public String execute() throws Exception {
return SUCCESS;
}
}
(3)struts_loginAndRegister.xml
/loginAndRegisterForManager.jsp
4.使用ajax进行前后端的数据交互
$.ajax({
type: "post" , //请求方式
url: "请求的路径",
data: "向服务器传输的数据" ,
success: function(data){ //data: 接收服务器发送过来的数据
var code = data["code"];
var msg = data["msg"];
alert(code + ":" + msg );
}
});
5.使用秒滴云第三方短信验证码接口,实现员工忘记密码之后修改密码(根据用户名修改密码)
步骤:
1).部署好秒滴云第三方短信验证码接口 类名: IndustrySMS.
2). 员工忘记密码,通过账户名修改密码
2.1将账户名保存在session中
session.setAttribute("maccount",maccount);
2.2获取随机验证码并保存在session中
String verifyCode = IndustrySMS.getRandomNum(6);
session.setAttribute("verifyCode", verifyCode);
// 获取短信验证码
IndustrySMS.execute(manager.getMphone( ),verifyCode);
3)修改密码
//获取保存在session中的maccount和verifyCode
String maccount = (String) session.getAttribute("maccount");
String verifyCode = (String) session.getAttribute("verifyCode ");
4)当前端输入的验证码跟获取到的验证码一致时,修改密码
6.使用双ajax在添加顾客的时候上传图片
1)将顾客信息保存在session中,以便在修改顾客头像时使用.
session.setAttribute("custom",custom);
2)修改顾客头像
2.1获取前端传递过来的文件的种类
String fileType = file.getContentType().substring(0,5);
2.2得到要保存文件的相对路径
Strring path1 = session.getServletContext().getRealPath("/images");
2.3获取前端传递过来的文件名称
String path2 = file.getOriginalFilename();
2.4将相对路径和文件名拼接
String path = path1 + path2;
2.5将文件复制到目标路径下(存入服务器)
file.transferTo(new File(path));
2.6获取保存在session中的顾客信息
Custom custom = (Custom) session.getAttribute("custom");
2.7获取顾客账号
String caccount = custom.getCaccount();
2.8根据顾客账号修改顾客头像
map = managerService.updatecImg("images/"+path2,caccount);
7.受用SSM完成后端框架的整体搭建
Entity: 模型,存放实体类(对应数据库表中的实体类)
Dao: 数据访问层,主要做数据库的交互工作,把数据库中的数据永久的保存在硬盘中.
Service:管理具体的功能(做相应的业务逻辑处理),Controller只负责管理,Service负责实施
Controller:控制器,管理业务调度和管理跳转的.
从这里可以跳转到Service层,调用Service中的方法,可以对前端请求进行业务逻辑处理
基于注解的映射方式,实现对数据的增删改查,将sql语句写下注解的括号中
8.使用Restful分风格开发整个项目
Restful:符合REST约束风格和原则的应用程序或设计
HTTP的请求动作一般分为四种:
1)GET: 获取资源
2)POST: 添加资源
3)PUT: 修改资源
4) DELETE: 删除资源
前端的请求只能是GET或POST,所以需要将POST请求转化为PUT或者DELETE.
通过HiddenHTTPMethodFilter进行转化.
在前端发起请求时,添加一个参数 _method,将此参数的值指定为请求路径PUT/DELETE.
9.使用Mybatis一对多进行关联查询
1)Entiry:
在各自的实体中分别写和对方相关联的属性
2)在方表中增加一个字段作为外键,此外键是和一方的主键关联
3)Mybatis一方的配置文件中resultMap中
多方的配置文件中的resultMap中
10.在管理员登录的时候设置拦截器
通过拦截器获取客户机信息
(请求的URL地址, 请求的资源, 请求的URL地址中附带的参数,来访者的IP地址,来访者的主机名
使用的端口号,请求使用的方法,获取WEB服务器的IP地址,获取WEB服务器的主机号)
public class LoginInterceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
11.通过junit对各个功能进行测试
SSH:
public class MyTest {
@org.junit.Test
public void test() {
ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
Manager manager = new Manager();
manager.setmAccount("zhoushuai");
manager.setmPassword("12345678");
manager.setmName("道玄真人");
manager.setmSex("男");
manager.setmAge(68);
manager.setmPhone("15022527037");
manager.setmEmail("[email protected]");
manager.setmAddress("青云门");
ManagerAction action = context.getBean("managerAction",ManagerAction.class);
action.setManager(manager);
action.addManager();
SSM:
@Component
public class ServiceAndDaoTest {
@Resource
private ManagerServcieImpl service;
@Test
public void test() {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-mybatis.xml");
service = context.getBean(ManagerServcieImpl.class);
Custom custom = new Custom();
custom.setCaccount("dd123456");
custom.setCpassword("22222222");
custom.setCname("张三");
custom.setCage(20);
custom.setCphone("15022527037");
service.addCustom(custom);
}
视图:
创建一张虚拟的表,本质上是对基表的一条select查询语句
作用:
简化复杂的查询语句 限制数据访问
例如:
create or replace view view_myemp_20 as select * from myemp where deptno = 20;
索引:
允许直接访问数据表中某一行记录的树形结构,主要作用是为了提高查询效率
索引一般是基于表中经常要查询的某一列来创建
create unique index 索引名 on 表名(字段名)
触发器(可以看成是监听器)
数据库中于表相关的存储的一段PL/SQL程序,主要作用是用于监听表中的DML操作.
例如:
创建一个触发器,每当向myemp中插入一个新员工时,控制台会自动打印'成功插入员工'
create or replace trigger trigger_savenewemp
after insert on myemp
declare
begin
dbms_output.put_line('成功插入员工')
end;
/
触发器的使用场景:
1.复杂的安全性检查
2.数据的确认
3.数据库的审计
4.数据库的备份和同步
存储过程:
数据库中的一组提前编译的PL/SQL语句程序语句集
其中可以对数据一些通用复杂操作进行封装,只需要编译一次,以后每次执行不需要重复编译
可以反复调用,减少工作量
创建存储过程:打印helloword
create or replace procedure sayHello
AS
begin
dbms_output_line('helloworld')
end;
/
调用存储过程
begin
begin sayHello();
end;
/