Java Web整理
- servlet生命周期
init service destroy方法
Servlet在被容器初始化后,容器运行其init方法,请求到达时运行service方法,service方法会自动派遣运行与请求对应的doxx方法,当服务器决定将实例销毁的时候调用其destroy方法
- forward和redirect的区别
- forward 服务器处理,调用其他的地址将结果返回给浏览器 一般用于用户登录的时候,根据角色转发不同的对应的模块
- redirect 浏览器处理 301 302 返回重定向的地址 用于注销登录和跳转页面等
- request的 getAttribute和getParameter的区别
- parameter是通过容器来实现获取请求传递过来的参数 请求数据
- attribute 只在web容器中内部流转 仅仅是请求处理阶段 setAttribute getAttribute 必须在同一个request中使用才有效
getAttribute返回的是对象,getParameter返回的是字符串
- jsp动态包含和静态包含的区别
<% file="xx.jsp"%>为jsp中的编译指令,其文件的包含是发生在jsp向servlet转换期间,而<jsp:include page="xx.jsp">是jsp中的动作指令,其文件的包含是发生在编译期间,也就是将Java文件编译为classl文件的时期
使用静态包含只会产生一个class文件,而使用动态会产生多个class文件
使用静态包含,包含页面和被包含页面的request对象为同一个对象,因为静态包含只是将被包含页面的内容复制到包含页面中区去
动态包含 包含页面和被包含页面不是同一个页面,被包含页面的request对象可以取得的参数范围相对大一点,不仅可以取得传递到包含页面的参数,同样也可以取得在包含页面向下传递的参数
- MVC 的部分
Model-View-Controller
Model 应用的业务逻辑 通过JavaBean EJB来实现
View 应用的界面
Controller 提供应用的处理过程控制 一般是servlet
-
jsp 9个内置对象 作用
- request 用户端请求
- response 相应
- pageContext 网页的属性在这里管理
- session 会话
- application servlet正在执行的内容
- out 用来传送回应的输出
- config servlet的构架部件
- page jsp本身
- exception 针对错误页面,未捕捉的例外
-
什么是cookie cookie和session的区别
Cookie是会话技术,将用户的信息保存到浏览器的对象
区别:
- cookie数据存放在客户的浏览器中,session放在服务器上
- cookie不是很安全 单个cookie有限制3K
结论:一般讲登录等重要信息存放在session中
- jsp和servlet的区别,共同点,各自应用的范围?
jsp是servlet的技术扩展,本质上及时servlet的简易方式 jsp编译后类servlet
不同点:
servlet的应用逻辑是在Java文件中,并且完全从表ishi曾中HTML中脱离出来 servlet重于控制逻辑 jsp的情况是Java和html组合 扩展名为jsp的文件 jsp重视图
- tomcat容器是如何创建servlet类实例的?用到了什么原理?
当容器启动时,会读取在webapps目录下所有的web应用中的web.xml文件,然后对xml文件进行解析,并读取servlet注册信息。然后将每个应用中注册的servlet都进行加载,通过反射的方法实例化(也可以在第一次请求的时候实例化)
在servlet注册时加上 <load-on-startup/> 1 <load-on-startup/> 正数,则在一开始实例化 不写或者负数在第一次请求的时候实例化
-
JDBC访问数据库的基本步骤?
- 加载驱动
- 通过DriverManager对象获取连接对象Connection
- 通过连接对象获取会话
- 通过会话进行数据的增删改查,封装对象
- 关闭资源
JDBC的DriverManager是一个工厂类,我们通过他来创建数据库连接。当JDBC的Driver类被加载进来的时候,他会自己注册到DriverManager类里面
然后我们会把数据库配置信息传到DriverManager.getConnection()方法,DriverManager会使用注册到他里面的驱动来获取数据库连接,并返回给调用的程序
- preparedStatement和Statement的区别
效率
安全:可以有效的避免sql注入攻击
- 事务相关的概念
事务作为单个逻辑工作单元执行的一系列操作
事务的四个属性:原子性 一致性 隔离性 持久性 ACID 只有这样才能成为一个事务 事务处理步骤
conn.setAutoCommit(false) 设置为手动提交
conn.commit() 提交事务
conn.rollback() 事务回滚
13. 脏读是什么?哪种数据库的隔离级别能防止脏读?
更新的数据还没有进行持久化的时候被另一个查询读到,更新的数据可能会进行回滚 这样这个数据就是无效的 脏读
防止脏读:
TRANSACTIONREADCOMMINTED read commited
TRANSACTIONREPEATABLEREAD repeatable read
TRANSACTION_SERIALIZABLE serializable
数据库四种隔离级别
- serializable 串行化 可避免 脏读 不可重复读 幻读的发生
- repeatable read 可重复读 可避免脏读 不可重复读的发生
- read commited 读已提交 避免脏读
- read uncommited 最低级别 任何情况都无法保证
数据库事务四大特性
- 原子性 要么全完成要么全不完成
- 一致性 数据库从一个一致性状态变换到另一个一致性状态
- 隔离性 多个用户并发访问数据库时,数据库为每个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离
- 持久性 事务一旦提交 对数据库中的数据改变就是永久性的
如果不考虑事务的隔离性会导致以下问题
- 脏读 在一个事务的处理过程中读取了另一个未提交的事务中的数据
- 不可重复读 一个事务范围内多次查询返回了不同的数据值
- 虚读 幻读 幻读和不可重读都是读取了另一条已经提交的事务(这点和脏读不同),所不同的是不可重复读查询的是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)
execute execteQuerry executeUpdate的区别 * Statement的exectue方法用来执行任意的SQL查询 * execteQuerry 用来执行SQL的select查询 * executeUpdate 用来执行insert和update、delete语句
- SQL分页查询
ORACLE between
select * from(select *,rownum as tempid from table) twhere t.tempid between "+ pageSize*(pageNum-1)+"and"+pageSize*pageNum;
MySQL limit 起始数和每页个数
select * from table limit" + pageSize*(pageNum-1)+","+ pageSize";
sql Server
select top ” + pageSize + ” * from students where id not in +(select top ” + pageSize * (pageNumber-1) + id from students order by id) +“order by id;
- JDBC 的ResultSet是什么?
在查询数据的时候会返回一个ResultSet,他就像查询结果集中的一张数据表
ResultSet对象维护了一个游标,指向当前的数据行。开始的时候这个游标指向的是第一行 next()方法下移一行
如果下一行没有数据返回false 可以使用for循环遍历所有的数据集
- Spring bean的作用域
- singleton bean在Spring IOC容器中只有一个实例 缺省 默认
- prototype 一个bean的定义可以有多个实例
- request 每次请求都会创建一个bean
- session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效
- global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
- Spring中如果注入一个Java集合
list
set
map key/value 键值都可以是任意类型
props key/value必须都是Sting类型