一、JSP执行过程
1.客户端发出Request请求
2.JSP Container将JSP转译成Servlet的源代码
3.将产生的servlet源代码经过编译后,加载到内存执行
4.把结果response(响应)至客户端
二、JSP页面组成
jsp页面主要由6大元素组成:(静态内容、指定、表达式、scriptlet、声明、动作、注释)指令、注释、脚本元素、声明、表达式、静态内容(HTML元素)或
脚本元素包括表达式<%、Scriptlet<%=、声明<%!
JSP指令包括:
Page(页面指令、用于定义真个JS页面的一些属性和这些属性的值,定义MIME类型、定义需要导入的包、错误页指定、页面编码、脚本语言等)
Include(静态包含、在编译之前已经做了处理)、即先将要包含的文件嵌入相应的JSP页面、再统一转化成一个servlet类
Taglig(将标签描述符文件tld引入该页面,用户自定义标签)
- 内置对象
九大内置对象Request、responese、out、page、pageContext、session、application、config、exception
Request对象用于接收客户端发送来的请求信息、客户端的请求信息被封装再request对象中,HTTPServletRequest的实例,常用方法可以获取参数、设置参数、获取HTTP通信协议信息
Response对象用于对客户端请求进行响应,将WEB服务器处理后的结果发回给客户端。HTTPServletResponse的实例,常用方法可以设置文件头信息、设定页面重定向以及设置缓冲区信息等。
- Session与applicaiton的区别
Session作用范围为一段用户持续和服务器连接的时间,但与服务器断线后、属性就无效了,并且存在一定的超时时间,可以进行设置。
application它类似于系统的全局变量,用于保存所有程序中的公有数据。它在服务器启动时自动创建,在服务器停止时销毁。当application对象没有被销毁的时候,所有用户都可以享用该application对象。它的生命周期可以说是最长的。
- 什么是JAVAbean
软件项目中可以重复利用的组件。Javabean是基于JAVA语言、实际上是一种JAVA类,能够封装属性和方法并且具有某种功能或者处理某个业务的对象,简称Bean。
- 实现了代码的重复利用
- 易编写、维护、使用
- 可以在任何安装了JAVA运行环境的平台使用、而不需要重新编译
六、静态和动态包含的区别
1.最终编译成java文件的数目不同。(从上面的例子可以看出)
静态包含在转换成为java文件的时候将包含文件的内容“复制”到主体文件,然后作为一个整体编译。最终编译为一个java文件。
动态包含是各个jsp文件分别转换,分别编译。最终编程成多个java文件。
2.执行时间不同
静态包含发生在:JSP---->java文件阶段。
动态包含发生在:执行class文件阶段。动态加入。
3.静态包含在两个文件中不能有相同的变量,动态包含允许。
由于静态包含相当于将包含文件内容直接复制到主体文件中,如果出现相同的变量,就会出现覆盖等问题,导致文件出错。而动态包含相当于调用不同的jsp,变量所在的空间不同,自然不会出现覆盖等现象。
4.<%@ include file=” ”%>是指令元素。<jsp:include page=” ”/>是行为元素
七、请求转发和重定向区别
一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理(服务器内部的调用),称之为请求转发
一个web资源收到客户端请求后,通知浏览器去访问另外一个web资源(浏览器进行2次请求),称之为请求重定向
请求重定向和请求转发的区别
一.forward是服务器内部转发,而redirect是通过客户端进行转发
二.如果用forward进行转发的话,客户端的url地址不会改变,但是如果用redirect的话,则url地址会改变
三.如果用forward进行转发,转发页面和被转发页面处于一个request请求内,而redirect不是。
八、JSP基本动作
JSP共有以下6种基本动作 jsp:include:在页面被请求的时候引入一个文件。 jsp:useBean:寻找或者实例化一个JavaBean。 jsp:setProperty:设置JavaBean的属性。 jsp:getProperty:输出某个JavaBean的属性。 jsp:forward:把请求转到一个新的页面。 jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。
九、servlet生命周期
Init、service、destory
Servlet 通过调用 init () 方法进行初始化。
Servlet 调用 service() 方法来处理客户端的请求。
Servlet 通过调用 destroy() 方法终止(结束)。
最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。
十、MVC设计模式
视图层用jsp,javascript
作用--显示数据,接受用户输入数据
控制层用servlet
作用--接收视图层数据,传输 给业务逻辑层(即模型层)
模型层用普通java class
作用--业务类的实现,如:数据库操作
M(DAO)层,就相当于后台,
V(jsp),相当于前台,
C(control)层,相当于控制页面跳转;
MVC模式的目的就是实现Web系统的职能分工。
Model层实现系统中的业务逻辑,通常可以用JavaBean或EJB来实现。
View层用于与用户的交互,通常用JSP来实现。
Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。
M:hibernate、mybatis、ibatis
C:severlet、struts、spring、action
V:jsp、FreeMarker、tails、taglib、EL、Velocity
十一、实现Servlet三种方法
开发Servlet有三种方式:
1、实现Servlet接口
2、通过继承GenericServlet
3、通过继承HttpServlet
十二、JDBC使用预处理语句的好处
1、执行效率:Statement 采取直接编译 SQL 语句的方式,扔给数据库去执行,而 PreparedStatement 则先将 SQL 语句预编译一遍,再填充参数,这样效率会高一些。JDK 文档说:SQL 语句被预编译并且存储在 PreparedStatement 对象中,其后可以使用该对象高效地多次执行该语句。
2、代码可读性:Statement 中 SQL 语句中需要 Java 中的变量,加就得进行字符串的运算,还需要考虑一些引号、单引号的问题,参数变量越多,代码就越难看,而且会被单引号、双引号搞疯掉;而 PreparedStatement,则不需要这样,参数可以采用“?”占位符代替,接下来再进行参数的填充,这样利于代码的可读性,并且符合面向对象的思想。
- 安全性:Statement 由于可能需要采取字符串与变量的拼接,很容易进行 SQL 注入攻击,而 PreparedStatement 由于是预 编译,再填充参数的,不存在 SQL 注入问题。
- JDBC基本步骤
Class.forName(“oracle.jdbc.driver.OracleDriver”)
1)加载驱动程序。Conn=DriverManager.getConnection(“jdbc:oracle:thin:@localhost:1521:orcl”,username,Password)
2)建立连接。Stmt=conn.creatStatement()’
3)创建语句。预处理他,.prepareStatement(sql);
4)执行语句。Rs=Stmt.excuteUpdate(sql)
5)处理ResultSet。While(rs.next())