SSH和SSM项目用到的技术点

xiaoxiao2025-04-26  10

SSH

1.使用maven对项目的管理

     Maven的生命周期:

   clean(清理)--->compile(编译)--->test(测试)--->package(打包)--->集成测试--->验证--->部署

     Maven的依赖范围:

            用于指定maven在哪个生命周期范围内有效,我们平时开发项目,需要将jar导入classpath中

            maven为我们提供了三种classpath: 编译 测试  运行

           在scope标签中通过<score></score>配置

          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

<!-- 配置数据源,数据库连接池配置 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <!-- 数据库驱动 --> <property name="driverClass" value="com.mysql.cj.jdbc.Driver"/> <!-- 数据库地址 --> <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/MHMS?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false"/> <!-- 数据库用户名 --> <property name="user" value="root"/> <!--数据库密码 --> <property name="password" value="12345678"/> </bean>

sessionFactory.xml

<!-- 配置hibernate session工厂类似于 cfg 配置 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- 其它配置 --> <property name="hibernateProperties"> <props> <!-- 数据库方言 --> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop> <!-- 自动建表 --> <prop key="hibernate.hbm2ddl.auto">update</prop> <!-- 控制台是否显示sql语句 --> <!--show_sql: 是否把hibernate运行的sql语句显示到控制台 --> <prop key="hibernate.show_sql">true</prop> <!-- format_sql:输出到控制台的sql语句是否进行排版,便于阅读 --> <prop key="hibernate.format_sql">true</prop> </props> </property> <!-- 交由spring注解扫描实体类,省去了以前hibernate的配置文件,自动生成数据表 --> <property name="packagesToScan" value="com.xalo.model." /> </bean>

使用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文件

<% page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

        2)导入jsp标签库

<%@ taglib prefix="s" uri = "/struts-tags"%>

       3)用 <s:text name = " "></s:text>标签

<s:text name = "loginName"></s:text>&nbsp; <input type = "text" id = "mAccount" placeholder = '<s:text name = "loginName"></s:text>'>

       4)使用a标签

<a href="aa.action?request_locale=zh_CN"><s:text name="chinese"></s:text></a> <a href="aa.action?request_locale=en_US"><s:text name="english"></s:text></a>

(2)Action.java

public class CCAction extends ActionSupport { @Override public String execute() throws Exception { return SUCCESS; } }

(3)struts_loginAndRegister.xml

<package name = "login" extends="json-default"> <action name="aa" class="com.xalo.action.CCAction"> <result name="success">/loginAndRegisterForManager.jsp</result> </action> </package>

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中的方法,可以对前端请求进行业务逻辑处理

        Mybatis:   @MapperScan指定要扫描mapper类的包的路径

              基于注解的映射方式,实现对数据的增删改查,将sql语句写下注解的括号中

                         @Update   @Select

                         @Inser       @Delete

<!-- 映射文件的导入 --> <!--注解的使用:在mybatis的配置文件中注册这个映射接口(注意是class) --> <mappers> <mapper class="com.yangsheng.dao.ManagerDao"/> </mappers>

8.使用Restful分风格开发整个项目

           Restful:符合REST约束风格和原则的应用程序或设计

             HTTP的请求动作一般分为四种:

                  1)GET: 获取资源

                  2)POST: 添加资源

                  3)PUT: 修改资源

                  4) DELETE: 删除资源

           前端的请求只能是GET或POST,所以需要将POST请求转化为PUT或者DELETE.

               通过HiddenHTTPMethodFilter进行转化.

           在前端发起请求时,添加一个参数 _method,将此参数的值指定为请求路径PUT/DELETE.

<form action = "testPut" method = "POST"> <input type = "hidden" name = "_method" value = "PUT"> <input type = "submit" value = "PUT"> </form>

9.使用Mybatis一对多进行关联查询

            1)Entiry:  

                   在各自的实体中分别写和对方相关联的属性

            2)在方表中增加一个字段作为外键,此外键是和一方的主键关联 

           3)Mybatis一方的配置文件中resultMap中

                 <collecation property = "集合的属性名" ofType = "集合元素的类型"></collecation>

                多方的配置文件中的resultMap中

           <association property = "一方的属性名" javaType = "属性类型" ></association>         

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("123456@qq.com"); 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;

/

 

 

 

 

 

  

 

              

 

 

 

 

 

 

 

 

 

 

 

 

           

 

 

 

 

 

 

 

 

转载请注明原文地址: https://www.6miu.com/read-5029148.html

最新回复(0)