SSM框架由Mybatis,spring,springmvc组成:
ORM:对象关系映射,为了解决面向对象和关系数据库互相不匹配的现象的一种技术
是我们在操作数据库的时候不用和复杂的sql打交道,而是像操作对象一样操作塔。
1.用于操作数据库的框架【替换咱们的jdbc】
2.代码更加简单 sql写在xml中
3.它的底层代码依然是jdbc
面试题:${}和#{}的区别?
如果要使用${}还要防止sql注入?
使用正则表达式过滤传入的参数
一种轻量级的DI/IOC和AOP的容器框架
(1)轻量级:使用简单,功能强大
(2)DI:依赖注入,将创建对象和关系维护(字段赋值)交给Spring容器去做
(3)IOC:控制反转,以前的某一个对象,用来控制其他对象,现在所有对象都被spring控制
(4)AOP:切面式编程,将业务逻辑从应用服务中抽离出来,以拦截的方式作用于一个方法的不同地方,比如日志和事务的处理。
注意:SpringMvc的功能就是之前Servlet的功能,可以理解为使用SpringMVC代替了Servlet;
面试题:1.springMVC执行流程:
2.springMVC里面用到的注解:
(1)@controller
(2)@Controller用户标记一个类,使用它标记的类就是一个Spring MVC Controller对象,即:一个控制器类。
(3)@RequestMapping是一个用来处理请求地址映射的注解(将请求映射到对应的控制器方法中),可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
(4)@Responsebody表示该方法的返回结果直接写入HTTP response body中。一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@Responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@Responsebody后,会直接返回json数据。
<!-- 监听器配置 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 服务器启动的时候加载spring的 配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 前端控制器 DispatcherServlet -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 加载springmvc核心配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-mvc.xml</param-value>
</init-param>
<!-- 启动即加载 ,优先级 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<!-- 会拦截请求 ,包括html,css 除了jsp 为了放行静态资源-->
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 配置filter解决字符集编码问题 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<!-- 拦截所有请求,都要处理字符集编码问题 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>/home/index.html</welcome-file>
</welcome-file-list>
(1)代码量减少了
(2)具有纵多的选择器供开发者使用
(3)独特的链式语法
(4)很多API都方法化了:以前原生js的API有的是属性有的是方法,jQuery中很多都是方法操作
用到了Ajax:
AJAX即Asynchronous Javascript And XML(异步JavaScript和XML),是改善用户体验的网页开发技术;
(1)写ajax代码就是写js代码;
(2)学习ajax其实是学习使用浏览器的ajax(XMLHttpRequest对象)对象发异步请求,将响应的数据局部更新到页面;
Ajax交互方式:
1.异步请求,发送请求的同时还可以继续操作页面。页面不销毁;
2.返回部分数据,减少不必要的数据传输,减少网络资源。页面不刷新,而是更新页面部分数据;
总结:Ajax出现的缘由:更好的提升用户的体验,以及提升服务器的效率,减少网络中不必要的数据的传送
//发送异步请求
$.ajax({
type:"post", //请求方式
url:"/city", //url映射路径
data:{"id":id}, //发送给后台的参数
dataType:"json", //后台返回值类型
success:function(msg){
})
})
它是一个 CSS,HTML 和 JS 的集合,它使用了最新的浏览器技术,给你的 Web 开发提供了时尚的版式,表单,buttons,表格,网格系统等等。
GridManager 可快速、灵活的对table标签进行实例化. 使用简单快捷, 功能强大
纯原生javascript实现,不依赖任何框架使用简单快捷,功能强大与用户进行沟通,采纳来自于使用的需求,并不间段的进行升级维护
富文本编辑器:ueditor,编写文章内容时有丰富的文本,需要引入文件,添加富文本框,再实例化富文本编辑器
页面静态化:FreeMarker页面静态化技术是通过模板生成静态页面的方法。之前是通过id去查询数据库,然后绑定到动态页面进行数据展示。现在我们在进行添加和修改时就生成静态页面,之后访问的就是静态资源,利于空间换时间。
分页功能,高级查询功能,增删改查功能参考文章模块
文件上传功能:文件上传三要素:(1)必须是post请求;(2)enctype="multipart/form-data";(3)type="file"
还需要配置文件上传解析器
登录按钮绑定事件,将数据传给后台,后台通过username查找user对象,如果user对象存在的话再比较password是否相同,相同则登录成功,返回user对象。控制层将user对象设置到session里面。用户登录还配置了拦截器,必须登陆了才能进入后台,拦截system/下的所有url,放行system/login。拦截的实现是判断session里面是否有user对象,有的话就放行,没有的话就跳转到登录界面。
发送请求到后台,后台销毁session。
如果勾选了记住我,后台就创建cookie,将用户名和密码以cookie的方式设置到浏览器保存,前台接收cookie,进行截取,将用户名和密码设置到用户框和密码框,然后勾选记住我;取消记住我,后台销毁cookie,重新添加到浏览器,前台清除数据,取消勾选记住我
面试题:session和cookie的区别?
cookie:数据保存在浏览器中,不安全,大小有限制,类型有限制,有中文乱码,减轻了服务器的压力
session:数据保存在服务端,安全,大小无限制,类型无限制,但是会影响服务器的性能
ajax发送异步请求到后台,在后台查询,后台按类型查询存入三个list集合,再将list存入map集合里,响应给前台,再分别取出来,添加到对应的标签下展示
ajax发送异步请求到后台,在后台查询,将数据响应给前台,添加到对应标签下进行展示。