1.为什么需要分层模式?分层开发的优势有哪些?
1.方便团队分工
2.其他特点
还有以下的一些特点:
规范代码:在开发过程中可以将每层的代码进行规范,固定开发语言的风格;
忽略数据库差异:好的数据访问层可以将数据库的差异完全屏蔽,对开发人员只是做相同的数据操作工作,甚至可以快速进行数据库转换;
2.请描述下jsp,html之间的关系?
1、HTML能直接通过浏览器打开,而JSP只能发布到Tomcat服务器才能打开;
2、HTML中不能嵌套Java代码,而JSP中可以嵌套Java代码;
3、HTML是静态页面可以直接运行,而JSP页面运行时需要转换成servlet。
3.在一个jsp的请求处理中如何停止jsp的执行。
<%
if (request.getParameter(“wen”) != null) {
// do something
} else {
return;
}
%>
4.为什么使用连接池?说出数据连接池的机制是什么。
1资源重用 2更快的系统响应速度 3新的资源分配手段 4统一的连接管理,避免数据库连接泄漏
最大维持连接数:没有任何请求时在连接池中可以存在的连接数
最大连接数:连接池中最多可以存在的连接个数。
最大等待时间:当断开连接时,超过最大维持连接数的连接不会马上销毁,最大等待时间过后它才会销毁。
连接池是将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对数据库进行访问。这样省略了创建连接和销毁连接的过程。
5.请描述分页显示的SQL语句如何实现?
方法1:
适用于 SQL Server 2000/2005
SELECT TOP 页大小 *
FROM table1
WHERE id NOT IN
(
SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id
)
ORDER BY id
方法2:
适用于 SQL Server 2000/2005
SELECT TOP 页大小 *
FROM table1
WHERE id >
(
SELECT ISNULL(MAX(id),0)
FROM
(
SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id
) A
)
ORDER BY id
方法3:
适用于 SQL Server 2005
SELECT TOP 页大小 *
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1
) A
WHERE RowNumber > 页大小*(页数-1)
6.请描述什么是jsp内置对象?列举你知道的jsp内置对象并说明其作用?
jsp内置对象
定义:可以不加声明就在JSP页面脚本(Java程序片和Java表达式)中使用的成员变量 JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应): 内置对象 代表内容 范围
request 触发服务调用的请求 request
response 对请求的应答 page
session 为请求的客户创建的session对象 session
application 从 servlet 配置对象获得的 servlet 上下文(如在getServletConfig() ,getContext()的调用中) application
out 向输出流写入内容的对象 page
pageContext 本 JSP 的页面上下文 page
page 实现处理本页当前请求的类的实例 page
config 本 JSP 的 ServletConfig page
exception 表示JSP页面运行时产生的异常 Page
7.请简要描述实现页面访问控制的流程?
1、概念和定义
session对象:
session对象用来存储有关用户会话的所有信息,一个会话就是浏览器与服务器之间的一次通话,它包含浏览器与服务器之间的多次请求、响应过程。session是JSP内置对象,与浏览器一一对应,允许用户存储和提取会话状态的信息。
application对象:
application类似于系统的“全局变量”,用于实现用户之间的数据共享。
2、流程和步骤
实现网站登录功能的步骤
(1)创建静态登录页面,并指定表单提交由登录处理页面进行处理。
(2)创建登录处理页面获得登录信息,查询数据库,判断该用户是否注册,如果该用户已注册,在session中保存该用户的登录信息,并且跳转到新闻发布系统的首页面,如果用户未注册,则仍然回到登录页面。
(3)创建登录验证处理页面从session中提取该用户信息再次验证用户信息是否存在,如果存在则显示首页内容,不存在则定位到登录页面。
(4)创建新闻发布系统首页面,调用登录验证处理代码,并显示首页面内容。
需求:
升级新闻发布系统,提供用户登录页面,增加访问控制功能,要求用户必须登录之后,才能访问新闻发布系统。
关键代码:
1、在news数据库中创建表userinfo,负责存储用户名、密码,创建类(User.java),负责存储用户名、密码。
2、创建用户登录静态login.html页面
<form method="POST" name="form1" action="login.jsp">
3、创建登录处理页面login.jsp
<%
// 获得登录信息
request.setCharacterEncoding("GBK");
String pass = request.getParameter("password");
String name = request.getParameter("loginName");
Connection con = null;
PreparedStatement pStatement = null;
try{
// 查询数据库,判断该用户是否注册
con = ConnectionManager.getConnection();
String sql = "select * from userinfo where loginname = ? and password=?";
pStatement = con.prepareStatement(sql);
pStatement.setString(1, name);
pStatement.setString(2,pass);
ResultSet rs = pStatement.executeQuery();
// 如果是已注册用户
if (rs.next()) {
// 把用户名、密码封装在User对象中
User loginedUser = new User(name, pass);
// 在session中存放用户登录信息
session.setAttribute("LOGINED_USER", loginedUser);
// 进入新闻发布系统的首页面
response.sendRedirect("index.jsp");
} else {
// 如果不是已注册用户,仍然回到登录页面
response.sendRedirect("login.html");
}
}catch(Exception e){
out.println("发生错误!错误原因:"+e.getMessage());
}finally{
ConnectionManager.closeStatement(pStatement);
ConnectionManager.closeConnection(con);
}
%>
4、创建登录验证处理页面checklogin.jsp
<%
User user = (User) session.getAttribute("LOGINED_USER");
if (user == null) {
response.sendRedirect("login.html");
}
%>
5、创建新闻发布系统首页面index.jsp
<%@ include file="checklogin.jsp"%>
实现网站登出功能的步骤
(1)在新闻发布系统首页面中添加[安全退出]链接
(2)创建网站登出处理页面,把当前会话置为无效,返回新闻发布系统首页面
(3)在[安全退出]链接中调用网站登出处理程序
需求:
实现新闻发布系统当前用户安全退出功能。
关键代码:
在新闻发布系统首页面中添加[安全退出]链接。
[<a target="_parent" href="adminOut.jsp"><font color="#FFFFFF">安全退出</font> </a>]
创建网站登出处理页面adminOut.jsp。
<%
session.invalidate();
response.sendRedirect("../index.jsp");
%>
实现网站访问人数统计功能的步骤
(1)创建静态登录页面,并指定表单提交由登录处理页面进行处理。
(2)创建登录处理页面获得登录信息,查询数据库,判断该用户是否注册,如果该用户已注册,把已登录用户的信息保存在一个全局范围内。
(3)在新闻发布系统左导航栏中加入超链接,用来导航到右侧的已访问人数统计页面。
(4)创建已访问人数统计页面,从全局范围内取出访问者个数并显示。
需求:
如下图示为新闻发布系统增加已访问人数统计功能。
关键代码:
1、创建静态登录页面login2.html
<form method="POST" name="form1" action="login2.jsp">
2、创建登录处理页面login2.jsp,把已登录用户的信息保存在一个全局范围内
if (rs.next()) {
User logineduser = new User(name, pass);
session.setAttribute("LOGINED_USER", logineduser);
List loginedUsers = new ArrayList(); //访问者列表
if (application.getAttribute("LOGINED_USER") != null) {
// 从全局范围内取出原有的访问者列表
loginedUsers = (List) application.getAttribute("LOGINED_USER");
}
// 把新登录用户的信息存入访问者列表中
loginedUsers.add(logineduser);
application.setAttribute("LOGINED_USER", loginedUsers);
response.sendRedirect("index.jsp");
}
3、在新闻发布系统左导航left.jsp页面中加入超链接
<a href="showAllLoginedUsers.jsp" target="mainFrame">已访问人数统计</a>
4、创建已访问人数统计页面showAllLoginedUsers.jsp
<html>
<%
// 访问者列表
List loginedUsers = new ArrayList();
// 从全局范围内取出访问者列表
if (application.getAttribute("LOGINED_USER") != null) {
loginedUsers = (List) application.getAttribute("LOGINED_USER");
}
%>
<body>
<p align="center"><br><br><br>
目前,有<%=loginedUsers.size()%>人已经访问过本网站!<br><br>
访问者的登录名称分别是:<br>
<%
for (int i = 0; i < loginedUsers.size(); i++) {
User logineduser = (User) loginedUsers.get(i);
out.print(logineduser.getName());
out.print("<br/>");
}
%>
</p>
</body>
</html>
8.overload和override的区别。overload的方法是否可以改变返回值的类型?
Overload和Override的区别。Overload的方法是否可以改变返回值的类型?
Overload:重载
Override:重写
重载:
同一个类中,方法名相同,参数列表不同。与返回值类型无关。
重写:
存在于子父类,或者子父接口中,方法声明相同。
Overload的方法可以改变返回值的类型,因为它与返回值类型无关。
9.编程题:写一个singleton出来。
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
一般Singleton模式通常有几种种形式:
第一种形式:定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton {
private Singleton(){}
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
第二种形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
10.请分别使用java与JavaScript写出九九乘法表。
public class Nine{
public static void main(String args[]){
for(int x = 1;x<=9;x++){
for(int y = 1;y<=x;y++){
System.out.println(x + "*" + y + "=" + (x*y));
}
}
}
}
<script language=javascript>
for(i=1;i<=9;i++){
for(j=1;j<=9;j++){
document.write (i+"*"+j+"="+i*j+" ");
if(i==j)
{document.write ("<br/>"); break;} //用的if语句,如果这两个数字相同了 那么跳出,另起一行
}
}
</script>
1.方便团队分工
2.其他特点
还有以下的一些特点:
规范代码:在开发过程中可以将每层的代码进行规范,固定开发语言的风格;
忽略数据库差异:好的数据访问层可以将数据库的差异完全屏蔽,对开发人员只是做相同的数据操作工作,甚至可以快速进行数据库转换;
2.请描述下jsp,html之间的关系?
1、HTML能直接通过浏览器打开,而JSP只能发布到Tomcat服务器才能打开;
2、HTML中不能嵌套Java代码,而JSP中可以嵌套Java代码;
3、HTML是静态页面可以直接运行,而JSP页面运行时需要转换成servlet。
3.在一个jsp的请求处理中如何停止jsp的执行。
<%
if (request.getParameter(“wen”) != null) {
// do something
} else {
return;
}
%>
4.为什么使用连接池?说出数据连接池的机制是什么。
1资源重用 2更快的系统响应速度 3新的资源分配手段 4统一的连接管理,避免数据库连接泄漏
最大维持连接数:没有任何请求时在连接池中可以存在的连接数
最大连接数:连接池中最多可以存在的连接个数。
最大等待时间:当断开连接时,超过最大维持连接数的连接不会马上销毁,最大等待时间过后它才会销毁。
连接池是将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对数据库进行访问。这样省略了创建连接和销毁连接的过程。
5.请描述分页显示的SQL语句如何实现?
方法1:
适用于 SQL Server 2000/2005
SELECT TOP 页大小 *
FROM table1
WHERE id NOT IN
(
SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id
)
ORDER BY id
方法2:
适用于 SQL Server 2000/2005
SELECT TOP 页大小 *
FROM table1
WHERE id >
(
SELECT ISNULL(MAX(id),0)
FROM
(
SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id
) A
)
ORDER BY id
方法3:
适用于 SQL Server 2005
SELECT TOP 页大小 *
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1
) A
WHERE RowNumber > 页大小*(页数-1)
6.请描述什么是jsp内置对象?列举你知道的jsp内置对象并说明其作用?
jsp内置对象
定义:可以不加声明就在JSP页面脚本(Java程序片和Java表达式)中使用的成员变量 JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应): 内置对象 代表内容 范围
request 触发服务调用的请求 request
response 对请求的应答 page
session 为请求的客户创建的session对象 session
application 从 servlet 配置对象获得的 servlet 上下文(如在getServletConfig() ,getContext()的调用中) application
out 向输出流写入内容的对象 page
pageContext 本 JSP 的页面上下文 page
page 实现处理本页当前请求的类的实例 page
config 本 JSP 的 ServletConfig page
exception 表示JSP页面运行时产生的异常 Page
7.请简要描述实现页面访问控制的流程?
1、概念和定义
session对象:
session对象用来存储有关用户会话的所有信息,一个会话就是浏览器与服务器之间的一次通话,它包含浏览器与服务器之间的多次请求、响应过程。session是JSP内置对象,与浏览器一一对应,允许用户存储和提取会话状态的信息。
application对象:
application类似于系统的“全局变量”,用于实现用户之间的数据共享。
2、流程和步骤
实现网站登录功能的步骤
(1)创建静态登录页面,并指定表单提交由登录处理页面进行处理。
(2)创建登录处理页面获得登录信息,查询数据库,判断该用户是否注册,如果该用户已注册,在session中保存该用户的登录信息,并且跳转到新闻发布系统的首页面,如果用户未注册,则仍然回到登录页面。
(3)创建登录验证处理页面从session中提取该用户信息再次验证用户信息是否存在,如果存在则显示首页内容,不存在则定位到登录页面。
(4)创建新闻发布系统首页面,调用登录验证处理代码,并显示首页面内容。
需求:
升级新闻发布系统,提供用户登录页面,增加访问控制功能,要求用户必须登录之后,才能访问新闻发布系统。
关键代码:
1、在news数据库中创建表userinfo,负责存储用户名、密码,创建类(User.java),负责存储用户名、密码。
2、创建用户登录静态login.html页面
<form method="POST" name="form1" action="login.jsp">
3、创建登录处理页面login.jsp
<%
// 获得登录信息
request.setCharacterEncoding("GBK");
String pass = request.getParameter("password");
String name = request.getParameter("loginName");
Connection con = null;
PreparedStatement pStatement = null;
try{
// 查询数据库,判断该用户是否注册
con = ConnectionManager.getConnection();
String sql = "select * from userinfo where loginname = ? and password=?";
pStatement = con.prepareStatement(sql);
pStatement.setString(1, name);
pStatement.setString(2,pass);
ResultSet rs = pStatement.executeQuery();
// 如果是已注册用户
if (rs.next()) {
// 把用户名、密码封装在User对象中
User loginedUser = new User(name, pass);
// 在session中存放用户登录信息
session.setAttribute("LOGINED_USER", loginedUser);
// 进入新闻发布系统的首页面
response.sendRedirect("index.jsp");
} else {
// 如果不是已注册用户,仍然回到登录页面
response.sendRedirect("login.html");
}
}catch(Exception e){
out.println("发生错误!错误原因:"+e.getMessage());
}finally{
ConnectionManager.closeStatement(pStatement);
ConnectionManager.closeConnection(con);
}
%>
4、创建登录验证处理页面checklogin.jsp
<%
User user = (User) session.getAttribute("LOGINED_USER");
if (user == null) {
response.sendRedirect("login.html");
}
%>
5、创建新闻发布系统首页面index.jsp
<%@ include file="checklogin.jsp"%>
实现网站登出功能的步骤
(1)在新闻发布系统首页面中添加[安全退出]链接
(2)创建网站登出处理页面,把当前会话置为无效,返回新闻发布系统首页面
(3)在[安全退出]链接中调用网站登出处理程序
需求:
实现新闻发布系统当前用户安全退出功能。
关键代码:
在新闻发布系统首页面中添加[安全退出]链接。
[<a target="_parent" href="adminOut.jsp"><font color="#FFFFFF">安全退出</font> </a>]
创建网站登出处理页面adminOut.jsp。
<%
session.invalidate();
response.sendRedirect("../index.jsp");
%>
实现网站访问人数统计功能的步骤
(1)创建静态登录页面,并指定表单提交由登录处理页面进行处理。
(2)创建登录处理页面获得登录信息,查询数据库,判断该用户是否注册,如果该用户已注册,把已登录用户的信息保存在一个全局范围内。
(3)在新闻发布系统左导航栏中加入超链接,用来导航到右侧的已访问人数统计页面。
(4)创建已访问人数统计页面,从全局范围内取出访问者个数并显示。
需求:
如下图示为新闻发布系统增加已访问人数统计功能。
关键代码:
1、创建静态登录页面login2.html
<form method="POST" name="form1" action="login2.jsp">
2、创建登录处理页面login2.jsp,把已登录用户的信息保存在一个全局范围内
if (rs.next()) {
User logineduser = new User(name, pass);
session.setAttribute("LOGINED_USER", logineduser);
List loginedUsers = new ArrayList(); //访问者列表
if (application.getAttribute("LOGINED_USER") != null) {
// 从全局范围内取出原有的访问者列表
loginedUsers = (List) application.getAttribute("LOGINED_USER");
}
// 把新登录用户的信息存入访问者列表中
loginedUsers.add(logineduser);
application.setAttribute("LOGINED_USER", loginedUsers);
response.sendRedirect("index.jsp");
}
3、在新闻发布系统左导航left.jsp页面中加入超链接
<a href="showAllLoginedUsers.jsp" target="mainFrame">已访问人数统计</a>
4、创建已访问人数统计页面showAllLoginedUsers.jsp
<html>
<%
// 访问者列表
List loginedUsers = new ArrayList();
// 从全局范围内取出访问者列表
if (application.getAttribute("LOGINED_USER") != null) {
loginedUsers = (List) application.getAttribute("LOGINED_USER");
}
%>
<body>
<p align="center"><br><br><br>
目前,有<%=loginedUsers.size()%>人已经访问过本网站!<br><br>
访问者的登录名称分别是:<br>
<%
for (int i = 0; i < loginedUsers.size(); i++) {
User logineduser = (User) loginedUsers.get(i);
out.print(logineduser.getName());
out.print("<br/>");
}
%>
</p>
</body>
</html>
8.overload和override的区别。overload的方法是否可以改变返回值的类型?
Overload和Override的区别。Overload的方法是否可以改变返回值的类型?
Overload:重载
Override:重写
重载:
同一个类中,方法名相同,参数列表不同。与返回值类型无关。
重写:
存在于子父类,或者子父接口中,方法声明相同。
Overload的方法可以改变返回值的类型,因为它与返回值类型无关。
9.编程题:写一个singleton出来。
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
一般Singleton模式通常有几种种形式:
第一种形式:定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton {
private Singleton(){}
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
第二种形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
10.请分别使用java与JavaScript写出九九乘法表。
public class Nine{
public static void main(String args[]){
for(int x = 1;x<=9;x++){
for(int y = 1;y<=x;y++){
System.out.println(x + "*" + y + "=" + (x*y));
}
}
}
}
<script language=javascript>
for(i=1;i<=9;i++){
for(j=1;j<=9;j++){
document.write (i+"*"+j+"="+i*j+" ");
if(i==j)
{document.write ("<br/>"); break;} //用的if语句,如果这两个数字相同了 那么跳出,另起一行
}
}
</script>