JSP常见知识点
1、转发和重定向的区别是什么
转发是在项目内部资源页面跳转,转发是继续传递请求(效率高),转发是通过request实现,转发后地址栏不改变
request.getRequestDispatcher(“页面名”).forward(request,response);
重定向可以跳转到任何页面,重定向是新的请求(效率不如转发),重定向是通过response实现,地址栏会改变
response.sendRedirect(“页面名”);
request.setAttribute(“名字”,值);
response.sendRedirect(“xxx.jsp”);
注意:下一个页面无法取出request中存储的数据,因为是新的请求
2、http提交请求有哪两种方式,区别是什么?
get/post
区别:get可以在地址栏显示传递的数据(不安全),get有长度限制,只能传递文本数据,效率高于post
Post传递的数据不会在地址栏显示(安全),post无长度限制,能传递任何数据,效率低于get
Servlet中接收请求后一定会执行的方法是以下哪个(C)
A.doGet() B.doPost() C.service() D.init()
如果一个servlet冲存在doGet、doPost、service三个方法,那么只会执行service
3、Spring的核心思想有哪两个技术点
Spring核心思想:IOC、AOP
IOC:控制反转/依赖注入(DI),将对象之间的关系在编码外的配置文件中进行配置
AOP:面向切面编程设计,将项目中的共性问题抽离出来集中解决
4、Sql中声明变量的语法是什么?赋值有哪两种方式
declare @变量名 类型
Delare @name varchar(30)
Set @name = ‘jack’ 赋予固定值,同时只能给1个变量赋值
Select @name = ‘jack’ 可以给多个变量赋值,一般是将查询的结果赋值给某变量,如:
Declare @myCount int = 0;
Select @myCount=count(*) from 表
5、ORM是什么?Hibernate是一种什么技术
ORM:对象关系映射 将类和数据库的表进行映射关联,操作类对象时,自动根据映射去产生sql语句及jdbc代码
Hibernate是一种实现了ORM思想,封装了jdbc的一种数据库操作技术
6、Struts2的控制器分哪两种?
1)核心控制器(StrutsPreparedAndExecuteFilter)
它是一个过滤器,负责处理所有的请求
2)业务控制器(平时自己建立的XXXXAction类)
Struts2中的每个请求都会创建对应的Action实例
7、Struts2的Action如何完成配置(写出大概的框架例子即可)
<package name=”包名” extends=”struts-default” namespace=”访问的路径”>
<action name=”访问名” class=”包名.类名”>
<result name=”名字” type=””>页面</result>
</action>
</package>
页面返回的类型:
Dispatcher(默认,转发)
Redirect(重定向)
redirectAction(重定向到其他Action)
8、IOC是什么?代表什么意思,有哪两种注入方式?
IOC:控制反转/依赖注入(DI),将对象之间的关系在编码外的配置文件中进行配置(降低耦合)
Set注入
构造注入(时机更早一些)
<bean id=”emp” class=”com.scme.Employee”>
<property name=”age” value=”20” />
</bean>
以上property说明,Employee类中一定有一个setAge方法
9、AOP是什么意思,代表什么意思?有哪几种通知类型
AOP:面向切面编程设计,将项目中的共性问题抽离出来集中解决
Aop是面向对象的补充扩展,不是替代。Aop是横向的设计,面向对象是纵向
前置通知
后置通知
环绕通知
异常通知(拦截目标方法的执行)
AOP主要是通过”代理”设计模式实现,代理有两种方式:
1)>jdk动态代理(默认)
2)>cglib类代理方式
10、Hibernate中的对象有哪几种生命周期状态
瞬时(临时):刚new的对象
持久化:调用save、load、get等方法
游离:session.close session.clear session.evict
11、SSH中几个常用bean的注入方式是什么?如DataSource注入给谁。
DataSource-->sessionFactory-->Dao--->Service--->Action
当我们的Dao继承HibernateDaoSupport后,那么必须要注入sessionFactory
12、<jsp:useBean是什么意思,完成一个完整的写法例子,它的存储范围有哪几个
<jsp:useBean id=”对象名” class=”包名.类名” scope=”request” />
等价于在jsp中:
<%
类名 对象名 = new 类名();
%>
Scope代表该对象存在的范围
Page --当前页面范围有效
Request --转发后的下一个页面有效
Session --整个会话范围
Application ---整个项目范围(全局、最大)<网页的计数器>
13、Hibernate中cascade是什么意思,有哪几个取值
Cascade级联操作
取值:all save-update delete none
14、Hibernate中延迟加载的属性是什么?=true和=false什么意思,默认是什么
Lazy=”true” 延迟 -------默认
Lazy=”false” 不延迟(立即)
15、Hibernate中setFirstResult和setMaxResult是什么意思
setFirstResult(数字)---从第几条开始取,下标从0开始
setMaxResult(数字)---取多少条记录
setFirstResult(4), 从第5条开始取
setMaxResult(8), 取8条记录
16、Page、request、session、application的存储作用域分别是什么
Page --当前页面范围有效
Request --转发后的下一个页面有效
Session --整个会话范围(不同的客户端有不同的session)
Application ---整个项目范围(全局、最大)<网页的计数器> 不同的项目有不同的application
17、Struts2中的XXXAction中如何访问request、session、application对象
HttpServletRequest req = ServletActionContext.getRequest();
HttpSession session = req.getSession();
ServletContext application = ServletActionContext.getContext();
18、SSH中需要改变那些配置文件,分别改变那里是做什么用的?
如监听器:在那里配置,如何配置
Web.xml: Struts2的核心控制器和监听器
Struts.xml: 配置Struts2的属性和配置action
applicationContext.xml:配置对象之间的依赖关系
Hibernate.cfg.xml:配置hibernate的属性
实体类.hbm.xml:实体类和数据库表的映射信息
19、为了规范Struts中的Action写法,一般我们会实现哪个接口或者继承哪个类
Action接口
ActionSupport类
20、Servlet的生命周期是什么,分别在什么时候执行。
加载 --服务器启动时
实例化 ---第一次请求时
初始化(init) ---第一次请求时
服务(service--doGet/doPost) ---每次请求时
销毁(destroy) ---服务器停止时
Servlet完成后需要在web.xml中配置其访问路径,否则无法使用
<servlet>
<servlet-name>名字</servlet-name>
<servlet-class>包名.类名</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>名字和上面对应</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
那么要进入该servlet,则请求最后要提交的就是/test,如项目名是book,那么访问为:
http://ip:端口/book/test 即可访问该servlet
21、Jsp的执行原理是什么?为什么第二次访问jsp页面时比第一次访问要快
Jsp----翻译(转义)成java---编译成class,最终运行这个class,向客户端输出静态的html
因为jsp页面第一次访问时,需要转义和编译的过程,第二次就不需要了.
22、]>javaWeb中的MVC指什么,Model1时期时控制器是谁,Model2时期时控制器是谁
MVC:设计模式
Model 模型 javabean(实体类、Dao、service类)
View 视图(jsp)
Controller 控制器(servlet)
Model1:最早时期的javaweb应用,控制器jsp担任
Model2:目前,控制器servlet、Action
23、现在有班级表(ClassInfo)和学生表(StudentInfo),其中学生表中有一个claId为该学生所在的班级ID(外键),现在要查询出班级名称是”1403”的男同学信息,请完成sql语句(使用子查询)
Select * from StudentInfo where claId = (select claId from ClassInfo where claName = ‘1403’) and stuSex = ‘男’
注释:1403是班级的名称,只在班级表中,学生表中只有班级的id,并非班级名称。
24、Hibernate是一个对象关系映射框架,它是如何映射的(什么对应什么)?
类----表
属性----列
对象-----行记录
25、sessionFactory是一个重量级还是轻量级的对象,一般项目中创建几个?
重量级对象,一个项目中一个即可
Ssh中,由spring负责创建它,LocalSessionFatoryBean
26、Hibernate中inverse是什么意思,一般设置在哪个标签上,设置为什么值的时候效率高
inverse代表关系中谁作为主控方
一般设置在1方的<set标签上,设置为true的时候代表对方(多方)为主控方,效率高
27、Hibernate.cfg.xml是配置什么的?实体和表的映射信息配置在哪个配置文件中
配置hibernate的一些全局属性,如数据库连接、方言dialect、show_sql等
实体和表的映射信息存储在各自的 xxxx.hbm.xml文件中
28、Struts2中action请求处理方法一般返回的字符串,该字符串和那里的配置对应。它默认的返回类型是什么?有哪几种返回方式
在struts.xml中的<result name=”xxx” 中进行配置
默认是转发
Dispatcher
Redirect
redirectAction
29、如果jsp页面要导入标签库,则需要使用的指令是?其中uri、prefix代表什么意思
<%@ taglib uri=”标签的地址” prefix=”前缀” %>
C标签:
<%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c” %>
Struts标签:
<%@ taglib uri=”/struts-tags” prefix=”s” %>
30、Struts2的action是单例的还是每次请求都会创建action对象
Action是每次请求都会创建action对象
Struts1的action是单例的
Servlet也是单例的
31、Ajax 是一种什么技术,其中xmlHttpRequest的状态值有哪几种,分别是什么时候变化。在服务器端返回xml数据时,如何获取返回的信息xmlHttpRequest.responseXXXX什么获取
Ajax是一种页面无刷新技术
xmlHttpRequest负责整个ajax中的通信,发送请求接收数据
readyState有5个状态值:
0 刚创建
1 准备发送
2 已发送
3 接收数据中
4 接收完毕
32、http返回的状态吗分别代表什么意思
404--------资源找不到
200---------处理成功
500---------服务器报错
33、Webservice使用什么协议通信
SOAP协议
Webservice中包含了:xml/xsd soap wsdl
34、http访问时的默认端口号是什么?Tomcat的默认端口号是什么,可以改变吗?Sqlserver的默认端口号是什么?
80端口
Tomcat默认是:8080
Sqlserver默认端口:1433
35、客户端禁用Cookie时,如何实现会话跟踪
url重写
36、Session和Cookie分别存储在那里?
Session是存储在服务器端的信息
Cookie是存储在客户端
37、OGNL是struts2访问数据的语法,其中OGNL的根是什么
ValueStack
OGNL访问数据时都要加 #
38、在action中session是从哪里获取出来的,request如何获取
HttpServletRequest request =ServletActionContext.getRequest();
HttpSession session = request.getSession();//如果没有session则创建一个
HttpSession session = request.getSession(false);//如果没有session则返回null
Tomcat中session默认存活的时间:30分钟
可以在tomcat下conf中的配置文件中改成存活时间
也可以直接调用session的
session.setMaxAge(时间);-----秒
39、下列代码能够在下一个jsp页面中取出数据吗,为什么
request.setAttribute(“name”,”zhang”);
response.sendRedirect(“http://localhost:8080/servlet/MyServlt”);
下一个jsp是否能够取出request中存储的name属性
答:不能取出,因为重定向是一个新的请求
40、在servlet中如何获取表单提交请求中的数据,如文本框的数据,再如获取多个名字相同的checkbox中的值
String n = request.getParameter(“name”);
String[] as = requset.getParameterValues(“名字”);
41、C标签如何循环集合中的数据,写出一个简单的架构即可。Strtus2标签如何循环
<c:forEach items=”${集合}” var=”对象名” varStatus=”状态信息” >
</c:forEach>
<s:iterator value=”#attr.集合名” id=”对象名” status=”状态信息”>
</s:iterator>
42、Hibernate中的session常用的方法有哪些,作用是干什么
Session.save 保存对象
session.saveOrUpdate --增加或修改(根据对象的主键id)
Session.update
Session.get
Session.load
Session.delete
session.close
43、Hibernate中通过get和load都可以根据id查询一个对象,区别是什么?
get和load都会查询1级缓存
get是立即加载,如果没找到返回null
load是延迟加载,如果没找到报错
44、Html注释和jsp注释分别如何写,那个在客户端看不到(隐式的)?哪个效率高
Html注释:<!-- html注释,可以看到,效率低 -->
Jsp注释:<%-- jsp注释,客户端看不到,隐式效率高--%>
45、对xml文件进行限制有哪两种方式?
Dtd------------.dtd
Schema-------.xsd(限制要求更高)
46、Struts2中自定义类型转换器需要实现的接口、类分别是什么?
TypeConverter -----------接口
StrutsTypeConverter----------类
47、Sql中常用的聚合函数有那些,分别是干什么的
Sum 求和
Avg 平均
Max 最大
Min 最小
Count 统计行数
Select count(*) from 表
Select count(列) from 表 ---如果该列值存在为null,则不参与统计
48、下列代码运行结果是什么,为什么
tx = session.beginTransaction();
Customer c1=(Customer)session.load(Customer.class,new Long(1));
Customer c2=(Customer)session.load(Customer.class,new Long(1));
System.out.println(c1==c2);
tx.commit();
session.close();
true,第一次load会放入缓存中,第二次直接从缓存中取
49、Sql中排序时升序和降序的关键字分别是什么?
Asc----升序(默认)
Desc --降序
50、SQL中的索引有什么用?在哪些列上适合建立索引?
索引主要是为了加快查询速度。
1)该列警察被使用、排序、分组等。
2)该列不经常被修改
3)该列重复值不多
索引:
聚集索引,效率高,一个表中只能一个(主键就是聚集索引),索引的顺序和数据的物理顺序一致(拼音目录)
非聚集索引,效率低,一个表中可以多个(最多255个),索引的顺序和数据的顺序不一致(偏旁部首目录)
51、子查询如果用 > < = 引出来,那么子查询只能查询出多少值?如果用in 引出来,那么查询出多少值?
单个值 select * from 表 where 列 = (单个值查询)
In的话,可以多个,但是只能单列
52、sql中事务的作用是什么?Sql中事务用那些语句构成
事务是为了保证某个功能下的多条sql要么都成功,要么都取消
Begin tran --开始事物
Commit tran --提交事务
Rollback tran –回滚事务
53、存储过程的创建语法是什么,参数可以是什么类型,如何调用
Create proc up_名字(
参数列表
)
As
Begin
--存储过程主体
end
参数可以是输入参数、输出参数(要用output声明)
调用存储过程时,使用 exec ,如:
declare @flag int --声明输出参数
exec up_过程名 参数1,参数2,@flag output
print @flag ---上面的存储过程会将输出参数中进行赋值,作为返回值
54、sql中的变量分类,举例
Sql中变量分为全局变量和局部变量
全局变量,只能读取数据,不能声明,如:
@@error 上个语句错误号
@@identity 最后次插入标识列的值,如果没有,则为null
@@rowcount 上个增删改语句影响的行数
局部变量,自己声明的:
Declare @name varchar(30)
Set @name = ‘jack’
55、关于having
Select count(*) from 考试信息表
查询所有人考试的总次数
按人来查询每个人的总次数
Select count(*) from 考试信息表 group by 学生ID
查询考试次数在2次以上的人的id
Select 学生ID from 考试信息表 group by 学生ID having count(*) > 2
56、重载和重写
重载与重写的区别 |
|||
序号 |
重载 |
重写 |
|
1 |
方法的名称相同,参数个数和类型不同 |
方法名称、参数列表和返回值类型与父亲完全相同 |
|
2 |
不要求方法的访问范围 |
子类中提供的重写方法的访问范围不能小于父类 |
|
3 |
应用在一个类的内部 |
应用在父子类继承关系中 |
|
重载:同一个类中,相同的方法名,不同的参数
重写:子类重写父类的方法,方法名、返回类型,参数都一样
56、HashMap
HashMap不能保证其中元素的顺序,HashMap的key和value都能为null ,HashMap使用键/值的形式保存数据,HashMap通过get(key)获取对应的值
57、泛型集合
泛型可以解决数据类型安全的问题,泛型消除了类型强制转换,泛型集合的效率比普通集合更高
57、抽象类和接口
抽象类在Java语言中表示的是一种继承关系,一个类只能使用一次继承。抽象类可以没有构造方法,但是一个类却可以实现多个接口;在抽象类中可以没有抽象方法,抽象类不能被实例化; 实现抽象类和接口的类必须实现其中的所有抽象方法,除非它也是抽象类。接口中的方法都不能被实现,必须在子类中重写;接口中不能有构造方法;接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值
58、面向对象的方法:继承、封装、多态
59、Java构造方法
构造方法没有返回类型;构造方法是类的一种特殊方法,它的方法名必须与类名相同; 构造方法的主要作用是完成对类的对象的初始化工作
60、java中的数据类型
不会改变的是:基本数据类型(8个),String类型
基本数据类型(8个):Int double float long char boolean short byte
61、java的修饰符:Private -- default ---protected---public
61、在浏览器输入http://localhost:8080/news/main/list.jsp,分别执行以代码后,打印结果
System.out.println(request.getContextPath()); 打印结果:/news
System.out.println(request.getServletPath()); 打印结果:/main/list.jsp
System.out.println(request.getRequestURL());
打印结果:http://localhost:8080/news/main/list.jsp
System.out.println(request.getRequestURI()); 打印结果:/news/main/list.jsp
URL:带http的全路径
URI:项目名/页面名
62、WEB
Web服务的数据传输标准是XML
Webservice通信协议:SOAP
63、XMLHttpRequest的readyState属性值:
0未初始化,刚创建时
1准备发送
2send方法调用,已发送
3正在接收,未完毕
4已经响应完毕
Status的状态信息为200成功、404资源未找到、500服务器报错