java ssh ssm_SSH和SSM项目用到的技术点

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;

/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值