1.基础概念
- MVC
控制器Controller | 参数请求 | |
视图View | 图形设计 | 页面显示 |
模型Model | 实现算法 | 业务逻辑 |
- 优点
低耦合性,高重用性,可适用性,可维护性
- 主要组件
前端控制器DispatcherServlet
处理器映射器HandlerMapping
处理器适配器HandlerAdapter
处理器Handler
视图解析器ViewReadver
- 常用注解
@RequestMapping:处理请求,url映射
@RequestBody:注解实现接受http请求的json数据,并转化为java对象
@ResponseBody:注解实现将controller方法返回对象转化为json对象响应给客户
2.转发与重定向区别
重定向:一件事务完成后,为了方便,让response对象发送另一个请求,重定向有两个url地 址,重定向不能携带参数,out.close()后不能重定向 return "redirect:index.jsp"
转发:一件事务没有完成,由于使用Servlet生页面的的过程十分繁琐,将页面的生成过程交 给 jsp技术类生成,此时携带数据到该jsp页面中,转发只有一次请求,转发同时携带参 数 return “forword:index.jsp"
- 地址
重定向的地址没有限制
转发的地址必须是同一个应用内部的某个组件(不能跨应用,不能跨服务器)
- 能否共享request
转发可以
重定向不行
- 浏览器地址栏的地址是否变化
转发不变
重定向会变
- 事件是否处理完毕
转发是一件事未做完 (交给JSP页面处理)
重定向是一件事已经做完 (一件事做完后,为了方便,直接跳转到另一页面)
3.ModelAndView和ModelMap的异同
- 都可以将数据封装显示到页面中
- ModelAndView可以指定跳转的视图,ModelMap不可以
- ModelAndView需要视图解析器,MadelMap不需要
4.SpringMVC工作原理
- SpringMVC将所有的请求提交给DispacherServlet
- DispacherServlet查询一个或者多个HandlerMapping,找到处理请求的Controller
- DispacherServlet将请求提交给Controller
- Controller进行业务逻辑处理,返回一个ModelAndView
- Dispacher查询一个或者多个ViewResolver视图解析器,找到ModelAndView对象指定的试图对象
- 视图对象负责渲染返回给客户端
5.乱码,过滤器
filter -> encoding utf-8 -> jsp ->pageEncoding utf-8
过滤器:servlet规范中定义的一种特殊类,用于servlet容器调用过程进行拦截
java类实现filter接口,重写doFilter,配置web.xml
6.拦截器
实现HandlerInterceptor接口 b.xml interceptor
7.编写Servlet
- 1.写一个java类,实现Servlet接口或者继承HttpServlet抽象类
- 2.重写service方法
- 3web.xml文件中配置所对应的Servlet类以及其对应的Mapping
- 4.写业务逻辑
8.servlet 运行原理
- 1) 建立连接 浏览器根据IP地址和端口号(port)和服务器建立连接
- 2) 打包 浏览器将请求数据按HTTP协议打成数据包(http 请求数据包) http 请求数据包包含“helloweb/sayHello”(请求资源路径)
- 3) 发送请求 浏览器向服务器发送请求数据包
- 4) 创建Request对象 Servlet引擎(Tomcat负责通讯的模块)创建请求对象(Request),方便我们自定义的Servlet 获得请求数据包中的内容 该对象符合HttpRequest接口
- 5) 创建Response对象 Servlet引擎(Tomcat负责通讯的模块)创建相应对象(Response) 该对象符合HttpResponse 接口
- 6) 创建HelloServlet 对象 服务器通过反射的方式创建Servlet实例
- 7) 调用Servlet 实例的service(request , response)方法
- 7.1)访问参数 在service()方法中访问Request对象,获得用户提交的一些参数
- 7.2)处理结果 在service()方法中将处理结果放入Response对象
- 8) 取数据 Servlet引擎从Response 对象中取出数据
- 9) 打包 Servlet引擎将取出的数据打包,该数据包符合http 协议要求
- 10) 发送响应 浏览器将响应数据包中的数据取出,生成界面
9.servlet生命周期
- Servlet 生命周期:Servlet 加载(实例化)--->初始化--->服务(service业务逻辑)--->销毁。
- init():在Servlet的生命周期中,仅执行一次init()方法
- service():它是Servlet的核心,负责响应客户的请求。
- destroy(): 仅执行一次,在服务器端停止且卸载Servlet时执行该方法。
10.get和post区别
- 使用非latin1字符,尽量使用post提交;如果上传文件,必须使用post
- 安全上来讲,post方式相对安全(因为请求参数及值存放在实体内容里面,而get方式会将请求方式及值显示在浏览器地址栏)但要注意,post方式并没有将数据加密
- get方式会将请求参数及参数值放在请求资源路径里面,携带的数据大小有限制,不适合提交大量的数据;post方式会将请求参数及参数值放在实体内容里面,理论上没有限制,适合大量数据的提交
- get 请求 超链接 post 请求 表单提交
11.JSTL标签库
- 核心标签
- 表达式控制标签
- out标签*
- set标签
- remove标签
- catch标签
- 流程控制标签***
- if标签
- choose标签
- when标签
- otherwise标签
- 循环标签
- foreach标签
- forTokens标签
- URL操作标签
- import标签
- url标签
- redirect标签
- param标签
- 表达式控制标签
12.JSP四大作用域
- application
- 在所有应用程序中有效
- session
- 在当前会话中有效
- request
- 在当前请求中有效
- page
- 在当前页面有效
13.jsp的内置对象(9个)
- request(形参)、
- 常用
- 获取客户端信息
- 常用
- response(形参)
- 常用
- 回传信息到客户端
- 常用
- 、out(JSPWriter)
- 常用
- 输出,向前台输出
- 常用
- session(HttpSession)
- 常用
- 会话期,从打开浏览器连接服务器到关闭浏览器
- 常用
- application(ServletContext)
- 服务器开启到关闭
- exception(Throwable,需要指定当前页面的isErrorPage='true')
- ion字辈儿
- 获取异常信息
- ion字辈儿
- page(Object)、
- pagecontext(PageContext)、
- config(ServletConfig)
- 获取服务器配置信息
14.session和cookie的区别
- session数据放在服务器上,cookie数据放在客户端浏览器
- session安全,cookie别人可以解析本地,不安全
- cookie大小有限制,可以禁止
15.JDBC
- 是什么
- Java DATe BaseConnectivity
- 加载驱动
- Class.forName('com.mysql.jdbc.Driver')
- 三个接口
- Connection
- DriverMannager.getConnection(url,username,password)
- Statement
- conn.createStatement
- PreparedStatement
- conn.preparedStatement(sql)
- 用来设置SQL语句中有的参数:?
- 防止SQL注入
- delete from t_user where id=1 or 1=1;
- 用来设置SQL语句中有的参数:?
- prep.setObject(下标从一开始,值)
- conn.preparedStatement(sql)
- ResultSet
- stmt.executeQuery(sql)
- while(rs.next()){ rs.getInt('id')+ rs.getString('username') ...}
- Connection
16.ajax的交互流程有哪几步?
1)创建ajax对象
xhr = new XMLHttpRequest
2)规定请求地址
xhr.open(method,url,async)
3)等待服务器相应
xhr.onload
4)向服务器发送请求
xhr.send()
17.介绍一下XMLHttpRequest对象,他有哪些常用方法和属性
XMLHttpRequest是ajax的核心,通过XMLHttpRequest对象,Web开发人员可以在页面加载以后进行页面的局部更新
常用的方法:
open(get/post,url,是否异步)创建http请求
send()发送请求给服务器
setRequestHeader()设置头信息(使用post才会用到,get并不需要调用该方法)