1.选择题
1.关于 B/S与 C/S模式的介绍正确的是( )。
A、B/S是浏览器/服务器模式,服务器装好后,用浏览器就可以正常浏览
B、C/S是客户端/服务端模式,服务器装好后,用浏览器就可以正常浏览
C、B/S是浏览器/服务器模式,服务器装好后,其他人还需要在客户端的计算机上安 装专用的客户端软件才能正常浏览
D、C/S是浏览器/服务器模式,服务器装好后,其他人还需要在客户端的计算机上安 装专用的客户端软件才能正常浏览
正确答案: A
2.Web开发环境客户端所需具备的技能不包括( )。
A、HTML语言
B、CSS样式表
C、JavaScript脚本语言
D、Servlet技术
正确答案: D
3.Web开发环境服务端所需具备的技能不包括( )。
A、JSP
B、Servlet技术
C、JavaScript脚本语言
D、Java语言
正确答案: C
4.创建 Web应用程序的步骤正确的是( )。
A、创建 Web工程→创建 JSP页面→发布 Web工程→运行 JSP页面
B、创建 Web工程→创建 JSP页面→运行 JSP页面→发布 Web工程
C、创建 JSP页面→创建 Web工程→发布 Web工程→运行 JSP页面
D、创建 JSP页面→创建 Web工程→运行 JSP页面→发布 Web工程
正确答案: A
5.关于 JSP页面中嵌入 Java代码的描述正确的是( )。
A、JSP页面只能嵌入 HTML代码,不能嵌入 Java代码
B、JSP页面中的 Java代码只能嵌入在“<%”与“%>”之间
C、JSP页面中的 Java代码只能嵌入在“<#”与“#>”之间
D、JSP页面中的任何地方都可以直接写 Java代码
正确答案: B
6.关于 HTML语言的描述不正确的是( )。
A、HTML是一门用来制作网页的程序语言
B、HTML语言是一种标记语言,不需要编译,直接由浏览器执行
C、HTML语言大小写敏感,HTML与 html是不一样的
D、HTML文件必须使用 html或 htm为文件名后缀
正确答案: C
7.关于 JavaScript的描述不正确的是( )。
A、与 HTML语言一样,无须编译,直接在浏览器中执行
B、基于客户端运行,无须服务端
C、是一种解释性的,轻量级的,基于对象的语言
D、与Java语言一样,需要编译为 class文件后才能执行
正确答案: D
8.在 helloapp工程中有一个 hello.jsp,它的文件路径 WebContent/hello/hello.jsp,那么在浏览器端访问 hello.jsp的 URL是( )。
A、http://localhost:8080/hello.jsp
B、http://localhost:8080/helloapp/hello.jsp
C、http://localhost:8080/helloapp/hello/hello.jsp
D、http://localhost:8080/hello/hello.jsp
正确答案: C
9.JSP页面是在传统的 HTML页面文件中加入 Java程序段和 JSP标签构成的,Java程序段写在( )标记符号之间。
A、<% %> B、<- - - ->
C、<@ @> D、<& &>
正确答案: A
10.JSP指令标签包括 include指令,taglib指令和( )。
A、forward指令 B、useBean指令
C、page指令 D、param指令
正确答案: C
11.以下JSP指令标签的书写中,正确的是( )。
A、<%!page 属性=!值! %> B、<%@page 属性=!值! %>
C、<%#page 属性=! 值! %> D、<%&page 属性=!值! %>
正确答案: B 我的答案:
12.page指令标签的属性中可以指定多个值的是( )。
A、contentType属性 B、language属性
C、import属性 D、session属性
正确答案: C
13.下面不是 useBean动作可能的属性值的是( )。
A、contentType B、id
C、scope D、class
正确答案: A
14.在 JavaEE中,以下有关 jsp:setProperty和 jsp:getProperty标记的描述,正确的是( )。
A、和标记都必须在的开始标记和结束标记之间
B、这两个标记的 name属性的值必须和标记的 id属性的值相对应
C、和标记可以用于对 bean中定义的所有属性进行选择和设置
D、这两个标记的 name属性的值可以和标记的 id属性的值不同
正确答案: B
15.在 JSP中如果要导入 java.io.*包,应该使用( )指令。
A、page B、taglib
C、include D、forward
正确答案: A
16.page指令用于定义 JSP文件中的全局属性,下列关于该指令用法的描述错误的是 ( )。
A、<%@page%>作用于整个 JSP页面
B、可以在一个页面中使用多个<%@page%>指令
C、为增强程序的可读性,建议将<%@page%>指令放在 JSP文件的开头,但不是必需的
D、<%@page%>指令中的属性只能出现一次
正确答案: D
17.以下( )注释可以被发送到客户端的浏览器。
A、<%--第一种 --%> B、<% //第二种 %>
C、<% /*第三种 */%> D、<!--第四种-->
正确答案: D
18.Page指令的( )属性可以设置 JSP页面是否可多线程访问。
A、session B、buffer
C、isThreadSafe D、info
正确答案: C
19.可在 JSP页面出现该指令的位置处,静态插入一个文件( )。
A、page指令标签 B、page指令的 import属性
C、include指令标签 D、include动作标签
正确答案: C
20.Page指令的作用是( )。
A、用来定义整个 JSP页面的一些属性和这些属性的值
B、用来在 JSP页面内某处嵌入一个文件
C、使该 JSP页面动态包含一个文件
D、指示 JSP页面加载 Javaplugin
正确答案: A
21.在 JSP中如果要导入 java.io.*包,应该使用( )指令。
A、page B、taglib
C、include D、forward
正确答案: A
22.如果当前 JSP页面出现异常时需要转到一个异常页,需要设置 page指令的( ) 属性。
A、Exception B、isErrorPage
C、error D、errorPage
正确答案: D
23.在 JSP中的 Java脚本中输出数据时可以使用( )对象的 print()方法。
A、page B、session
C、out D、application
正确答案: C
24.下列关于 JSTL中条件标签说法错误的是( )。
A、可以实现如 if else的条件语句
B、标签用于条件选择
C、标签代表一个条件分支
D、标签代表的最后选择
正确答案: C
25.JSP Model2开发的系统中,实现视图的是( )
A、JSP B、HTML
C、JavaBean D、Servlet
我的答案:A
26.MVC模式中用于负责与用户交互并展示模型中数据的模块是( )
A、模型(Model) B、表示层(View)
C、视图(View) D、控制器(Controller)
我的答案:C
27.阅读下面的类:
public class Book {
private double price;
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
针对以上类,下列说法正确的是( )
A、符合JavaBean规范 B、不符合JavaBean规范
C、没有构造方法,所以不符合JavaBean规范 D、以上说法都不对
我的答案:A
28.下面关于MVC设计模式的特点描述中,错误的是( )
A、有利于开发中的分工 B、使程序结构的耦合性增强
C、有利于组件的重用 D、MVC设计模式是当前主流的设计模式之一
我的答案:B
29.在JSP Model2模型中,接收浏览器请求的是( )
A、JSP B、JS C、Servlet D、JavaBean
我的答案:C
2.jsp页面
1.jsp页面元素
jsp页面主要包含五个元素,JSP 指令元素,JSP 脚本元素,JSP 动作元素、jsp内置对象和注释
2.jsp指令元素
page(<%@ page ...%>):用于定义JSP页面的各种属性,是最复杂的一个指令,它的属性很多,常用的属性有import、language、pageEncoding等。
include(<%@ include file="..." %>):静态包含指令用于引入其他JSP文件,使用include指令引入的其他JSP文件,JSP引擎将把这两个JSP文件翻译成一个servlet,所以将include称为静态包含。
taglib(<%@ taglib uri="tagLibraryURI" | prefix="tagPrefix" %>):用于在JSP页面中导入标签库(JSP标准标签库第三方标签库自定义标签库)。
3.jsp脚本元素
表达式(<%= ... %>):用于向页面输出Java的值。
脚本(<% ... %>):可以写任何Java代码,通常用于控制逻辑。
声明(<%! ... %>):可以声明字段和方法,但在JSP中通常不这么用。
4.jsp常用的六个动作元素
<jsp:include>:这个动作标签可以将另一个文件的内容包含到当前的JSP页面内。被包含的文件内容可以是静态文本也可以是动态代码。
<jsp:forward>:是请求转发标签。该标签可以将当前页面的请求转发给其他Web资源。
<jsp:param>:该标签可以作为其他标签的子标签,为其他标签传递参数
<jsp:param name="paramName"value="paramValue" />
name:指定参数的名称
value:设置对应的参数值
<jsp:useBean>: 用于在JSP页面中创建一个JavaBean实例,并通过属性的设置将此实例存放在JSP指定范围内
<jsp:setProperty>:用于对JavaBean中的属性赋值,但JavaBean的属性要提供相应的setXXX()方法。通常与<jsp:useBean>标签一起使用
<jsp:getProperty>:用于获取JavaBean中的属性值,但要求JavaBean的属性必须具有相应getXXX()方法。
5.jsp内置对象
request对象:封装客户端的请求
response对象:封装服务端向客户端发送的响应
session对象:封装用户会话的对象
application对象:封装服务器运行环境的对象
out对象:输出服务器响应的输出流对象
exception:封装页面抛出异常的对象
page:jsp页面本身
pageContext:通过该对象获取其他对象
config:web应用配置对象
6jsp注释
HTML注释(输出注释):指在客户端查看源代码时能看见注释,<!--要注释的内容-->。
JSP页注释(隐藏注释):指注释虽然写在JSP程序中,但不会发送给客户,因此在客户端查看源代码时不能看见注释,<%--要注释的内容--%>。
Java注释:只能出现在Java代码区中,不允许直接出现在页⾯中,//单⾏注释 ,/*多⾏注释*/。
3.Servlet
1.Servlet里的三个方法
(1) init() 方法:在Servlet对象被创建时执行。该方法的作用是初始化Servlet,它只会被执行一次,并且在Servlet实例化之后立即执行。init() 方法通常用于加载配置文件、初始化数据库连接、获取服务器资源等操作。
(2) service() 方法:每当有用户请求发生时,容器就会调用 service() 方法,并将请求传给该方法。该方法接受客户端请求并给出响应。在 service() 方法中,通常会根据不同的请求类型,调用不同的方法来处理请求,例如 doGet() 方法和 doPost() 方法。
(3) destroy() 方法:当Servlet容器(例如Tomcat)重新加载或关闭Web应用程序时,容器将调用destroy()方法,在该方法中可以执行清理活动(例如关闭数据库连接)和显式释放在Servlet初始化期间分配的其他资源。该方法只会被执行一次, Servlet容器在运行时不会再次调用Servlet实例的service()/doGet()/doPost()等方法。
2.示例
package servlet;
import Dao.userDao;
import model.userinfo;
/**
* 登录验证
* */
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/*设置访问路径*/
@WebServlet("/login.do")
/*一个类继承HttpServlet*/
public class loginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*获取用户名和密码*/
String username=req.getParameter("username");
String password=req.getParameter("password");
/*调用控制层*/
userDao userdao=new userDao();
userinfo user=userdao.findByUsername(username,password);
if(user!=null){
/*登陆成功,转发到管理员界面*/
if(user.getRole()==1)
resp.sendRedirect(req.getContextPath()+"/MainInterface.jsp");
/*登陆成功,转发到用户界面*/
else{
resp.sendRedirect(req.getContextPath()+"/MainInterfaceUser.jsp");
}
}
else{
/*登陆失败,重定向到失败页面*/
resp.sendRedirect("loginjsp/loginFill.jsp");
}
}
}
4.El表达式和JSTL标签库
1.EL表达式
语法:${表达式}
示例:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>EL Expression Example</title>
</head>
<body>
<%
String username = "Alice";
pageContext.setAttribute("username", username);
%>
<p>Hello, ${username}!</p>
</body>
</html>
2.JSTL标签库
- 核心标签库(Core Tag Library)
- URI:
http://java.sun.com/jsp/jstl/core
- 前缀: 通常使用
c
- 功能: 包括控制流标签(如
<c:if>
、<c:choose>
、<c:when>
、<c:otherwise>
)、迭代标签(如<c:forEach>
、<c:forTokens>
)、URL处理标签(如<c:url>
、<c:import>
、<c:redirect>
)等。
- URI:
- 格式化标签库(Formatting Tag Library)
- URI:
http://java.sun.com/jsp/jstl/fmt
- 前缀: 通常使用
fmt
- 功能: 提供国际化(i18n)和本地化(l10n)支持,包括消息格式化、数字和日期格式化等。
- URI:
- SQL标签库(SQL Tag Library)
- URI:
http://java.sun.com/jsp/jstl/sql
- 前缀: 通常使用
sql
- 功能: 提供与数据库交互的标签,包括查询、更新和事务管理等。但请注意,直接在JSP页面中使用SQL代码通常不是最佳实践,因为它可能导致代码难以维护和安全风险。
- URI:
- XML标签库(XML Tag Library)
- URI:
http://java.sun.com/jsp/jstl/xml
- 前缀: 通常使用
x
- 功能: 提供处理XML文档的标签,如解析XML、转换XML到HTML等。
- URI:
- 函数标签库(Functions Tag Library)
- URI:
http://java.sun.com/jsp/jstl/functions
- 前缀: 通常使用
fn
- 功能: 提供一组常用的EL函数,可以在EL表达式中直接调用。
- URI:
5.JDBC编程
1.编程步骤
加载驱动程序
建立连接
创建Statement对象
执行SQL语句
处理查询结果集
释放资源
示例:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JdbcExample {
public static void main(String[] args) {
// JDBC驱动名称和数据库URL
String jdbcDriver = "com.mysql.cj.jdbc.Driver";
String dbUrl = "jdbc:mysql://localhost:3306/mydatabase";
// 数据库的用户名与密码
String username = "root";
String password = "password";
try {
// 1. 加载JDBC驱动
Class.forName(jdbcDriver);
// 2. 建立数据库连接
System.out.println("Connecting to database...");
Connection conn = DriverManager.getConnection(dbUrl, username, password);
// 3. 创建Statement对象
System.out.println("Creating statement...");
Statement stmt = conn.createStatement();
// 4. 执行SQL查询
String sql = "SELECT id, name, email FROM users";
ResultSet rs = stmt.executeQuery(sql);
// 5. 处理查询结果集
while(rs.next()){
// 通过列名检索
int id = rs.getInt("id");
String name = rs.getString("name");
String email = rs.getString("email");
// 显示值
System.out.print("ID: " + id);
System.out.print(", Name: " + name);
System.out.println(", Email: " + email);
}
// 6. 释放资源
rs.close();
stmt.close();
conn.close();
} catch(SQLException se) {
// 处理JDBC错误
se.printStackTrace();
} catch(Exception e) {
// 处理Class.forName错误
e.printStackTrace();
} finally {
// 可以在这里添加最终需要执行的代码,比如关闭连接
// 注意:在finally块中关闭资源是一个好习惯,但上面的代码已经在try块中关闭了
}
System.out.println("Goodbye!");
}
}
2.JDBC中使用PreparedStatement执行sql命令的好处
(1)提高程序性能:对于同一个PreparedStatement对象,如果要执行多次相似的SQL语句,只需要设置参数的不同值,就可以重复利用PreparedStatement对象,这样可以显著提高程序性能。
(2) 避免SQL注入:使用PreparedStatement可以有效地避免SQL注入攻击,因为PreparedStatement在执行SQL语句前会对输入参数进行处理,它会自动转义掉特殊字符,防止恶意用户在输入参数中插入恶意代码。
(3) 提高代码可读性:在使用PreparedStatement时,参数直接在SQL语句中使用问号占位符表示,这样可以使代码更加简洁、易读。在代码阅读和维护时,也更容易理解SQL操作的含义。
(4)支持批处理操作:PreparedStatement支持批处理操作,可以一次性执行多个SQL语句,这样可以减少与数据库的交互次数,从而提高程序性能。
6.MVC三层架构
1.三层架构
模型(Model):模型代表应用程序的数据和业务逻辑。它负责处理数据的存储、检索、更新和验证,并提供一组接口供控制器访问和操作数据。
视图(View):视图是用户界面的可视化展示。它负责呈现模型数据并向用户显示信息。视图通常是被动的,只负责显示数据,不处理业务逻辑。
控制器(Controller):控制器接受用户的输入和命令,并根据用户的操作调用模型和视图进行相应的处理。它负责协调模型和视图的交互,并根据业务逻辑处理用户的请求。
2.jsp Model1:jsp+javaBean
3。jsp Model2:jsp+Servlet+javaBeasn
其中JSP技术:用于实现视图(View)模块。视图生成最终的HTML、CSS、JavaScript等静态文件,将控制器返回的数据展示给用户。
Servlet技术:用于实现控制器(Controller)模块。控制器接受客户端请求,处理请求,将结果传递给视图模块。
JavaBean技术:用于实现模型(Model)模块。模型负责处理业务逻辑,与数据库交互,提供数据给控制器,控制器再将数据传递给视图
7.过滤器
使用场景
权限控制:基于URL级别的权限访问控制,例如阻止未授权用户访问某些页面或资源。
敏感词汇过滤:在请求的内容中搜索并过滤掉敏感词汇。
日志记录:记录用户请求和响应的详细信息,用于监控和分析。
压缩响应信息:对响应内容进行压缩,以减小传输的数据量,提高性能。
具体方法:doFilter()实现具体的逻辑
示例:
package filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.xml.crypto.dsig.spec.XPathType;
import java.io.IOException;
/*对所有路径进行过滤*/
@WebFilter("/*")
public class chatFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("过滤器1被创建了");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
httpRequest.setCharacterEncoding("UTF-8");
// 设置响应的字符编码
servletResponse.setContentType("text/html;charset=UTF-8");
// 继续处理请求
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
System.out.println("过滤器1被销毁了");
}
}
8.监听器
1.ServletContextListener:监听ServletContext对象的创建和销毁事件。
当Web应用程序启动时,Servlet容器会调用contextInitialized(ServletContextEvent sce)方法。
当Web应用程序停止时,Servlet容器会调用contextDestroyed(ServletContextEvent sce)方法。
2.HttpSessionListener:监听HttpSession对象的创建和销毁事件。
当用户首次与Web应用程序交互并创建一个新的会话时,Servlet容器会调用sessionCreated(HttpSessionEvent se)方法。
当用户会话超时、用户关闭浏览器或调用invalidate()方法时,Servlet容器会调用3.sessionDestroyed(HttpSessionEvent se)方法:ServletRequestListener(不太常用,因为HttpServletRequest对象通常是短暂的):
监听ServletRequest对象的创建和销毁事件。但请注意,由于HttpServletRequest对象通常是短暂的(与每个请求相关联),因此ServletRequestListener在实际应用中并不常用。
示例:
public class MyServletContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
// 在Web应用程序启动时执行的操作
System.out.println("Web应用程序已启动");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
// 在Web应用程序停止时执行的操作
System.out.println("Web应用程序已停止");
}
}