1、JSP有哪些内置对象,作用分别是什么?
a) 一共有九个内置对象
pageContext javax.servlet.jsp.PageContext
request javax.servlet.http.HttpServletRequest
response javax.servlet.http.HttpServletResponse
session javax.servlet.http.HttpSession
application javax.servlet.Servlet Context –>可用this.getServletContext()替代
config javax.servlet.ServletConfig
exception java.lang.Throwable
page java.lang.Object
out javax.servlet.jsp.JspWriter
b) 作用:
1、pageContext 表示页容器 –>EL、标签、上传
2、request 服务器端取得客户端的信息:头信息、Cookie、请求参数、MVC设计模式
3、response 服务器端回应给客户端信息:Cookie、重定向
4、session 表示每一个用户,用于登录验证
5、application 表示整个服务器,getRealPath()
6、config 去的初始化参数,初始化参数在web.xml中配置
7、exception 表示的是错误页的处理操作
8、page 如同this一样,表示整个JSP页面
9、out 输出,但是尽量使用表达式输出
——————————————————————————————————————————————————————————————————
2、JSP页面间传递参数的方法有哪些?
JSP页面间传递参数是经常需要使用到的功能,有时还需要多个JSP页面间传递参数。下面介绍一下实现的方法。
(1)直接在URL请求后添加
如:< a href="thexuan.jsp?action=transparams&detail=directe">直接传递参数< /a>
特别的在使用response.sendRedirect做页面转向的时候,也可以用如下代码:
response.sendRedirect("thexuan.jsp?action=transparams&detail=directe") ,可用request.getParameter(name)取得参数
(2)jsp:param
它可以实现主页面向包含页面传递参数,如下:
- < jsp:include page="Relative URL">
- < jsp:param name="param name" value="paramvalue" />
- < /jsp:include>
还可以实现在使用jsp:forward动作做页面跳转时传递参数,如下:
- < jsp:forward page="Relative URL">
- < jsp:param name="paramname" value="paramvalue" />
< /jsp:forward> 通过这种方式和一般的表单参数一样的,也可以通过request.getParameter(name)取得参数
(3)设置session和request
通过显示的把参数放置到session和request中,以达到传递参数的目的
- session.setAttribute(name,value);
- request.setAttribute(name,value)
取参数:
- value=(value className)session.getAttribute(name);
- value=(value className)request.getAttribute(name);
大家肯定已经注意到了,在取参数的时候,做了类型转换,这是因为放置在session和request中的对象的属性被看作 java.lang.Object类型的了,如果不转换,在将直付给value时会报classcastexception异常。
在多个JSP页面之间传递参数
1. 怎么在多个JSP页面之间进行参数传递?需要使用JSP的内置作用域对象session。利用它的两个方法setAttribute(),getAttribute()
2. 下面的这个实例实现了把第一个JSP页面的参数传递给第三个页面的功能
3. 代码如下:1.jsp
- < html>
- < form method=get action=2.jsp>
- what's your name< input type=text name=username>
- < input type=submit value=submit>
- < /form>
- < /html>
4. 2.jsp
- < html>
- < form method=post action="3.jsp?pass=11">
- < %
- String name=request.getParameter("username");
- session.setAttribute("username",name);
- %>
- Your name is:< %=request.getParameter("username")%>
- < br>what's your hobby< input type=text name=hobby>
- < input type=submit value=submit>
- < /form>
- < /html>
5. 3.jsp
——————————————————————————————————————————————————————————————————
- < html>
- your name is:< %=session.getAttribute("username")%>
- < br>
- your hobby is:< %=request.getParameter("hobby")%>
- < br>
- your password is:< %=request.getParameter("pass")%>
- < br>
- < /form>
- < /html>
3、servlet中什么时候调用 doGet和dopost 方法,这两个方法有什么不同?
第一:你的servlet如果是继承自HttpServlet,就必须重写它里面的两 个虚方法doGet和doPost,也就是说,先不管别的servlet或jsp会去调用哪个方法,这两个方法都应该有。
第二:至于它调用哪个方法,就看提交方式 <form action="myServlet" method="get" > method属性的值是get,它就去调用对应servlet的doGet方法。 同理,method属性的值是get,它就去调用对应servlet的doPost方法。 一般来说,不管采用那种提交方式,在servlet里要做的事情是一样的。所以,我们很多情况下,在一个方法里面调用另一个方法,这样随你那种方式提交的,都可以转去做一种处理。
——————————————————————————————————————————————————————————————————
4、左连接和右连接的区别?
假设有A,B两个表。
表A记录如下:
aID aNum
1 a20050111
2 a20050112
3 a20050113
4 a20050114
5 a20050115
表B记录如下:
bID bName
1 2006032401
2 2006032402
3 2006032403
4 2006032404
8 2006032408
--------------------------------------------
1.
left
join
sql语句如下:
select
*
from
A
left
join
B
on
A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
5 a20050115
NULL
NULL
(所影响的行数为 5 行)
结果说明:
left
join
是以A表的记录为基础的,A可以看成左表,B可以看成右表,
left
join
是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为
NULL
.
--------------------------------------------
2.
right
join
sql语句如下:
select
*
from
A
right
join
B
on
A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
NULL
NULL
8 2006032408
(所影响的行数为 5 行)
结果说明:
仔细观察一下,就会发现,和
left
join
的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用
NULL
填充.
--------------------------------------------
3.
inner
join
sql语句如下:
select
*
from
A
innerjoin B
on
A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
结果说明:
很明显,这里只显示出了 A.aID = B.bID的记录.这说明
inner
join
并不以谁为基础,它只显示符合条件的记录.
--------------------------------------------
PS:
LEFT
JOIN
操作用于在任何的
FROM
子句中,组合来源表的记录。使用
LEFT
JOIN
运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。
语法:
FROM
table1
LEFT
JOIN
table2
ON
table1.field1 compopr table2.field2
说明:table1, table2参数用于指定要将记录组合的表的名称。
field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。
compopr参数指定关系比较运算符:
"="
,
"<"
,
">"
,
"<="
,
">="
或
"<>"
。
如果在
INNER
JOIN
操作中要联接包含Memo 数据类型或 OLE Object 数据类型数据的字段,将会发生错误
注:
left
和
right
是外连接,
Inner
是内连接。
多看看SQL的帮助就明白了
——————————————————————————————————————————————————————————————————
5、存储过程和函数的区别?
本质上没区别。只是函数有限制只能返回一个标量,而存储过程可以返回多个。并且函数是可以嵌入在SQL中使用的,可以在SELECT等SQL语句中调用,而存储过程不行。执行的本质都一样。
——————————————————————————————————————————————————————————————————
6、事务是什么?在java中如何手工执行事务?
事务 指作为单个逻辑工作单元执行的一系列操作。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性;在java中你要手工执行事务,如果是jdbc连接数据库,那么就设置提交的时候手动提交conn.setAutoCommit(false);//conn 是connection对象当结束后conn.commit();
——————————————————————————————————————————————————————————————————
7、java中会存在内存泄露吗?
会有的,虽然java虚拟机中的垃圾回收机制可以自动进行内存空间的申请和释放,但还是有些不能显式地进行释放,必须手动释放,比如关闭打开的文件和数据库连接.最后可能导致内存的可用空间越来越少,最终崩溃.
——————————————————————————————————————————————————————————————————
8、java中实现多态的机制是什么?
方法的重写Overriding和重载Overloading是Java多态性的不同表现.
重写Overriding是父类与子类之间多态性的一种表现
重载Overloading是一个类中多态性的一种表现
——————————————————————————————————————————————————————————————————
——————————————————————————————————————————————————————————————————
10、