JavaWeb入门级整体思维导图--包括期末考试复习方向

目录

1.JDBC

2.JavaBean

3.Servlet

4.MVC

5.过滤器

6.监听器

7.JSP

基本语法

指令

jsp文件头部<%@ page contentType="text/html;charset=UTF-8" language="java" %>

import-导包<%@ page import="java.util.Map" %>

异常包%@ errorPage%>

静态包含<%@include file=“ url”%> 与动态jsp标签存在区别

引用第三方标签<%@taglib url%>

动作标签

动态标签--项目中引用较多

批量赋值表单--个人接触较少

JSTl

引用第三方标签<%@taglib url%>

core库

fmt库

EL表达式

9种内置对象

1.request(请求对象)

2.response(响应对象)

3.session(会话对象)

session的常用方法

4.application(应用程序对象)

补充

题库

题库1

题库2

二.判断题(共12题,24.0分)

三.简答题(共4题,60.0分)

新版的eclipse

老版的eclipse

老版IDEA

题库3

二.判断题(共10题,20.0分)

三.简答题(共2题,10.0分)

四.编程题(共2题,50.0分)根据课堂提示,完善模拟登录的功能。

题库4

题库5

三.单选题(共2题,10.0分)

四.解答题(共2题,20.0分)

题库6

二.判断题(共11题,11.0分)

三.解答题(共1题,10.0分)

整张试题套卷

复习题库

复习资料

8.Web应用常见技术

9.拓展

10.开发工具


1.JDBC

statement :陈述

Preparestatement:准备语句


	/**
     * <p>
     * JDBC编程六部曲
     * 第一步:注册驱动   
     Class.forName(com.mysql.cj.jdbc.Drive)--- 
     DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
     * 第二步:获取数据库连接    Connection connection=DiverManager.getConnection(url,username,password);
                              statement=connection.statement(sql);
     * 第三步:获取数据库操作对象
     * 第四步:执行SQL语句
     * 第五步:处理查询结果集
     * 第六步:释放资源
     * <p/>
     *
 
     */
    public static void jdbcProgram() {
        //定义数据库连接对象
        Connection connection = null;
        //定义数据库操作对象
        Statement statement = null;
        //定义处理结果集对象
        ResultSet resultSet = null;

        try {
            //第一步:注册驱动,通过创建驱动对象告知JDBC,我们即将连接哪个厂商的数据库
            //注册驱动(new com.mysql.jdbc.Driver()也是可以的)
            Driver driver = new com.mysql.cj.jdbc.Driver();
            DriverManager.registerDriver(driver);

            DriverManager.registerDriver(com.mysql.cj.jdbc.Driver())

            加载
            Class.forName("com.mysql.cj.jdbc.Driver");
            
            //第二步:获取数据库连接
            //注意:Connection连接对象不能随意创建,最后使用完需要手动关闭
            //url统一资源定位
            String url = "jdbc:mysql://ip:3306/test";
            String userName = "zhangsan";
            String passWord = "zhangsan@";
            
            connection = DriverManager.getConnection(url, userName, passWord);

            //第三步:获取数据库操作对象
            //一个连接对象,可以创建多个数据库操作对象
            statement = connection.createStatement();
           preparedStatement = connection.prepareStatement(sql); 

            //第四步:执行SQL
            String sql = StringUtils.join("select * from `user` where userName = 'lisi'");

            //将sql语句发送给数据库管理系统,数据库管理系统(DBMS)会编译并执行该sql语句,把查询结果集放到ResultSet结果集对象中
            resultSet = statement.executeQuery(sql);
            resultSet = statement.executeUpdate(sql);
            

            //第五步:处理查询结果集
            //处理查询结果集,一个Statement可以得出多个ResultSet
            //resultSet.next()方法作用:if the new current row is valid, return true. if there are no more rows, return false
            //将光标向前移动一行,如果指向当前行有记录,则返回true,若指向当前行无记录,返回false
            
            while (resultSet.next()) {
                //获取当前光标指向行中的数据(通过特定类型获取数据)
                //该方式,明确知道字段的类型,可以节省类型转换花费的性能,该方式的程序更加健壮,性能更高,推荐使用
                int id = resultSet.getInt("id");
                String name = resultSet.getString("userName");
                String status = resultSet.getString("status");
                System.out.println("id:" + id + ",用户名:" + name + ",有效状态:" + status);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //第六步:释放资源,分别进行try catch
            //从小的开始关闭
            try {
                if (resultSet != null) {
                    resultSet.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }

            try {
                if (statement != null) {
                    statement.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }

            printStackTrace :打印异常
关闭
            try {
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }
package util;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class JDBCUtil {
    private Connection connection;
    Properties prop = new Properties();
    InputStream input = null;


    public String getconnection() {

//        String url = "jdbc:mysql://localhost:3306/user";
//        String username = "root";
//        String password = "123456";

        // 从 properties 中获取数据库连接信息
//        String url = prop.getProperty("url");
//        String username = prop.getProperty("username");
//        String password = prop.getProperty("password");

        try {
            //导入properties
            input = new FileInputStream("B:\\javaweb\\Shop-2\\src\\main\\java\\util\\jdbc.properties");
            prop.load(input);

            String url = prop.getProperty("url");
            String username = prop.getProperty("username");
            String password = prop.getProperty("password");

            // 1.加载数据库驱动程序
            Class.forName("com.mysql.cj.jdbc.Driver");

            System.out.println("驱动连接成功!");
            if(connection==null||connection.isClosed()) {
                //2.创建connection 进行连接,参数:url,username,password
                //        String url = "jdbc:mysql://localhost:3306/user";
                //        String username = "root";
                //        String password = "123456";

                connection = DriverManager.getConnection(url, username, password);
                return null;
            }

        } catch (ClassNotFoundException | SQLException | IOException e ) {
            System.out.println("驱动连接失败!");
            throw new RuntimeException(e);
        }
        return null;
    }

//    //创建一个预编译的 SQL 语句(PreparedStatement)
//    public PreparedStatement prepareStatement(String sql) throws SQLException {
//        if (connection == null || connection.isClosed()) {
//            throw new IllegalStateException("数据库连接未初始化或已关闭");
//        }
//        return connection.prepareStatement(sql);
//    }


//变长参数更新  params-参数  对已存储数据进行更新,参数不固定
    public boolean paramsUpdate(String sql, Object... params) {
        getconnection();
        //statement与preparedstatement区别
        //1、语法不同: PreparedStatement可以使用预编译的sql,只需要发送一次sql语句,后面只要发送参数即可,公用一个sql语句。Statement只能使用静态的sql。
        //2、效率不同: PreparedStatement使用了sql缓冲区,效率要比Statement高。
        //3、安全性不同: PreparedStatement可以有效的防止sql注入,而Statement不能防止sql注入。

// 1). PreparedStatement.execute()方法:2). PreparedStatement.executeQuery()方法:3). PreparedStatement.executeUpdate()方法:
// 1). PreparedStatement.execute()方法
//如果第一个结果是ResultSet对象返回true;
//如果第一个结果是执行语句后更新的行数或者没有结果返回false。
//2). PreparedStatement.executeQuery()方法:
//     返回执行查询语句后得到的ResultSet结果集,注意:该结果集永远不能为null。
//3). PreparedStatement.executeUpdate()方法:
//     返回一个int类型的值,该值代表执行INSERT、DELETE以及UPDATE语句后的更新行数。
//     如果该值为0,则代表SQL语句没有执行成功。


//        PreparedStatement  prepared 准备  创建一个预编译的 SQL 语句
        try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
            // 设置参数
//遍历参数数组 params,将每个参数值设置到 PreparedStatement 对象service中。
// i + 1 是因为 PreparedStatement 参数索引从 1 开始,而不是 0。

            for (int i = 0; i < params.length; i++) {
// 这一行代码 preparedStatement.setObject(i + 1, params[i]); 的作用是将参数数组 params 中的每个参数值设置到 PreparedStatement 对象的相应位置
                preparedStatement.setObject(i + 1, params[i]);
            }
            // 执行更新操作
            int rowsAffected = preparedStatement.executeUpdate();
            return rowsAffected > 0; // 返回更新行数是否大于0,表示更新成功
        } catch (SQLException e) {
            e.printStackTrace();
            return false; // 更新操作失败
        }
    }


//变长 sql 查询
    public ResultSet prepareQuery(String sql, Object... params) {
        getconnection();
        try {
            PreparedStatement preparedStatement = connection.prepareStatement(sql);

            for (int i = 0; i < params.length; i++) {
                preparedStatement.setObject(i + 1, params[i]);
            }

            return preparedStatement.executeQuery();
        } catch (SQLException e) {
            e.printStackTrace();
            return null; // or throw an exception
        }
    }
//关闭
    public void closeConnection(){
        try{
            if(connection!=null&&!connection.isClosed()) {
                connection.close();
            }
        } catch (SQLException e) {
            System.out.println("关闭失败!");
        }
    }

}

2.JavaBean

model:属性类

如:
user--- private user_id      user_name 
public String getUser_id(){
return user_id
}

public void setUser_id( User_id){
this.User_id=User_ids
}

DAO---指具体的功能实现

3.Servlet

1.@webServlet web.xml 配置虚拟路径

2.重写doGet/doPost

3.HttpServlet

生命周期:1.init()初始化 2.运行阶段 doGet() doPost() destroy()销毁

4.MVC

M :模型; javaBean;-java

V:视图:view;-jsp

C:控制器:controller -servlet

5.过滤器

继承HttpFilter 超类 Filter接口

doFilter 方法 request response chain放行

@WebFilter

过滤请求

6.监听器

HttpSessionListener 接口

application--session --request

session.invalidate(); 立即销毁 超时销毁-30分钟 项目关闭

监听器应用:在线人数更新

7.JSP

基本语法

脚本语法:<% 表达式;%>

变量是声明:<%! 表达式;%>

表达式:<%=输出; %>

注释:<%-- --%>

指令

jsp文件头部<%@ page contentType="text/html;charset=UTF-8" language="java" %>

表明:contentType=“text/html”html文件

charset="UTF-8" 中文编码

language=“java”java语言

总体:jsp=html+java

import-导包<%@ page import="java.util.Map" %>

如:java代码导包:java.util.*

<%@ page import="java.util.Map" %>
<%@ page import="java.util.List" %><
异常包%@ errorPage%>

<%@ errorPage%> 错误页面显示<%@page errorPage="errorPage.jsp" %>当前页面出现错误时,跳转该errorPage.jsp页面

<%@ isErrorPage%>

静态包含<%@include file=“ url”%> 与动态jsp标签存在区别

这个标签可以简化代码的重复性;

把主界面分为3部分:1.头部2.导航,3.主要内容

在home页面中导入3个部分的各自部分构成整体

使用方式

<%@ include file="文件相对 url 地址" %> 使用相对较少,在javaweb中,使用动态标签较多

<jsp:include page="header.jsp" />

引用第三方标签<%@taglib url%>

JSTL---uri prefix
<%@ taglib prefix="c" uri="myjstl" %> prefix 的意思是:前缀

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%@ taglib prefix="c" uri="myjstl" %>这句话将JSTL core标签库引入jstltest.jsp。

prefix="c"是为了使用方便而给该标签库起的一个别名,这样在使用时就不用每次都要把较长的标签库名写出来。

uri="myjstl"将在下面做详细介绍。

<c:out value="${param.username}"/>是这个库中的out标签的使用例。本文不对jstl标签的用法做详细说明。

动作标签

<jsp:forward>

服务器转发 ,request对象的接力。

语法格式:

<jsp:forward page={"relativeURL" | "<%= expression%>" } />

或者

<jsp:forward page="{relativeURL | <%= expression%>}">

<jsp:param name="parameterName" value="{parameterValue | <%= expression%>}" />

</jsp:forward>

  • <jsp:forward>元素允许在运行时分派当前的 request 对象到其他 JSP 页面或 Java Servlet 类等。且它有效地终止了当前页的执行,即<jsp:forward>标签以下的代码将不能执行。
  • 可以向目标文件传送参数和值,如果使用的是<jsp:param>标签,目标必须是一个动态的文件,能够处理参数。
  • 如果使用了缓冲输出,则在 request 对象被转交前,缓冲区将被清空。如果使用了非缓冲输出,那么使用<jsp:forward>时就要注意。如果在使用<jsp:forward>之前,JSP文件已经有了数据,那么forward将导致IllegalStateException异常的发生。

总结作用:跳转页面,传递参数。

<jsp:include>动态标签--项目中引用较多

便于划分区域,减少重复性代码

<jsp:include page="header.jsp" />

<jsp:param>

标签传参

<jsp:useBean>批量赋值表单--个人接触较少

jsp:useBean动作用来装载一个将在JSP页面中使用的JavaBean。这个功能非常有用,因为它使得我们既可以发挥Java组件重用的优势,同时也避免了损失JSP的方便性。

语法:

<jsp:useBean id="name" class="package.class" scope="scope"/>

id:JavaBean的引用名

class:用于指定JavaBean的类

scope:用于指定JavaBean的范围,默认情况下,scope被设置为page

<jsp:setProperty>

setProperty动作用于设置useBean中指定的JavaBean的属性值。setProperty动作指定名称、属性、值和参数,用于赋给JavaBean的属性。setProperty动作的语法如下。

语法:

<jsp:setProperty name="beanName" property="propertyName" value="value" param="parameter"/>

name:指定useBean中使用的JavaBean的id

property:指定要为之设置值的JavaBean的属性名称

value:指定要为属性设置的值

param:指定用于输入数据的表单元素名称,并给属性赋值

注意:param属性不能与value属性一起使用。

<jsp:getProperty>

useBean中id所指定的对象通过setProperty中对property指定的属性进行赋值后,可以使用getProperty动作获取JavaBean中指定的属性值。

语法:

<jsp:getProperty name="beanName" property="propertyName"/>

name:指定useBean中使用的JavaBean的id

property:指定要获取JavaBean的属性名称

JSTl

引用第三方标签<%@taglib url%>

JSTL---uri prefix
<%@ taglib prefix="c" uri="myjstl" %> prefix 的意思是:前缀

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%@ taglib prefix="c" uri="myjstl" %>这句话将JSTL core标签库引入jstltest.jsp。

prefix="c"是为了使用方便而给该标签库起的一个别名,这样在使用时就不用每次都要把较长的标签库名写出来。

uri="myjstl"将在下面做详细介绍。

<c:out value="${param.username}"/>是这个库中的out标签的使用例。本文不对jstl标签的用法做详细说明。

core库

语句:分支 <c:if text=${条件}> HTML语句 </c:if>

多重分支重复表达 <c:choose>、<c:when>、<c:otherwise>标签

循环:<c:forEach items=${}>

1、作用:这三个标签用于实现复杂条件判断语句,类似“if,else if,else”的条件语句。

2、语法:

<c:choose>

<c:when test=""></c:when>

<c:otherwise></c:otherwise>

</c:choose>

3、属性:

<c:choose>标签没有属性,可以被认为是父标签, <c:when>、 <c:otherwise>将作为其子标签来使用。

<c:when>标签等价于“if”语句,它包含一个 test属性,该属性表示需要判断的条件(同<c:if>标签中的test属性)。

<c:otherwise>标签没有属性,它等价于“else”语句。

4、实例:

<c:set value="100"  var="chooseTest"  scope="page" ></c:set><!-- 赋值 -->
  	<c:choose>
  		<c:when test="${chooseTest==100}">
  			chooseTest的值为100
  		</c:when>
  		<c:when test="${chooseTest==200}">
  			chooseTest的值为200
  		</c:when>
  		<c:otherwise>
  			chooseTest的值不是100,也不是200
  		</c:otherwise>
  	</c:choose>
  	<!-- 结果:chooseTest的值为100 -->

<c:forEach>标签

1、作用:<c:forEach>为循环控制标签。

2、语法:<c:forEach items="" var="" begin="" end="" step="" varStatus=""></c:forEach>

属性:

序号

属性

描述

1

items

进行循环的集合(可选)

2

var

进行循环的对象的变量名,若存在 items 属性,则表示循环集合中对象的变量名(类似于将items中的集合赋值给该变量)(可选)

3

begin

开始循环的下标,默认从0开始(可选)

4

end

结束循环的下标,默认循环到集合的最后(可选)

5

step

循环的步长(也就是每次循环几条数据),默认为 1(一条一条循环) (可选)

6

varStatus

显示循环状态的变量(可选)

<table border="1">
  	<tr>
  	<th>序号</th>
  	<th>编号</th>
  	<th>姓名</th>
  	<th>年龄</th>
  	<th>年级</th>
  	</tr>
  <c:forEach items="<%=studentList %>" var="student"  begin="0" end="<%=studentList.size() %>" step="1" varStatus="order">
  <%-- 结合 servlet传参--%>
  <tr>
  <td>${order.index+1 }</td>
  <td>${student.number }</td>
  <td>${student. name}</td>
  <td>${student.age }</td>
  <td>${student.grade }</td>
  </tr>
  </c:forEach>
  </table>
fmt库

格式化数据

<%@ taglib uri="Oracle Java Technologies | Oracle" prefix="fmt" %>

<fmt:formatDate />

此标签可以将日期格式化.
属性介绍:
value 用来格式化的时间或日期
type 指定格式化的是日期还是时间,或者两者都是取值范围:date,time,both
pattern 自定义格式化样式
dateStyle 日期的格式化样式
timeStyle 时间的格式化样式
timeZone 指定使用的时区
var 存储格式化后的结果
scope 指定存储的范围

    
Java代码
<fmt:setLocale value="zh_cn" />  
<fmt:formatDate value="<%=new Date()%>" />  
<br />  
<fmt:setLocale value="zh_tw" />  
<fmt:formatDate value="<%=new Date()%>" /> 

<fmt:setLocale value="zh_cn" />
<fmt:formatDate value="<%=new Date()%>" />
<br />
<fmt:setLocale value="zh_tw" />
<fmt:formatDate value="<%=new Date()%>" />    大家可以看到大陆和台湾显示日期的格式是有区别的.
   显示结果:
   2009-12-7
   2009/12/7

EL表达式

一、EL表达式简介

EL表达式全称:Expression Language,即表达式语言

EL表达式作用:代替JSP页面中表达式脚本进行数据的输出(只能获取数据,不能设置数据)

EL表达式的格式是:${表达式} ,注:EL表达式写在jsp页面中,表达式一般是域对象的key

二、EL表达式搜索域数据的顺序

EL表达式主要是输出域对象中的数据,当四个域对象都有同一个key的值时,EL表达式会按照四个域对象的范围从小到大进行搜索,找到就输出,与四个域对象声明的先后顺序无关

三、EL表达式输出Java类的属性

例如:

<body>

原java代码设置参数
    <%
        Person person = new Person();
        person.setName("JayChou");
        person.setPhones(new String[]{"123","456","789"});
        //给cities属性赋值
        List<String> cities = new ArrayList<String>();
        cities.add("北京");
        cities.add("上海");
        cities.add("深圳");
        person.setCities(cities);
        //给map属性赋值
        Map<String,Object> map = new HashMap<>();
        map.put("key1","value1");
        map.put("key2","value2");
        map.put("key3","value3");
        person.setMap(map);
        pageContext.setAttribute("p", person);
    %>
    EL表达式显示数据+<c:forEach items="" var="" begin="" end="" step="" varStatus=""></c:forEach>循环输出结果
    <%--EL表达式中对象名.属性名不找属性的值,而是找名字对应的getXxx方法,没有此方法会报错--%>
    输出Person:${ p }<br/>
    输出Person的name属性:${p.name} <br>
    输出Person的phones数组地址值:${p.phones} <br>
    输出Person的phones数组属性值:${p.phones[2]} <br>
    输出Person的cities集合中的元素值:${p.cities} <br>
    输出Person的List集合中个别元素值:${p.cities[2]} <br>
    输出Person的Map集合: ${p.map} <br>
    输出Person的Map集合中某个key的值: ${p.map.key1} <br>
    <%-- 注意,即使没有age属性,但因为有getAge方法,也可得出结果 --%>
    输出Person的age值:${p.age} <br>
</body>

四、EL表达式的运算

语法:${运算表达式},EL表达式支持以下运算符:

1. 关系运算

2. 逻辑运算

3. 算数运算

4. empty运算

empty运算可以判断一个数据是否为空,若为空,输出true,不为空,输出false

以下几种情况为空(在原本的key之前加empty关键字):

值为null、空串

值为Object类型的数组且长度为0 (注:其他类型的长度为0的数组值为非空)

List、Map集合元素个数为0

5. 三元运算

表达式 1?表达式 2:表达式 3

表达式1为真返回表达式2的值,表达式1为假返回表达式3的值

例:

<body>
    <%
        //1、值为null值时
        request.setAttribute("emptyNull", null);
        //2、值为空串时
        request.setAttribute("emptyStr", "");
        //3、值是Object类型数组,长度为零的时候
        request.setAttribute("emptyArr", new Object[]{});
        //4、list集合,元素个数为零
        List<String> list = new ArrayList<>();
        request.setAttribute("emptyList", list);
        //5、map集合,元素个数为零
        Map<String,Object> map = new HashMap<String, Object>();
        request.setAttribute("emptyMap", map);
        //6、其他类型数组长度为0
        request.setAttribute("emptyIntArr", new int[]{});
    %>
    
    ${ empty emptyNull } <br/>
    ${ empty emptyStr } <br/>
    ${ empty emptyArr } <br/>
    ${ empty emptyList } <br/>
    ${ empty emptyMap } <br/>
    ${ empty emptyIntArr} <br/>
    <%-- 三元运算   --%>
    ${ 12 != 12 ? "相等":"不相等" }
</body>

6. “.”点运算和“[ ]”中括号运算

点运算可以输出某个对象的某个属性的值(getXxx或isXxx方法返回的值)

中括号运算可以输出有序集合中某个元素的值

注:中括号运算可以输出Map集合中key里含有特殊字符的key的值

例:

<body>
    <%
        Map<String,Object> map = new HashMap<String, Object>();
        map.put("a.a.a", "aaaValue");
        map.put("b+b+b", "bbbValue");
        map.put("c-c-c", "cccValue");
        request.setAttribute("map", map);
    %>
    <%--特殊的key需要去掉最开始的"."并使用中括号和单引号(双引号)包起来--%>
    ${ map['a.a.a'] } <br> <%--如果不加中括号则相当于三个.运算--%> //错误的是 ${map.a.a.a}
    ${ map["b+b+b"] } <br> <%--如果不加中括号则相当于三个+运算--%>
    ${ map['c-c-c'] } <br> <%--如果不加中括号则相当于三个-运算--%>
</body>

五、EL表达式的11个隐含对象

EL表达式中的11个隐含对象是EL表达式自己定义的,可以直接使用

(1) pageScope、requestScope、sessionScope、applicationScope对象的使用

例:

<body>
    <%
        pageContext.setAttribute("key1", "pageContext1");
        pageContext.setAttribute("key2", "pageContext2");
        request.setAttribute("key2", "request");
        session.setAttribute("key2", "session");
        application.setAttribute("key2", "application");
    %>
    <%--  获取特定域中的属性  --%>
    ${ pageScope.key1 } <br>
    ${ applicationScope.key2 }
    <%--  若直接获取key1或key2依然按照之前范围从小到大检索,无法获取指定域  --%>
</body>

(2) pageContext对象的使用

例:

<body>
    <%-- 先通过pageContext对象获取request、session对象,再获取以下内容 --%>
    <%--
        获取请求的协议:request.getScheme()
        获取请求的服务器ip或域名:request.getServerName()
        获取请求的服务器端口号:request.getServerPort()
        获取当前工程路径:request.getContextPath()
        获取请求的方式:request.getMethod()
        获取客户端的ip地址:request.getRemoteHost()
        获取会话的唯一标识:session.getId()
    --%>
1.协议: ${ pageContext.request.scheme }<br>
2.服务器ip:${ pageContext.request.serverName }<br>
3.服务器端口:${ pageContext.request.serverPort }<br>
4.获取工程路径:${ pageContext.request.contextPath }<br>
5.获取请求方法:${ pageContext.request.method }<br>
6.获取客户端ip地址:${ pageContext.request.remoteHost }<br>
7.获取会话的id编号:${ pageContext.session.id}<br>
</body>
 

(3) param、paramValues对象的使用

例:

<body>
    获取请求参数username的值:${ param.username } <br>
    获取请求参数password的值:${ param.password } <br>
    获取请求参数中第一个hobby的值:${ paramValues.hobby[0] } <br>
    获取请求参数中第二个hobby的值:${ paramValues.hobby[1] } <br>
    <%--  有多个同名的key时使用paramValues的索引值决定获取哪一个,使用param只可获取第一个  --%>
    使用param获取hobby的值:${ param.hobby } <br>
</body>

(4) header、headerValues对象的使用

例:

<body>
    输出请求头[user-Agent]的值:${ header["User-Agent"] }<br>
    输出请求头中第一个[user-Agent]的值:${ headerValues["User-Agent"][0] }<br>
</body>

(5) cookie对象的使用

例:

<body>
    获取Cookie的名称:${ cookie.JSESSIONID.name } <br>
    获取Cookie的值:${ cookie.JSESSIONID.value } <br>
</body>

(6) initParam对象的使用

例:

<body>
    输出&lt;Context-param&gt;username的值:${ initParam.username } <br>
    输出&lt;Context-param&gt;url的值:${ initParam.url } <br>
</body>

9种内置对象

1.request(请求对象)

该对象是“HttpServletRequest”接口的一个实现类对象,该对象表示客户端向服务端发送的一次请求;

该对象属于“作用域”对象,它的作用域仅限于一次请求期:该作用域从客户端向服务端发送请求开始,服务端接受到客户端请求后终止(我们可以通过请求转发将该请求延长),在request对象中存放的数据只能在其作用域内起作用。

常用方法

1.设置request对象的编码集: 默认情况下客户端向服务端提交的数据如果存在英文会出现乱码,则需要设置request对象的编码集。

request.setCharacterEncoding("UTF-8");

2.根据参数名获得对应的参数值:parameter 参数

request.getParameter("paramName");

String username=request.getParameter("username");

String password=request.getParameter("password");

3.根据参数名获得一组同名的参数值,返回字符串数组:

request.getParameterValues("paramName");

4.向request作用域中设置一个属性:参数1"attrName"为属性名,参数 2"attrName"为属性值(Object)

request.setAttribute(attrName,attrName);

//登录失败

request.setAttribute("errMSG","用户名或密码错误!");

5.根据属性名获取属性值:从request作用域中获取一个属性的值,默认为Object类型

request.getAttribute(attrName);

6.请求转发:使用请求转发实现页面跳转,请求转发可以将请求对象转发到指定位置(其他页面或 Servlet 中)

request.getRequestDispatch(url).forward(request,response);

2.response(响应对象)

该对象属于 HttpServletResponse 接口的一个实例,该对象表示服务端向客户端发送的一次回应

常用方法

1.重定向:url为目标地址

response.sendRedirect(url);

2.设置响应的内容类型与编码集:

response.setContentType("text/html;charset=utf-8");

3.获得一个输出流 ,通过该输出流可以向客户端直接输出内容,如果需要输出中文则需要设置“内容类型”:

response.getWriter();

补充–请求转发和重定向的区别:--考试一般很大概率会考

相同点:可以实现页面跳转。

不同点:

(1)使用请求转发实现页面跳转后,地址栏显示的地址为请求转发的源地址而不是目标地址。使用重定向实现页面跳转后,地址栏显示的是目标地址。---地址不改变

(2)请求转发不仅可以传递字符串数据还可以将请求对象传递给目标地址。重定只能传递字符串数据。--传递参数的区别

(3)请求转发属于服务器内部转发,不会由客户端发送新请求。重定向是由客户端再次发送的一次请求。

3.session(会话对象)

该对象是"HttpSession"接口的一个实现类对象

session表示一次会话,什么是会话呢?

(1)会话指“请求与响应”的集合;

(2)会话指客户端“第一次”向服务端发送请求开始,直到“客户端的浏览器关闭”或“服务端关闭”或“超时”或“服务端手动销毁”终止;

(3)在会话开始到会话结束,期间的所有“请求和响应”都在同一个会话中。

在JavaWeb中会存在session的原因?

(1)首先理解Http协议:Http协议是一个“无状态”的协议,无状态指在该协议下客户端与服务端的连接状态不会保持;

(2)由于在使用Http协议的情况下,服务端无法确定新的请求之前是否请求过,但是通过session却可以维护当前客户端和服务端的状态;

(3)web开发中可以通过session机制来维持客户端与服务端的关系。

Web应用如何通过session类来维持客户端与服务端的关系呢?【靠sessionId维持】

(1)当客户端第一次访问服务端时,服务端检测请求中是否存在sessionId,如果不存在则表示该客户端是第一次访问;

(2)服务端创建一个session对象并生成一个唯一的sessionId,将session对象及sessionId存入到服务端,并将sessionId响应到客户端;

(3)客户端浏览器接收到服务端响应的sessionId后,会自动的将该sessionId保存下来(临时存储);

(4)其次客户端每次向服务端发送请求时,都会将sessionId自动发送到服务端;

(5)服务端接收到sessionId检测该Id是否有效,如果有效则表示该客户端不是第一次访问,通过可以从session对象获取存储的数据。

session依赖于浏览器,不同的浏览器访问同一个服务器时会产生不同sessionId

session也属于作用域对象,其作用域为第一次请求到session销毁结束,在作用域内的数据对同一个session是共享的。

session开始和销毁的条件

session开始:当第一次访问服务端时session开始

session销毁 :

a.关闭浏览器

b.服务端手动销毁session,使用

session.invalidate();

c.超时,当客户端在一定时间内未向服务端发送任何请求时,服务端虎认为该session失效自动销毁(tomcat的默认超时时间为30分钟)

d.服务器关闭或重启

session的常用方法

1.获得sessionId

session.getId();

2.销毁session

session.invalidate();

3.向session作用域中存放一个属性

session.setAttribute(attrName,attrValue);

4.从session中获取一个属性值

session.getAttribute(attrName);

5.从session中移除一个属性

session.removeAttribute();

4.application(应用程序对象)

该对象是ServletContext接口的一个实现类对象,该对象表示当前“应用服务器”;

该对象也属于作用域对象,其中可以存放数据,但该对象的作用域为整个应用服务器,因此在application对象存放的数据为整个服务器的共享数据,关于用户的隐私数据不允许在该对象存放;

常用方法

(1)向 application 对象中添加一个属性:

application.setAttribute(“name”,obj);

(2)从 application 获取一个属性,根据属性名获取:

application.getAttribute(“name”);

5.page(页面对象)

当前页面对象,等同于this关键字。

6.pageContext(页面上下文对象)

该对象为一个作用域对象,可以通过pageContext对象在当前页面存储数据,它的作用域仅限于当前页面;

可以通过pageContext对象获取其他内置对象。

7.out(输出对象)

该对象是一个输出流对象,用于向页面输出内容。

8.config(配置对象)

config对象为配置对象,在页面中可以获取配置信息。

9.exception(异常对象)

该对象为异常对象,使用该对象可以在JSP页面中处理异常

补充

1.session是会话变量,只要同一个浏览器没有被关闭,session对象就会存在。因此在同一个浏览器窗口中,无论向服务器发送多少请求,session对象只有一个。但是如果在一个会话中,客户端长时间不向服务器发出请求,session对象就会自动消失。这个时间取决于服务器,但是我们可以通过编写程序进行修改这个session的生命周期的时间。session.setMaxInactiveInterval(10000);//用来设置session的有效期为10000秒,超出这个范围将失效。

并且通过session对象可以存储或者读取客户的相关信息,例如用户名或购物信息等,可以通过session对象的setAttribute(String name,Object obj)方法和getAttribute(String name)的方法实现。注意的是getAttribute()方法的返回值是Object类型,如果将获取到的信息赋给String类型的变量,则需要进行强制类型转换或者调用其的toString()方法。

session.setAttribute("user","小名");

String user=(String)session.getAttribute("user");

2.application它类似于系统的全局变量,用于保存所有程序中的公有数据。它在服务器启动时自动创建,在服务器停止时销毁。当application对象没有被销毁的时候,所有用户都可以享用该application对象。它的生命周期可以说是最长的。但是其应用程序初始化的参数是要在web.xml文件中进行设置的,通过<context-param>标记配置应用程序初始化参数。也就是说同时再打开另一个浏览器,他们使用的都是同一个application对象。

题库

1.jsp路径
在helloapp工程中有一个hello.jsp,它的文件路径WebContent/hello/hello.jsp,那么在浏览器端访问hello.jsp的URL是 (http://localhost:8080/helloapp/hello/hello.jsp )。

2.标签分为:

  • 成员变量的存储:没有实例化的成员变量放在栈中;实例化后的对象放在堆中,栈中放的是指向堆中对象的引用地址。
  • 成员变量在对象被创建时而存在,当对象被GC回收时消失,生存周期适中。
  • 成员变量作用在整个类中(静态方法除外),不能在定义的同时进行初始化,只能通过对象访问。

脚本标签:<% ;%> 在jsp中编写java代码

变量声明:<%! ;%>成员变量

表达式:在jsp页面输出<%= %> printf、out.print、out.write

jsp注释:<%-- --%>

题库1

下面选项中,关于 JSP 脚本片断的声明语法格式,正确的是( D )

(5.0分)

  • A、

<% 表达式; %>

  • B、

<%= 表达式; %>

  • C、

<%= 表达式 %>

  • D、

<%! 表达式; %> <%! ;%>

下列选项中,可以启动 Tomcat 的是哪个命令( )

(5.0分)

  • A、

start.bat

  • B、

shutdown.bat

  • C、

startup.dll

  • D、

startup.bat

正确答案: D 我的答案:D

下面选项中,Tomcat 安装目录的子目录描述,错误的是( )

(5.0分)

  • A、

conf:用于存放 Tomcat 的各种配置文件

  • B、

bin:用于存放 Tomcat 的可执行文件和脚本文件

  • C、

webapps:Web 应用程序的主要发布目录

  • D、

lib:用于存放 Tomcat 服务器和 Web 应用程序需要访问的 DLL 文件---主要是依赖包

正确答案: D 我的答案:D

关于 CSS 的说法正确的是( )。

(5.0分)

  • A、

CSS 代码不能重用

  • B、

CSS 是一组格式设置规则,主要控制 Web 页面的外观

  • C、

CSS 没有使页面的内容与表现形式相分离

  • D、

CSS 只能写在 HTML 的头部中

正确答案: B 我的答案:B


关于B/S与C/S模式的介绍正确的是( )

(5.0分)

  • A、

B/S是浏览器/服务器模式,服务器装好后,其他人还需要在客户端的电脑上安装专用的客户端软件才能正常浏览操作。 X

  • B、

C/S是浏览器/服务器模式,服务器装好后,其他人还需要在客户端的电脑上安装专用的客户端软件才能正常浏览操作。 X

  • C、

C/S是客户端/服务端模式,服务器装好后,用浏览器就可以正常浏览。 X

  • D、

B/S是浏览器/服务器模式,服务器装好后,用浏览器就可以正常浏览。

正确答案: D 我的答案:D


在helloapp工程中有一个hello.jsp,它的文件路径WebContent/hello/hello.jsp,那么在浏览器端访问hello.jsp的URL是 (http://localhost:8080/helloapp/hello/hello.jsp )。

(5.0分)

  • A、

http://localhost:8080/helloapp/hello.jsp

  • B、

http://localhost:8080/hello/hello.jsp

  • C、

http://localhost:8080/hello.jsp

  • D、

http://localhost:8080/helloapp/hello/hello.jsp

正确答案: D 我的答案:D得分: 5.0分

9

关于 HTML 说法不正确的是( )。

(5.0分)

  • A、

HTML 是一系列标签组合而成的文本文件

  • B、

HTML 的语法格式复杂,功能不齐全

  • C、

HTML 是构建 Web 网页的主要语言之一

  • D、

HTML 是超文本标记语言

正确答案: B 我的答案:B得分: 5.0分

10

下面关于 JSP 注释的说法中,正确的是( )

(5.0分)

  • A、

JSP 注释语法格式:<!- 注释信息 ->

  • B、

JSP 注释不会发送到客户端

  • C、

JSP 注释会在服务器端编译

  • D、

JSP 注释与 HTML 注释是一样的

正确答案: B 我的答案:B得分: 5.0分

11

关于JSP页面中嵌入java代码的描述正确的是( )

(5.0分)

  • A、

JSP页面中的java代码只能嵌入在“<%”与“%>”之间

  • B、

JSP页面只能嵌入HTML代码,不能嵌入java代码

  • C、

在JSP页面中的任何地方都可以直接写java代码

  • D、

JSP页面中的java代码只能嵌入在“<#”与“#>”之间

正确答案: A 我的答案:A得分: 5.0分

1

JAVAEE 规定了,一个 web 应用下子目录的命名不能随意的,其中 WEB-INF 目录是必须的(5.0分)

我的答案: 得分: 5.0分正确答案:

2

Tomcat不是web应用服务器(5.0分)

我的答案:× 得分: 5.0分正确答案:×

3

C/S模式不需要专门的客户端安装程序,分布功能弱,针对点多面广且不具备网络条件的用户群体,不能够实现快速部署安装和配置

(5.0分)

我的答案:× 得分: 5.0分正确答案:×

4

用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行

(5.0分)

我的答案: 得分: 5.0分正确答案:

何为全局变量?

全局变量就是定义在类里方法外的变量。作用于整个文件中,直接被类调用。

全局变量可以先定义再初始化,也可以定义的同时初始化

全局变量的存储:(static修饰的全局变量)存放于静态区,类加载时创建,在类中只有一份; 会跟着类的消失而消失,生存时间较长。

全局变量分为两种:static修饰的全局变量,只在该源文件中可用

extern修饰的全局变量,可以被其他类引用,作用于整个工程中。

题库2

1

创建Web应用程序的步骤正确的是( )(2.0分)

  • A、创建Web工程→创建jsp页面→运行jsp页面→发布Web工程
  • B、创建jsp页面→创建Web工程→发布Web工程→运行jsp页面
  • C、创建jsp页面→创建Web工程→运行jsp页面→发布Web工程
  • D、创建Web工程→创建jsp页面→发布Web工程→运行jsp页面

正确答案: D 我的答案:A得分: 0.0分

Web开发环境客户端所需具备的技能不包括( )(2.0分)

  • A、Javascript脚本语言
  • B、CSS样式表
  • C、Html语言
  • D、Servlet技术

正确答案: D 我的答案:D得分: 2.0分

4

关于HTML语言的描述不正确的是(A )(2.0分)

  • A、HTML是一门用来制作网页的程序语言
  • B、HTML文件必须使用html或htm为文件名后缀
  • C、HTML语言是一种标记语言,不需要编译,直接由浏览器执行
  • D、HTML语言大小写敏感,HTML与html是不一样的

正确答案: D 我的答案:D得分: 2.0分

5

Web开发环境服务端所需具备的技能不包括( )(2.0分)

  • A、Javascript脚本语言
  • B、Java语言
  • C、JSP
  • D、Servlet技术

正确答案: A 我的答案:A得分: 2.0分

6

在helloapp工程中有一个hello.jsp,它的文件路径WebContent/hello/hello.jsp,那么在浏览器端访问hello.jsp的URL是 ( )。(2.0分)

  • A、http://localhost:8080/hello.jsp
  • B、http://localhost:8080/hello/hello.jsp
  • C、http://localhost:8080/helloapp/hello/hello.jsp
  • D、http://localhost:8080/helloapp/hello.jsp

正确答案: C 我的答案:C得分: 2.0分

关于JSP页面中嵌入java代码的描述正确的是( )(2.0分)

  • A、JSP页面中的java代码只能嵌入在“<%”与“%>”之间
  • B、JSP页面只能嵌入HTML代码,不能嵌入java代码
  • C、在JSP页面中的任何地方都可以直接写java代码
  • D、JSP页面中的java代码只能嵌入在“<#”与“#>”之间

正确答案: A 我的答案:A得分: 2.0分

8

关于JavaScript的描述不正确的是( )(2.0分)

  • A与java语言一样,需要编译为class文件后才能执行
  • B、与HTML语言一样,无需编译,直接在浏览器中执行
  • C、是一种解释性的,轻量级的,基于对象的语言
  • D、基于客户端运行,无需服务端

正确答案: A 我的答案:A得分: 2.0分

二.判断题(共12题,24.0分)

一个Servlet程序就是一个实现了特殊接口的 Java类(2.0分)

我的答案: 得分: 2.0分正确答案:

3

Servlet技术是Sun公司提供的一种实现动态网页的解决方案,它是基于Java编程语言的Web服务器端编程技术,主要用于在Web服务器端获得客户端的访问请求信息和动态生成对客户端的响应消息(2.0分)

我的答案: 得分: 2.0分正确答案:

4

Java可以作为Web应用程序的后台语言(2.0分)

我的答案: 得分: 2.0分正确答案:

5

JSP页面由HTML代码和嵌入其中的Java代码所组成(2.0分)

我的答案: 得分: 2.0分正确答案:

6

B/S型模式,即浏览器/服务器结构。(2.0分)

我的答案: 得分: 2.0分正确答案:

7

Tomcat不是web应用服务器(2.0分)

我的答案:× 得分: 2.0分正确答案:×

8

pageEncoding="ISO-8859-1"表示本页面的编码格式是ISO-8859-1,这个格式是支持中文(2.0分)utf-8

我的答案:× 得分: 2.0分正确答案:×

9

C/S模式不需要专门的客户端安装程序,分布功能弱,针对点多面广且不具备网络条件的用户群体,不能够实现快速部署安装和配置(2.0分)

我的答案:× 得分: 2.0分正确答案:×

10

用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行(2.0分)

我的答案: 得分: 2.0分正确答案:

11

SQL 是用于访问和处理数据库的标准的计算机语言(2.0分)

我的答案: 得分: 2.0分正确答案:

12

Web开发环境的搭建不需要安装JDK

(2.0分)

我的答案:× 得分: 2.0分正确答案:×

三.简答题(共4题,60.0分)

1

熟悉web源程序的工程结构

新版的eclipse

Web项目名

└─src

└─main

├─java

└─webapp

├─META-INF

└─WEB-INF

└─lib

老版的eclipse

Web项目名

└─src

└─WebContent

├─META-INF

└─WEB-INF

└─lib

老版IDEA

Web项目名

├─src

│ ├─main

│ │ ├─java

│ │ ├─resources

│ │ └─webapp

│ │ └─WEB-INF

└─lib

│ └─test

│ ├─java

│ └─resources

新版IDEA

Web项目名

└─src

└─web

├─META-INF

└─WEB-INF

└─lib

任务1:请观察一下自己的工程结构,属于上述的哪一种或者哪几种?

任务2:请根据1的结果,去查阅一下,每个文件夹的作用分别是什么?可直接备注在文件夹后面。

(10.0分)

正确答案:

无标准答案。

我的答案:

属于第4种;

src:源代码的目录

META-INF:包含配置文件、资料清单

WEB-INF:安全目录,内容不允许被客服端访问

lib:存放第三方jar文件

答案解析:

工程结构非常重要,学习之处就搞清楚工程结构,有利于快速排查错误。

用jsp创建两个网页。一个显示友好错误提示语的jsp;另外一个页面编写程序的jsp,并在程序中人为制造一个运行时异常。访问产生异常的jsp,让其自动跳转到错误页。

知识储备:jsp的page指令,有两个属性errorPage和isErrorPage

提交方式:将两个jsp的代码,和运行后的完整网页(包括浏览器的地址栏)截图提交。


 

提示:网页上换行,需要用到HTML标签<br>,网页上的空格,需要用HTML转义字符&nbsp;

思路:循环+网页输出。

(20.0分

答案解析:

循环+网页输出。

注意:换行用html的<br>标签。
 

题库3

下面关于 include 指令的语法格式中,正确的是( )

(2.0分)

  • A、

<%@ include file="relativeURL"%>-----include-file

  • B、

<%@ include path="relativeURL"%>

  • C、

<%# include file="relativeURL"%>

  • D、

<%# include path="relativeURL"%>

正确答案: A 我的答案:A得分: 2.0分

2

JSP 的指令元素不包括( )。

(2.0分)

  • A、

taglib 指令

  • B、

import 指令 导包 <% @ page improt="java.util.*"%>

  • C、

include 指令

  • D、

page 指令

正确答案: B 我的答案:B得分: 2.0分

3

在 JSP 页面中包含如下 jsp 代码:
<%
out.print(new java.util.Date().toLocaleString());
%>
则下面说法中,正确的是( )

(2.0分)

  • A、

每次在客户端浏览器上访问此 jsp 页面,显示时间都是一样的

  • B、

该代码是将信息打印在服务器控制台上

  • C、

该代码是将信息打印在客户端浏览器上

  • D、

该代码是将信息打印在客户端控制台上

正确答案: C 我的答案:C得分: 2.0分

4

下列是 page 指令中的一些属性,其中,用于告知客户端浏览器采用什么文档类型的
属性是( )

(2.0分)

  • A、

Session

  • B、

contentType

  • C、

isThreadSafe

  • D、

Content

正确答案: B 我的答案:B得分: 2.0分

5

在JSP中如果要导入 java.io.* 包,应该使用( )指令

(2.0分)

  • A、

page 导包 <%@ page import ="java.io.*"%>

  • B、

taglib

  • C、

include

  • D、

forward

正确答案: A 我的答案:A得分: 2.0分

6

下面选项中,关于 JSP 脚本片断的声明语法格式,正确的是( )

(2.0分)

  • A、

<% 表达式; %> java代码

  • B、

<%= 表达式; %>输出

  • C、

<%= 表达式 %> 错误

  • D、

<%! 表达式; %> 声明

正确答案: D 我的答案:B得分: 0.0分

7

request对象的( )方法可以获取页面请求中一个表单组件对应多个值时的用户的请求数据。

(2.0分)

  • A、

String getParameterValuses(String name)

  • B、

String[] getParameterValues(String name) 数组接收多个参数

  • C、

String getParameter(String name)

  • D、

String[] getParameter(String name)

正确答案: B 我的答案:B得分: 2.0分

8

JSP页面经过编译之后,将创建一个()

(2.0分)

  • A、

servlet

  • B、

applet

  • C、

application

  • D、

exe文件

正确答案: A 我的答案:A得分: 2.0分

9

下面选项中,不是jsp内置对象的是( )。

(2.0分)

  • A、

out

  • B、

response

  • C、

request

  • D、

system

正确答案: D 我的答案:D得分: 2.0分

10

JSP指令标签包括include指令,taglib指令和( )

(2.0分)

  • A、

useBean指令

  • B、

forward指令

  • C、

page指令 jsp- include、taglib、page

  • D、

param指令

正确答案: C 我的答案:C得分: 2.0分

二.判断题(共10题,20.0分)

1

在JSP中,对<jsp:setProperty>标记和<jsp:useBean>动作一起便用,来设置bean的属性值。(2.0分)

我的答案: 得分: 2.0分正确答案:

2

JSP页面可以在“<%=”和“%>”标记之间放置Java表达式,直接输出Java表达式的值。组成“<%=”标记的各字符之间不可以有空格。(2.0分)

我的答案: 得分: 2.0分正确答案:

3

Tomcat 在将 JSP 页面翻译成 Servlet 程序时,会忽略 JSP 注释的内容,不会将注释信息发送到客户端。(2.0分)

我的答案: 得分: 2.0分正确答案:

4

当利用request的方法获取Form中元素时,默认情况下字符编码是UTF-8.(2.0分)

我的答案:× 得分: 2.0分正确答案:×

5

JAVAEE 规定了,一个 web 应用下子目录的命名不能随意的,其中 WEB-INF 目录是必须的--安全目录(2.0分)

我的答案: 得分: 2.0分正确答案:

6

JavaBean可以通过相关jsp动作指令进行调用。(2.0分)

我的答案: 得分: 2.0分正确答案:

7

page 指令的 autoFlush 属性的默认值为 false。

(2.0分)

我的答案:× 得分: 2.0分正确答案:×

autoFlush属性:

当缓冲区满时,是否自动刷新缓冲区。默认值为true,表示当缓冲区已满时,自动将其中的内容输出到客户端。如果设为false,则当缓冲区满时会出现“JSPBuffer overflow”溢出异常。

注意:当buffer属性的值设为none时,autoFlush属性的值就不能设为false。

8

include指令用于在JSP页面插入一个文件,插入文件可以是JSP页面、HTML网页、文本文件或一段Java代码。

(2.0分)

<jsp:incldue page=“head.jsp” >

我的答案:× 得分: 0.0分正确答案:

9

respone对象是JSP内置对象之一。(2.0分)

我的答案: 得分: 2.0分正确答案:

10

taglib 指令用于导入标签库。(2.0分)

我的答案: 得分: 2.0分正确答案:

三.简答题(共2题,10.0分)

1

简述<jsp:forward>和超链接的区别。------考试基本必考

(5.0分)

正确答案:

<jsp:forward>和超链接是用于在JSP页面中进行页面跳转的不同方式。

区别如下:

1. 实现方式:

- <jsp:forward>是一个JSP动作标签,使用XML风格的标签形式,并且需要在JSP页面中使用Java代码进行触发。

- 超链接是通过在HTML或JSP页面中添加<a>标签来创建链接,并通过浏览器的点击事件触发跳转。

2. 执行时机:

- <jsp:forward>动作标签在JSP页面运行到该标签时会立即执行跳转操作,将控制权转移到目标页面或资源。

- 超链接是在用户点击链接时才会触发跳转操作。

3. 请求处理:

- <jsp:forward>动作标签是在服务器内部进行页面跳转,它会直接将请求转发到目标页面或资源,目标页面会处理该请求并返回结果给客户端。

- 超链接是通过发送新的HTTP请求到目标页面或资源,服务器会接收该请求并返回相应的结果给客户端。

4. 传递参数:

- <jsp:forward>动作标签可以使用<jsp:param>标签来传递参数给目标页面或资源。

- 超链接可以通过URL参数的方式来传递参数给目标页面或资源。

5. 页面显示:

- <jsp:forward>动作标签的跳转是在服务器端进行的,所以客户端浏览器的URL地址栏不会改变,用户无法察觉到实际的跳转发生。

- 超链接的跳转是在客户端浏览器进行的,所以会改变浏览器的URL地址栏,用户可以看到实际的跳转过程

6. 访问权限:

- <jsp:forward>只能访问同一个web应用内部资源,包括WEB-INF安全目录下的资源。

- 超链接则能访问网络上的任何资源,比如百度。但是它无法访问WEB-INF目录下的资源。

我的答案:

  1. forward可以访问安全目录
  2. forward局限于只能访问内部工程页面,
  3. forward服务端执行,不改变地址,浏览器只请求一次服务器
     

2

简述<%@include%>和<jsp:include>的区别。------考试基本必考

(5.0分)

正确答案:

<%@include%>和<jsp:include>是用于在JSP页面中包含其他页面或文件的指令。

区别如下:

1. 语法形式:

- <%@include%>是一个指令,使用JSP指令语法,写在JSP页面的顶部,类似于其他指令(如<%@page%>)。

- <jsp:include>是一个JSP动作标签,使用XML风格的标签形式,并且可以在JSP页面的任意位置使用。

2. 执行时机:

- <%@include%>指令在JSP页面编译时就会将被包含的页面或文件合并到当前页面中,生成一个单一的、完整的JSP页面。这意味着被包含的页面的内容会在运行时被静态地插入到包含页面中。

- <jsp:include>动作标签在JSP页面运行时才会执行,当遇到该标签时,服务器会动态地将被包含的页面或文件的内容插入到当前页面中。这意味着被包含的页面的内容是在运行时动态加载的。

3. 传递参数:

- <%@include%>指令不支持传递参数给被包含的页面或文件。

- <jsp:include>动作标签可以使用<jsp:param>标签传递参数给被包含的页面或文件。

4. 异常处理:

- <%@include%>指令在包含的页面或文件发生异常时,异常会被传递到包含页面的上层,即调用者。

- <jsp:include>动作标签在包含的页面或文件发生异常时,异常会被捕获,并且可以使用<jsp:catch>标签进行处理。

总结起来,<%@include%>指令在编译时将被包含的页面静态地合并到当前页面中,不支持参数传递和异常处理;而<jsp:include>动作标签在运行时动态地加载被包含的页面,支持参数传递和异常处理。

我的答案:

include标签是动态页面,可以进行传参,include指令是静态页面

四.编程题(共2题,50.0分)
根据课堂提示,完善模拟登录的功能。

补充登录表单页面,优化login_result页面的判断方式(接收表单传过来的参数,跟事先设定好的admin和123456比较)。

判断后的处理不变,但是要在主页显示登录成功的用户名。

题库4

第一题:简述重定向(sendRedirect)和服务端转发(forward)的区别。-----考试基本必考

(10.0分)

正确答案:

在Java Web程序设计中,重定向(sendRedirect)和服务端转发(forward)是常用的两种页面跳转技术。它们之间有以下几点不同:

  1. 定义:重定向是将请求发送到另一个URL地址,而服务端转发则是将请求转发到服务器内的另一个资源进行处理。
  2. 浏览器行为:重定向会让浏览器向新地址发起一个新的请求,所以浏览器的地址栏会显示新的地址,而服务端转发则不会改变浏览器的地址栏,因为它仅在服务器内部进行转发。
  3. 请求参数:在重定向中,请求参数会被编码在URL中并发送到新的地址,而在服务端转发中,请求参数会被保留并在服务器内部进行传递。
  4. 应用场景:重定向通常用于跳转到不同的Web应用程序或者是另一个Web服务器上的资源,而服务端转发通常用于跳转到同一Web应用程序内的不同资源。

需要注意的是,虽然重定向和服务端转发都可以实现页面跳转,但由于它们的工作方式不同,因此在使用时需要谨慎选择,以满足具体的业务需求。

我的答案:

重定向:是通过发送一个特殊的HTTP响应码告诉浏览器需要跳转到另一个URL。

在重定向时,浏览器会发起一个新的HTTP请求到指定的URL,因此在浏览器的地址栏中会显示跳转后的新URL。

重定向可以跳转到不同的域名下的页面,例如从一个网站跳转到另一个网站。

服务端转发:是在服务器内部进行的跳转,不会向浏览器发送任何响应码,浏览器并不知道发生了转发。

在服务端转发时,请求会直接发送到新的资源,新的资源会处理请求并生成响应,但浏览器看到的仍然是原始请求的URL。

2

第二题:简述内置对象request和session的区别。-----考试基本必考

(10.0分)

正确答案:

在Java Web程序设计中,request和session是Web应用程序中两个重要的内置对象,它们在不同的场景下分别扮演着不同的角色。以下是它们之间的主要区别:

  1. 定义:request是一个HttpServletRequest对象,代表一次HTTP请求,包含了客户端发送给服务器的所有数据,包括请求参数、请求头、请求方式等等。session是一个HttpSession对象,用于在服务器端保存用户的数据,可以跨多个请求访问。
  2. 生命周期:request对象的生命周期只在一次HTTP请求内有效,在客户端发送请求到服务器响应请求结束之间有效,一旦请求结束,request对象也随之被销毁。而session对象则在客户端和服务器之间建立一条连接后,用户在该会话期间发起的所有请求都可以访问到该会话对象,只有在会话过期或者手动销毁时才会被销毁。
  3. 作用范围:request对象的作用范围仅限于一次HTTP请求,它不能够被其他请求所共享。而session对象的作用范围可以跨多个请求访问,同一用户在同一个会话期间的所有请求都可以访问同一个session对象。
  4. 存储内容:request对象通常用于存储本次请求相关的数据,例如请求参数、请求头、请求方式等等,而session对象通常用于存储与用户相关的数据,例如用户的登录状态、用户的购物车等等。

需要注意的是,在使用request和session对象时,需要注意数据的安全性和性能问题,避免出现数据泄露或者是数据过多造成的性能问题。

我的答案:

request对象:1每次客户端请求服务器时都会创建一个新的request对象。

2.在不同的Servlet之间传递数据。

session对象:1.代表服务器与客户端之间的会话,它可以跟踪用户的状态和行为,级别更高。

2.在客户端第一次访问服务器时创建,在会话期间一直存在,直到会话结束或超时。

3.在同一个用户的多次请求之间共享数据.


 

题库5


简述使用JSTL标签库中的某个标签(如c:if)的编程步骤

ps:抄袭不得分

(5.0分)

正确答案:

我的答案:

1.下载JSTL库并导入模块

2.导包<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c">

3.双标签+EL配合使用

2

简述javaweb编程中,有哪四个作用域?分别对应jsp、el的哪些对象?

抄袭不得分

(10.0分)

正确答案:

我的答案:

scope:范围 attribute:属性 attributeName

1.页面作用域(page)与当的EL对象是${pageScope.attributeName}

2.请求作用域(Request ) 对应的EL对象是${requestScope.attributeName}。

3.会话作用域(Session )的EL${sessionScope.attributeName}。

4. 应用作用域(Application):对应的EL对象是${applicationScope.attributeName}。

3

第二题:简述内置对象request和session的区别。

(5.0分)

正确答案:

在Java Web程序设计中,request和session是Web应用程序中两个重要的内置对象,它们在不同的场景下分别扮演着不同的角色。以下是它们之间的主要区别:

  1. 定义:request是一个HttpServletRequest对象,代表一次HTTP请求,包含了客户端发送给服务器的所有数据,包括请求参数、请求头、请求方式等等。session是一个HttpSession对象,用于在服务器端保存用户的数据,可以跨多个请求访问。
  2. 生命周期:request对象的生命周期只在一次HTTP请求内有效,在客户端发送请求到服务器响应请求结束之间有效,一旦请求结束,request对象也随之被销毁。而session对象则在客户端和服务器之间建立一条连接后,用户在该会话期间发起的所有请求都可以访问到该会话对象,只有在会话过期或者手动销毁时才会被销毁。
  3. 作用范围:request对象的作用范围仅限于一次HTTP请求,它不能够被其他请求所共享。而session对象的作用范围可以跨多个请求访问,同一用户在同一个会话期间的所有请求都可以访问同一个session对象。
  4. 存储内容:request对象通常用于存储本次请求相关的数据,例如请求参数、请求头、请求方式等等,而session对象通常用于存储与用户相关的数据,例如用户的登录状态、用户的购物车等等。

需要注意的是,在使用request和session对象时,需要注意数据的安全性和性能问题,避免出现数据泄露或者是数据过多造成的性能问题。

我的答案:

request对象:代表着客户端发起的HTTP请求,用于表单提交

session对象:代表着用户的会话,从用户登录到退出这段时间内有效,用于账号注册,登录

三.单选题(共2题,10.0分)

1

下列关于JSTL中条件标签说法错误的是()。

(5.0分)

  • A、

<c:choose>标签用于条件选择

  • B、

<c:if>可以实现如if else的条件语句 没有if else 只有if 实现if else只有多次使用 <c:if>语句

  • C、

<c:otherwise>标签代表<c:choose>的最后选择

  • D、

<c:when>标签代表一个条件分支

正确答案: B 我的答案:B得分: 5.0分

2

下面选项中,属于 pageContext 提供的用于从四个域对象中查找属性的方法是 ( ) ---get方法

(5.0分)

  • A、

removeAttribute

  • B、

setAttribute

  • C、

findAttribute

  • D、

getAttribute

正确答案: D 我的答案:C得分: 0.0分

四.解答题(共2题,20.0分)

1

【解答题】简述request的转发请求方法与response的重定向方法的区别(10.0分)

正确答案:

我的答案:

request;1.服务端内部请求,跳转不改变url地址。2.请求对象的属性、参数不改变

response:1.服务器向客户端浏览器发送一个HTTP状态码,告诉浏览器需要进行重定向。2.请求的属性和参数不会传递到重定向的目标地址

2

【解答题】简述表单form的属性method的值post与get的区别

(10.0分)

正确答案:

我的答案:

get:1.表单提交时,采用get请求,会将表单填入信息显示在url 2.适合传输小数据,太大可能导致请求失败

post:1.相对于GET方法更安全,适合传输敏感信息,如密码等。 2.可以传输大数据量

题库6


下面关于 JDBC 驱动器 API 与 JDBC 驱动器关系的描述,正确的是( )

(2.0分)

  • A、

JDBC 驱动器 API 内部包含了 JDBC 驱动器

  • B、

JDBC 驱动器 API 是接口,而 JDBC 驱动器是实现类

  • C、

JDBC 驱动器内部包含了 JDBC 驱动器 API

  • D、

JDBC 驱动器是接口,而 JDBC 驱动器 API 是实现类

正确答案: B 我的答案:B得分: 2.0分

2

在Servlet里,能正常获取session的语句是( )

(2.0分)

  • A、

HttpSession session = response.getHttpSession(true)

  • B、

HttpSession session = request.getHttpSession(true)

  • C、

HttpSession session = response.getSession();

  • D、

HttpSession session = request.getSession()

正确答案: D 我的答案:D得分: 2.0分

3

【单选题】下面选项中, 用于实现一个Web应用中的所有Servlet共享数据的对象是()(2.0分) ServletContext

  • A、ServletRequest
  • B、ServletConfig
  • C、ServletContext
  • D、HttpSession

正确答案: C 我的答案:C得分: 2.0分

4

以下不属于 Servlet 的优点的是( )。

(2.0分)

  • A、

安全性

  • B、

可移植性

  • C、

高效性

  • D、

冗余性

正确答案: D 我的答案:D得分: 2.0分

5

下面方法中,哪个是用于释放 Servlet 所占资源的方法( )

(2.0分)

  • A、

init()

  • B、

service()

  • C、

destroy() 销毁 destroy

  • D、

doPost()

正确答案: C 我的答案:C得分: 2.0分

6

Servlet中,HttpServletResponse的( )方法用来把一个HTTP请求重定向到另外的URL


 

(2.0分)

  • A、

redirectResponse()

  • B、

redirectURL()

  • C、

sendRedirect() 重定向

  • D、

sendURL()

正确答案: C 我的答案:C得分: 2.0分

7

【单选题】LoginServlet是一个Servlet类,代码如下
public class LoginServlet extends ___________ {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

}
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

}
}在下划线处应填写()(2.0分)

  • A、GenericServlet
  • B、Servlet
  • CHttpServlet 父类
  • D、Cookie

正确答案: C 我的答案:C得分: 2.0分

8

下面选项中,用于将参数化的 SQL 语句发送到数据库的方法是( )

(2.0分)

  • A、

registerDriver(Driverdriver)

  • B、

prepareCall(String sql)

  • C、

createStatement()

  • D、

prepareStatement(String sql) JDBC中实现的三个对象:statement 、prepareStatement、CallableStatement

常规语句:Statement stmt = con.createStatement(sql);

预置语句:PreparedStatement pstmt = con.prepareStatement(sql)

可调用语句:CallableStatement ---我也没整明白

Connection myConn = . . . // connection to the RDBMS for Database

DatabaseMetaData dbmd = myConn.getMetaData();

if (dbmd.supportsNamedParameters() == true)

{

System.out.println("NAMED PARAMETERS FOR CALLABLE"

+ "STATEMENTS IS SUPPORTED");

}

下列选项中,不属于 servlet 生命周期方法的是( )

(2.0分)

  • A、

init()

  • B、

service()

  • C、

getServletInfo()

  • D、

destroy()

正确答案: C 我的答案:C得分: 2.0分

10

对于 Servlet 的生命周期说法正确的是( )。

(2.0分)

  • A、

doGet( )或 doPost( )是被 init( )方法激活的

  • B、

service( )方法是用来初始化的

  • C、

init( )方法对用户的请求进行处理 init初始化

  • D、

destroy( )方法用于释放资源

正确答案: D 我的答案:D得分: 2.0分

11

【单选题】给定Servlet程序的代码如下所示:
Public class Servlet1 extends HttpServlet{
Public void doGet(HttpServletRequest request,HttpServletResponse response)
Throws ServletException IOException{
System.out.println(“get”);
}
Public void doPost(HttpServletRequest request.HttpServletResponse response)
Throws ServletException,IOException{
System.out.println(“post”);
doGet(reauest,response);
}
}
用户在浏览器地址栏中输入正确的请求URL并回车后,在控制台上显示的结果是()。(2.0分)

  • A、get post
  • B、get-------post请求是发出
  • C、post
  • D、post get

正确答案: B 我的答案:B得分: 2.0分

12

【单选题】程序中创建了一个Servlet,该Servlet重写了其父类的doGet()和doPost()方法,那么其父类可能是 ()(2.0分)

  • A、HttpServletResponse
  • B、HttpServletRequest
  • C、RequestDispatcher
  • D、HttpServlet

正确答案: D 我的答案:D得分: 2.0分

二.判断题(共11题,11.0分)

2

Servlet 程序中,只有属于同一个请求中的数据才可以通过 HttpServletRequest 对象传递。(1.0分)

我的答案:× 得分: 0.0分正确答案:

3

Servlet技术是Sun公司提供的一种实现动态网页的解决方案,它是基于Java编程语言的Web服务器端编程技术,主要用于在Web服务器端获得客户端的访问请求信息和动态生成对客户端的响应消息

(1.0分)

我的答案: 得分: 1.0分正确答案:

4

一个Servlet程序就是一个实现了特殊接口的 Java类(1.0分)

我的答案: 得分: 1.0分正确答案:

5

SQL 是用于访问和处理数据库的标准的计算机语言(1.0分)

我的答案: 得分: 1.0分正确答案:

6

在 Servlet 实例化之后,容器将调用 Servlet 的 init()方法初始化这个对象。(1.0分)

我的答案: 得分: 1.0分正确答案:

7

Servlet中使用的方法有close方法。(1.0分) 没有

我的答案:× 得分: 1.0分正确答案:×

8

通过DriverManager.getConnection方法加载数据库驱动。

6步:1.注册驱动 DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver()),

2.连接驱动 Connection connection=DriveManager.getConnection(url,username,password)

.3.获取操作对象 Statement statement=connection.CreateStatement()

4.执行sql语句 String sql=“select *from table”ResultSet resultset=statement.executeQuery(sql)/statement.executeUpdate(sql)

5.处理结果 resultset.next

6.关闭 释放资源 statement.close();connection.close()

(1.0分)

我的答案: 得分: 0.0分正确答案:×

Tomcat 在将 JSP 页面翻译成 Servlet 程序时,会忽略 JSP 注释的内容,不会将注释信息发送到客户端。(1.0分)

我的答案: 得分: 1.0分正确答案:

10

Servlet 是一个服务器上运行. 处理请求信息并将其发送到客户端的 Java 程序。(1.0分)

我的答案: 得分: 1.0分正确答案:

11

Servlet的生命周期是由Servlet容器(即Web服务器)来控制的,通过简单的概括可以分为四步:Servlet类加载---->实例化Servlet init()---->Servlet提供服务 service()---->销毁Servlet destroy()。

(1.0分)

我的答案: 得分: 1.0分正确答案:

三.解答题(共1题,10.0分)

【解答题】简述JDBC编程的6个开发步骤。(10.0分)

正确答案:

我的答案:

1.加载数据库驱动程序Class.forName("com.mysql.cj.jdbc.Driver");

2.建立数据库连接Connection connection = DriverManager.getConnection(url, username, password);

3. 创建 Statement 对象 容器Statement statement = connection.createStatement();String sql1="SELECT * FROM tb_account";String sql2="insert into information values('134','啊超','男','我有点害怕')";

4. 执行sql语句:查询、更新ResultSet resultSet = statement.executeQuery(sql1);

5.处理结果 if(resultSet1>0){System.out.println("sql执行成功");}else{System.out.println("执行失败");}

6.关闭连接resultSet.close();statement.close();connection.close();

20.假设现在浏览器发起一个请求,它需要访问用户表第3页的数据,每页默认最多显示10条,MySQL 分页查询正确的SQL 是 ( A )。

A. select * from user limit 20,10;

B. select * from user limit 10,10;

C. select * from user limit 30,10;

D. select * from user limit 3,10;

  1. 用法的其他变体
    • LIMIT 5, 10:从第 6 行开始返回 10 行记录。
    • LIMIT 0, 20 或 LIMIT 20:返回前 20 行记录。
    • LIMIT 10 OFFSET 5 或 LIMIT 5, 10:从第 6 行开始返回 10 行记录,这两种写法效果是一样的。

注意事项

  • LIMIT 子句通常用于限制结果集的行数,这对于分页显示数据特别有用。
  • 不同数据库系统对 LIMIT 的实现和语法有些许差异,需要根据具体的数据库系统文档来确认使用细节。
  • 在一些数据库系统中,LIMIT 可能与 ORDER BY 结合使用,以确保结果按特定顺序返回。

替代语法

在某些数据库系统中,LIMIT也可以使用FETCH FIRST或TOP等替代语法来实现相同的功能。例如:

  • FETCH FIRST 10 ROWS ONLY(Oracle、DB2)
  • TOP 10(SQL Server)

这些替代语法在具体数据库的文档中有详细描述和使用示例。

总之,LIMIT是 SQL 查询中一个重要且常用的子句,用于限制和控制结果集的行数,通常用于提高查询效率和控制返回的数据量。

整张试题套卷

一、单项选择题 (本大题共20小题,每小题1分,共20分)

1. 安装 tomcat成功后, 如要修改 tomcat端口, 要修改的文件是 ( B)。

A. tomcat/bin/startup. bat文件 B. tomcat/conf/server. xml

C. tomcat/conf/web. xml D. 以上都不是

2. Java Web开发服务端程序所需具备的技能不包括( B )。

A. JSP B. CSS

C. Servlet D. JDBC

3. 需要在JSP 页面中引入 java. util.*包, 需要用到的指令是 ( A )。

A. <%@page import="java.util.*" %>

B. <%@taglib import="java.util.*" %>

C. <%@page package="java.util.*" %>

D. <%@include import="java.util.*" %>

4. 阅读下列JSP 代码片断:

<% int x=5; %>

<%! private int m(int a){ return a+1;} %>

<% x=3; %>

x=<%=x%>,<%=m(x)%>

其运行结果是( B )。

A. x=3,6 B. x=3,4

C. x=5,4 D.编译错误

5. 在c if. jsp有如下部分代码:

<c:if test="true" >

true

</c:if>

正确的是( C )。

A.该页面代码部署启动时,控制台会报错

B.在该页面会出现编译错误,并有红叉提示

C. 访问该页面会出现结果:true

D.访问该页面时,浏览器没有任何信息显示

6. 下面关于EL 表达式${(1==2)?3:4}的运算结果, 正确的是 ( D )。

A. True B. false

C. 3 D. 4

7.下列选项,可用于存储结果集的对象是 ( A )。

A. ResultSet

B. Connection

C. Statement

D. PreparedStatement

8.下面选项中,用于创建将参数化的SQL 语句发送到数据库的对象方法是 ( B )。

A. prepareCall(String sql)

B. prepareStatement(String sql)

C. registerDriver(Driver driver)

D. createStatement()

9. 下面关于 executeQuery(String sql)方法, 说法正确的是 ( C )。

A. 可以执行 insert语句

B. 可以执行 update语句

C. 可以执行 select语句

D. 可以执行 delete语句

10.下面选项中,能够将游标从当前位置向下移一行的方法是( `A )。

A. next()

B. absolute(int row)

C. previous()

D. last()

11. 程序中创建了一个Servlet,该Servlet重写了其父类的 doGet()和 doPost()方法, 那么其父类可能是 ( D )。

A. RequestDispatcher

B. HttpServletResponse

C. HttpServletRequest

D. HttpServlet

12. 给定Servlet程序的代码如下所示:

public class Servlet1 extends HttpServlet{

public void doGet(HttpServletRequest request,HttpServletResponse response)

throws ServletException IOException{

System. out. println(“get” );

}

public void doPost(HttpServletRequest request. HttpServletResponse response)

throws ServletException,IOException{

System. out. println( “post” );

doGet(request, response);

}

}

用户在浏览器地址栏中键入正确的请求URL 并回车后,在控制台上显示的结果是( A )。

A. get

B. post

C. get post

D. post get

13. 某一 JSP 页面的表单中,有几个复选框,复选框name为“habit”,则该表单提交后,下面能获取用户选中复选框的值的语句是( D )。

A. request. getAttribute("habit");

B. response. getParameterValues("habit");

C. request. getParameter("habit");

D. request. getParameterValues("habit");

14. 下面选项中,用于实现一个Web应用中的所有Servlet共享数据的对象是( B )。

A. HttpSession

B. ServletContext

C. ServletConfig

D. ServletRequest

15. JSP Mode12开发的系统中, 实现视图的是( A )。

A. JSP(view) B. HTML

C. JavaBean(model) D. Servlet(control)

16.下面关于MVC 设计模式的特点描述中,错误的是( B )。

A.有利于开发中的分工

B.使程序结构的耦合性增强

C.有利于组件的重用

D.MVC 设计模式是当前主流的设计模式之一

17.下列选择中,哪个响应头能够使客户端访问服务器资源时采用下载窗口打开( A )。

A. Content-Disposition

B. Content-Type

C. Content-Encoding

D. Disposition

18.下面用于获取文件上传字段中的文件名的方法是( A )。

A. getName()

B. getType()

C. getContentType()

D. getString()

19. 下列对于 Cookie 对象的 setMaxAge(-1)方法的描述中, 正确的是( C )。

A. 表示通知浏览器保存这个 Cookie 信息

B. 表示通知浏览器立即删除这个 Cookie 信息

C. 表示当浏览器关闭时,Cookie信息会被删除

D.以上说法都是错误的

20.假设现在浏览器发起一个请求,它需要访问用户表第3页的数据,每页默认最多显示10条,MySQL 分页查询正确的SQL 是 ( A )。

A. select * from user limit 20,10;

B. select * from user limit 10,10;

C. select * from user limit 30,10;

D. select * from user limit 3,10;

二、判断题(本大题共10小题,每小题1分,共10分)

1.B/S架构中,浏览器并不是直接与数据库服务器建立连接,而是需要通过Web服务器与数据库服务器建立连接。( 对 )

2. Tomcat服务器默认的端口号是8080。( 对 )

3. JSP 隐式对象 out 可以通过 response. getWriter()方式获取, 然后再通过 println()或者write()方法向页面发送文本内容。( 错 )

4.EL 表达式都是以“${”符号开始,以“}”符号结束的,具体语法格式是${表达式}。( 对 )

5. 对于相同的SQL 语句, Statement 对象只会对其编译执行一次。( 错 )

6. ResultSet 接口表示 select查询语句得到的结果集,该结果集封装在一个逻辑表格中。( 对 )

7. 在Servlet的整个生命周期中, destroy()方法会被调用一次。( 对 )

8. ServletRequest接口的 setAttribute()方法用于将一个对象与一个 name 关联后存储进ServletRequest对象中。 ( 对 )

9. JSP Modell架构模型采用JSP+Servlet+JavaBean的技术, 实际上它就是MVC 设计模式。( 错 )

10.控制器负责管理应用程序的业务数据、定义访问控制以及修改这些数据的业务规则。( 错 )

三、填空题(本大题共10小题,每小题1分,共10分)

1. JSP 脚本元素主要包含三种类型,分别是JSP Scriptlets、声明标识和 (表达式 )。

2.在JSP 页面中,Core标签库提供了一个 ( <c:forEach> )标签对集合对象进行循环迭代操作。

3. ( include ) 指令用于在JSP 页面中包含另一个 JSP 页面。

4. Statement接口的executeUpdate(String sql)方法用于执行 SQL 中的增加、( 更新 )和删除语句。

5.( Connection)接口表示 Java程序和数据库的连接,只有获得该连接对象后才能访问数据库,并操作数据库表。

6. Servlet API 中, 专门用来封装HTTP 响应消息的接口是( HttpServletResponse )。

7. Filter 被称为( 过滤器 ), 其基本功能是对Servlet容器调用Servlet的过程进行拦截,它位于客户端和处理程序之间,能够对请求和响应进行检查和修改。

8. JSP Model2模型就是( MVC ) 设计模式。

9. 文件上传时 form 表单的method属性设置为( POST ) 方式。

10.( Limit )是 MySQL 中的一个特殊关键字,用于指定查询结果从哪条记录开始显示,一共显示多少条记录。


 

四、简答题(本大题共5小题,每小题4分,共20分)

1. 简述JSP 隐式对象 request、response、exception和out对象的作用。

request对象

作用:主要用于处理客户端请求

response对象

作用:封装了JSP产生的响应,用于响应客户端的请求,向客户端输出信息。

exception对象

作用:显示异常信息,用于在JSP页面中处理未捕获的异常。

out对象

作用:用于向客户端发送文本形式的实体内容。

2.简述请求转发与重定向的区别。

请求次数与过程

请求转发:是在服务器内部完成的页面跳转方式,由服务器进行跳转。整个过程中只发送一次HTTP请求

重定向:是由浏览器进行跳转的,浏览器的地址栏会发生变化。整个过程中会发送至少两次HTTP请求。

地址栏变化

请求转发:浏览器的地址栏不会发生变化,用户看到的是最初请求的URL。

重定向:浏览器的地址栏会发生变化,显示的是重定向后的URL。

数据共享

请求转发:由于是一次请求,request和response对象都是同一个,因此可以在转发过程中共享数据。转发的request对象可以传递各种类型的数据。

重定向:由于是两个不同的请求,原来的request和response会失效,因为不是同一个对象。重定向只能传递字符串形式的数据,通常是通过URL的查询参数或会话(session)来传递。

跳转限制

请求转发:只能跳转本站点资源,不能跳转到其他站点。

重定向:可以跳转到任意URL,包括本站点和其他站点的资源。

发生行为

请求转发:是服务器端行为,由服务器内部处理。

重定向:是客户端行为,由浏览器发起第二次请求。

执行时机

请求转发:执行到跳转语句就会立刻进行转发。

重定向:整个页面执行完之后才会执行跳转。

2. 简述Servlet接口中 init方法、service 方法、destroy方法的作用。 init方法

作用:在Servlet被实例化后,Servlet容器会调用init方法来初始化Servlet对象。这个方法只会被调用一次,即在Servlet生命周期的开始时。

service方法

作用:service方法是Servlet的核心方法,用于处理来自客户端的请求。每当一个请求到达Servlet容器并指定了当前Servlet时,Servlet容器就会调用service方法。

destroy方法

作用:在Servlet容器关闭或Servlet需要被移除时,Servlet容器会调用destroy方法来销毁Servlet对象。这个方法也只会被调用一次,即在Servlet生命周期的结束时。

3. 简述使用 PrepareStatement 执行 SQL 的好处。 防止SQL注入攻击

提高执行效率

减少网络传输

代码可读性和可维护性

4.JSP Mode12架构模型采用了什么技术,各项技术对应MVC 的哪一模块,作用是什么。

JSP + Servlet + JavaBean

JSP:对应MVC中的**视图(View)**部分。

作用:主要负责页面数据的显示。JSP页面使用HTML和JSP标签库等技术来构建用户界面,向用户展示数据,并接收用户的输入。

Servlet:对应MVC中的**控制器(Controller)**部分。

作用:主要负责业务逻辑处理。Servlet作为Web应用程序的控制器,接收来自JSP页面的用户请求,根据请求调用相应的业务逻辑(由JavaBean实现),然后将处理结果返回给JSP页面进行显示。Servlet在视图层与业务逻辑层之间起到了桥梁作用,控制了两者之间的数据流向。

JavaBean:对应MVC中的**模型(Model)**部分。

作用:处理数据和业务逻辑。JavaBean通常包含数据和方法,用于存储应用程序的状态(如用户信息、订单数据等),以及执行与这些数据相关的业务逻辑(如验证用户输入、计算价格等)。在MVC中,模型负责管理应用程序的业务数据、定义访问控制以及修改这些数据的业务规则。

总结

· JSP Model2架构模型通过采用JSP、Servlet和JavaBean技术,实现了MVC设计模式。

· JSP作为视图层,负责页面数据的显示和用户交互。

· Servlet作为控制层,负责接收用户请求,调用业务逻辑并控制数据流向。

· JavaBean作为模型层,负责处理数据和业务逻辑,存储应用程序的状态

五、综合应用题(本大题共3小题,1小题10分,2、3小题各15分,共40分)

1.以下是查询用户表的部分代码,以表格形式显示在网页上。请补全 JSTL 代码。(10分)t user表设计:

类型

长度

小数点

不是 null

虚拟

注释

user _ id

int

11

0

username

varchar

20

0

用户名

password

varchar

80

0

密码

gender

varchar

2

0

性别

profession

varchar

20

0

职业

favor

varchar

100

0

爱好

description

varchar

255

0

描述

create _ date

datetime

0

0

注册日期

last _ login _ time

datetime

0

0

最近登陆时间

role

int

10

0

用户身份: 0-普通用户, 9-管理员

state

int

11

0

用户状态: 0-禁用, 1-正常

Servlet核心代码如下:

UserDao userDao = new UserDao();

List<User> list = Collections. emptyList();

try {

list = userDao. findAll( );

} catch (DataAccessException e) {

e. printStackTrace();

}

// 通过request 对象共享数据给视图

request. setAttribute("userList", list);

request. getRequestDispatcher("/user/user list. jsp"). forward(request, response);

请根据以上信息,写出user list. jsp中输出用户列表的 JSTL 代码,以使其达到如下网页显示效果:

编号

姓名

性别

职业

注册日期

角色

状态

操作

1

02933

教师

2022年09月25日

管理员

正常

详情修改重置密码锁定删除

2

10001

教师

2022年10月08日

普通用户

正常

详情修改重置密码锁定删除

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

<!DOCTYPE html>

<html>

<head>

<title>用户列表</title>

<!-- 引入CSS样式,如果需要的话 -->

</head>

<body>

<table border="1">

<tr>

<th>编号</th>

<th>姓名</th>

<th>性别</th>

<th>职业</th>

<th>注册日期</th>

<th>角色</th>

<th>状态</th>

<th>操作</th>

</tr>

<c:forEach var="user" items="${userList}" varStatus="status">

<tr>

<td>${status.index + 1}</td> <!-- 假设user_id未直接给出,这里使用索引+1作为编号 -->

<td>${user.username}</td>

<td>${user.gender}</td>

<td>${user.profession}</td>

<td><fmt:formatDate value="${user.create_date}" pattern="yyyy年MM月dd日"/></td>

<td>

<c:choose>

<c:when test="${user.role == 9}">管理员</c:when>

<c:otherwise>普通用户</c:otherwise>

</c:choose>

</td>

<td>

<c:choose>

<c:when test="${user.state == 1}">正常</c:when>

<c:otherwise>禁用</c:otherwise>

</c:choose>

</td>

<td>

<!-- 这里是操作链接,需要根据实际情况添加具体的URL和参数 -->

<a href="detail.jsp?id=${user.user_id}">详情</a>

<a href="modify.jsp?id=${user.user_id}">修改</a>

<a href="resetPassword.jsp?id=${user.user_id}">重置密码</a>

<a href="lock.jsp?id=${user.user_id}">锁定</a>

<a href="delete.jsp?id=${user.user_id}">删除</a>

</td>

</tr>

</c:forEach>

</table>

</body>

</html>

2.接上题。在本题中,我们需要通过设计一个 MVC 模式的程序,去完成用户修改的功能。(15分)

@WebServlet("/UserEdit.do")

public class UserEditServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// 从请求中获取参数

String userId = request.getParameter("userId");

String username = request.getParameter("username");

// ... 其他参数 ...

// 创建或获取 UserDao 实例

UserDao userDao = new UserDao();

// 根据userId获取用户信息(可选,用于回显和校验)

User user = userDao.findById(Integer.parseInt(userId));

// 设置其他属性(如果需要)

// ...

// 更新用户信息到数据库

try {

userDao.update(user); // 假设update方法接受一个User对象

request.setAttribute("message", "用户信息更新成功!");

} catch (DataAccessException e) {

e.printStackTrace();

request.setAttribute("message", "更新用户信息失败:" + e.getMessage());

}

// 重定向到用户列表或其他页面

response.sendRedirect(request.getContextPath() + "/user/user_list.jsp");

}

}

复习题库

选择题

在WEB项目的目录结构中,web.xml文件位于( C )中(选择一项)

A. Src

B. META-INF

C. WEB-INF

D. WebRoot

在Servlet生命周期中,对应服务阶段的方法是( C )(选择一项)

A. init()

B. destroy()

C. service()

D. initial()

在web编程中,对于cookie的作用说法正确的有( A )(选择一项)

A. 为了识别不同的用户信息

B. 为了简化程序开发

C. 为了提高程序执行速度

D. 以上说法都不对

对于ServletRequest接口的getAttribute()方法,说法正确的是( A )(选择一项)

A. 获取指定名称的属性值

B. 设置指定属性的值

C. 删除指定属性的值

D. 以上都不对

<servlet>

<servlet-name>testServlet</servlet-name>

<servlet-class>com.accp.servlet.TestServlet</servlet-class>

</servlet>

对于以上代码片段,说法正确的是( AB )(选择二项)

A. 配置了逻辑名为testServlet的Servlet组件

B. 其对于的类的路径是:com.accp.servlet.TestServlet

C. 客户端可以通过testServlet访问

D. 以上说法都不对

在java Web应用开发中,Servlet程序需要在( B )文件中配置。(选择一项)

A. Jsp

B. web.xml

C. struts.xml

D. servlet.xml

在Java EE中,HttpServletResponse的( B )方法用于一个HTTP请求重定向到另一个资源。(选择一项)

A. sendURL()

B. sendRedirect()

C. forward()

D. redirectURL()

以下哪种格式是正确的URL( A )(选择一项)

A. http://localhost:8080/news/index.jsp>

B. http://localhost/8080/news/index.jsp>

C. http://localhost/8080:news/index.jsp>

D. http:localhost://8080/news/index.jsp

以下代码中可以正确设置客户端请求编码为UTF-8 的是( A )(选择一项)

A. request.setCharacterEncoding(“UTF-8”)

B. request.setCharset(“UTF-8”)

C. request.setContentType(“UTF-8”)

D. request.setEncoding(“UTF-8”)

通过response的( A )方法可以设置响应所采用的字符编码类型。(选择一项)

A. setCharacterEncoding()

B. setCharset()

C. setEncoding()

D. setContentType()

在部署带有Servlet的Java Web程序时,( D )不是必需的。(选择一项)

A. web.xml文件

B. WEB-INF文件夹

C. classes文件夹

D. csses文件夹

对于servlet在程序中的作用,以下说法正确的是( AB )(选择二项)

A. 分离业务逻辑代码与表现层代码

B. 让程序执行流程更加清晰

C. 加快了程序访问速度

D. 大大减少了编码工作量

在WEB应用程序开发中,有时会出现Tomcat端口号已经被占用的情况,为此我们需要修改配置文件,下列选项中修改正确的是( B )(选择一项)

A. 在tomcat目录\bin文件夹\server.xml文件中,修改 Connection的port

B. 在tomcat目录\conf文件夹\server.xml文件中,修改 Connector的port

C. 在tomcat目录\bin文件夹\server.xml文件中,修改 Connector的port

D. 在tomcat目录\conf文件夹\server.xml文件中,修改 Connection的port

如果要把一个“accp”字符串信息放在session对象里,则下列正确的是( A )(选择一项)

A. session.setAttribute(“message”,“accp”);

B. session.setAttribute(message,“accp”);

C. session.setAttribute(“accp”,“message”);

D. session.setAttributes(“message”,“accp”);

如果要从session范围取出名为flag的变量,则以下说法正确的是( A )(选择一项)

A. session.getAttribute(“flag”);

B. session.getAttributes(“flag”);

C. session.getParameter(“flag”);

D. session.get(“flag”);

假设session对象中存放了一个Book对象,即:session.setAttribute(“book”,new Book()) , 则取出Book对象的正确语句是( B )(选择一项)

A. Book book = session.getAttribute(“book”)

B. Book book = (Book)session.getAttribute(“book”)

C. Book book = session.getValue(“book”)

D. Book book = (Book)session.getValue(“book”)

在JSP中,以下可以实现请求转发的是( D )(选择一项)

A. request.getRequestDispatcher(“list.jsp”);

B. response.getRequestDispatcher(“list.jsp”);

C. response.getRequestDispatcher(“list.jsp”).forward(request,response);

D. request.getRequestDispatcher(“list.jsp”).forward(request,response);

web.xml中预先对Servlet进行初始化设置的代码如下:

<init-param>

<param-name>myWord</param-name>

<param-value>hello</param-value>

</init-param>

则如下获取初始化参数的语句正确的是( A )。(选择一项)

A. String myWord = getInitParameter(“myWord”);

B. String myWord = getInitParameter(“hello”);

C. String myWord = getInit(“myWorld”);

D. String myWord= getInit(“hello”);

以下关于Servlet生命周期说法错误的是( C )。(选择一项)

A. Servlet容器根据Servlet类的位置加载Servlet类,成功加载后,由0容器创建Servlet的实例

B. 对于每一个Servlet实例,init()方法只被调用一次

C. 当Servlet容器接收到客户端请求时,调用 Servlet的service()方法以及destory()方法处理客户端请求

D. servlet的实例是由servlet容器创建的,所以实例销毁也由容器业完成

以下关于转发和重定向的说法错误的是( C )(选择一项)

A. 转发通过request的getRequestDispatcher().forward()方法即可实现,它的作用是在多个页面交互过程中实现请求数据的共享。

B. 重定向可以理解为是浏览器至少提交了两次请求,它是在客户端发挥作用,通过请求新的地址实现页面转向

C. 转发和重定向都可以共享request范围内的数据

D. 转发时客户端的URL地址不会发生改变,而重定向时客户端浏览器中显示的是新的URL地址。

在J2EE中,给定某Servlet的代码如下,编译运行该文件,以下陈述正确的是( B )。(选择一项)

Public class Servlet1 extends HttpServlet{

Publicvoid init() throws ServletException{

}

Publicvoid service(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{

PrintWriterout = response.getWriter();

out.println(“hello!”);

}

}

A. 编译该文件时会提示缺少doGet()或者dopost()方法,编译不能够成功通过

B. 编译后,把Servlet1.class放在正确位置,运行该Servlet,在浏览器中会看到输出文字:hello!

C. 编译后,把Servlet1.class放在正确位置,运行该Servlet,在浏览器中看不到任何输出的文字

D. 编译后,把Servlet1.class放在正确位置,运行该Servlet,在浏览器中会看到运行期错误信息

J2EE中,Servlet API为使用Cookie,提供了( A )类。

A. javax.servlet.http.Cookie

B. javax.servlet.http.HttpCookie

C. javax.servlet. Cookie

D. javax.servlet.http.HttpCookie

23 能够保留请求作用域中数据的转向方式是__D___

A. response.forward()

B. response.sendRedirect()

C. session.getRequestDispatcher().forward(request,response)

D. request.getRequestDispatcher().forward(request,response)

JSP中存在如下代码:<%=“2”+“4” %>,运行该JSP后,以下说法正确的是( C )(选择一项)

A. 没有任何输出

B. 输出6

C. 输出24

D. 指令将引发错误

在JSP中,使用( C )对象的( )方法可完成网页重定向(选择一项)

A. request,getRequestDispatcher()

B. request,forward()

C. response,sendRedirect()

D. response,setRequestDispatcher()

对于分页查询, 以下说法不正确的是( B )(选择一项)

A. 可以减轻服务器压力

B. 对于程序开销极大

C. 以提高用户体验

D. 对于不同数据库有不同的SQL指令

对于ServletRequest接口的getAttribute()方法,说法正确的是( A )(选择一项)

A. 获取指定名称的属性值

B. 设置指定属性的值

C. 删除指定属性的值

D. 以上都不对

对JSTL说法中正确的是( AB )(选择二项)

A. foreach用来循环输出集合中的数据

B. set标签用来定义变量

C. out标签只能输出session中的变量值

D. if标签主要用来执行数据库操

在JSP页面中,下列( A )表达式语句可以获取页面请求中名字为title的文本框的内容。(选择一项)

A. <%=request.getParameter(“title”)%>

B. <%=request.getAttribute(“title”)%>

C. <%=request.getParameterValues(“title”)%>

D. <%=request.getParameters(“title”)%>

jsp在执行过程中经过()阶段,由web容器将之转换成java源代码( A )(选择一项)

A. 翻译

B. 编译

C. 执行

D. 响应

jsp在执行过程中经过()阶段,会将java源码转换成class文件( B )(选择一项)

A. 翻译

B. 编译

C. 执行

D. 响应

在JSP的小脚本中,使用以下( C)语句可以使浏览器重定向到另一个页面(选择一项)

A. request.sendRedirect(“http://www.jb-aptech.com.cn”);

B. request.sendRedirect();

C. response.sendRedirect(“http://www.jb-aptech.com.cn”);

D. response.sendRedirect();

JSP文件test.jsp文件如下所示,运行时,将发生(D)。(选择一项)

<html>

<% String str = null;%>

str is <%=str%>

</html>

A. 编译阶段出现错误

B. 翻译阶段出现错误

C. 执行字节码时发生错误

D. 运行后,浏览器上显示:str is null

JSP页面的page指令主要用于设置该页面的各种属性,page指令的language属性的作用是( B )。(选择一项)

A. 将需要的包或类引入到JSP页面中

B. 指定JSP页面使用的脚本语言,默认为Java

C. 指定JSP页面采用的编码方式,默认为text/html

D. 服务器所在国家编码

在java Web应用开发中,Servlet程序需要在( B )文件中配置。(选择一项)

A. Jsp

B. web.xml

C. struts.xml

D. servlet.xml

在Java EE中,HttpServletResponse的( B )方法用于一个HTTP请求重定向到另一个资源。(选择一项)

A. sendURL()

B. sendRedirect()

C. forward()

D. redirectURL()

在JSP页面中进行访问控制时,一般会使用JSP的( B )内置对象实现对用户的会话跟踪(选择一项)

A. Request

B. Session

C. Response

D. Application

在JSP页面中有如下Java代码,一共存在( B)处错误(选择一项)

<%

String userName= (String)session.getParameter("userName");

if(userName==null)

{

%>

您尚未登录!

<%

}

else

{

%>

欢迎您,<%=userName %>

<%

}

%>

A. 0

B. 1

C. 2

D. 3

在JSP中,以下哪个方法可以正确获取复选框的值( C )(选择一项)

A. request.getParameterValue()

B. response.setParameterValues()

C. request.getParameterValues()

D. request.getParameter()

在一个jsp页面中包含了这样一种页面元素,<% int i = 10; %>这是( B )(选择一项)

A. 表达式

B. 小脚本

C. 指令

D. 注释

在JSP中,以下( C )技术最适合实现购物车的存储(选择一项)

A. Page

B. Request

C. Session

D. Application

以下JSP关键代码的运行效果为( A )。(选择一项)

<%

Map map=new HashMap();

map.put("a","Java");

map.put("b","JSP");

map.put("a","C#");

request.setAttribute("map",map);

%>

${map.b}<br/>

${map["a"]}

A. JSP

C#

B. JSP

JAVA

C. 运行时出现错误

D. 什么也不输出。

以下JSP代码运行后的结果为( B )。(选择一项)

<%int i =8;%>

<%=i+“8”%>

A. i8

B. 88

C. 16

D. 编译错误

如下JSP代码输出集合中各元素,横线处应填写( AC )。(选择二项)

<%

List<String> strs= new ArrayList<String>();

strs.add("北京");

strs.add("上海");

strs.add("浙江");

request.setAttribute("strs",strs);

%>

<c:forEach var="strList" items="___________">

<c:out value="________"></c:out>

</c:forEach>

A. strs,strs,{strList}

B. strList,strList,{strs}

C. requestScope.strs,requestScope.strs,{strList}

D. strList,strList,{requestScope.strs}

以下JSP关键代码的功能为输出"姓名:陈小斌",横线处应填写( AC ).(选择二项)

<%

Map stus = new HashMap();

stus.put("stu1","王晓");

stus.put("stu2","黄青");

stus.put("stu3","陈小斌");

request.setAttribute("stuList",stus);

A. ${stuList.stu3}

B. ${stuList[stu3]}

C. ${stuList[“stu3”]}

D. ${stuList.“stu3”}

如下JSP代码输出集合中各元素,横线处应填写( AC )。(选择二项)

<%

List<String> strs= new ArrayList<String>();

strs.add("北京");

strs.add("上海");

strs.add("浙江");

request.setAttribute("strs",strs);

%>

<c:forEach var="strList" items="___________">

<c:out value="________"></c:out>

</c:forEach>

A. strs,strs,{strList}

B. strList,strList,{strs}

C. requestScope.strs,requestScope.strs,{strList}

D. strList,strList,{requestScope.strs}

在JSP中,以下哪个方法可以正确获取复选框的值( C )(选择一项)

A. request.getParameterValue()

B. response.setParameterValues()

C. request.getParameterValues()

D. request.getParameter()

JSP中的有很多内置对象可以方便程序开发,其中不包括( C )(选择一项)

A. Out

B. Request

C. Redirect

D. Response

在一个jsp页面中包含了这样一种页面元素,<% int i = 10; %>这是( B )(选择一项)

A. 表达式

B. 小脚本

C. JSP指令

D. 注释

在JSP中,以下( C )技术最适合实现购物车的存储(选择一项)

A. Page

B. Request

C. Session

D. Application

在使用表单提交数据时,如果标签的method属性未指定的时候,则以下说法中正确的是( B )(选择一项)

A. 默认为POST请求

B. 默认为GET请求

C. 默认为Fast请求

D. 编译错误

如果要把一个“accp”字符串信息放在session对象里,则下列正确的是( A )(选择一项)

A. session.setAttribute(“message”,“accp”);

B. session.setAttribute(message,“accp”);

C. session.setAttribute(“accp”,“message”);

D. session.setAttributes(“message”,“accp”);

在JSP中,假设表单的method=“post”,在发送请求时中文乱码处理的正确做法是( A )(选择一项)

A. request.setCharacterEncoding(“utf-8”);

B. response.setCharacter(“utf-8”);

C. request.setContentType(“text/html;charset=utf-8”);

D. response.setContentType(“text/html;charset=utf-8”);

在JSP中,对于数据的共享可通过不同的作用域对象实现,如果该数据仅限当前页面有效,可选择的作用域对象( A )。(选择一项)

A. PageContext

B. Request

C. Session

D. Application

在JSP中,pageContext、request、session、application均提供了存取数据的通用方法,假设已经在session中存入了名为"currentUser"的User对象,则取出该数据的正确语句是( BC )(选择二项)

A. User user = session.getAttribute(“currentUser”);

B. User user = (User)session.getAttribute(“currentUser”);

C. Object user = session.getAttribute(“currentUser”);

D. String user = (String)session.getAttribute(“currentUser”);

58.B 编写一个Filter,需要( )

A. 继承Filter 类

B. 实现Filter 接口

C. 继承HttpFilter 类

D. 实现HttpFilter接口

59.ABC 有关会话跟踪技术描述正确的是( )(多选)

A. Cookie是Web服务器发送给客户端的一小段信息,客户端请求时,可以读取该信息发送到服务器端

B. 关闭浏览器意味着会话ID丢失,但所有与原会话关联的会话数据仍保留在服务器上,直至会话过期

C. 在禁用Cookie时可以使用URL重写技术跟踪会话

D. 隐藏表单域将字段添加到HTML表单并在客户端浏览器中显示

60.C 在J2EE中,重定向到另一个页面,以下( )语句是正确的

A. request . sendRedirect(“http 😕/ www . svse . com . cn”);

B. request . sendRedirect();

C. response . sendRedirect(“http: // www . svse . com . cn”);

D. response .sendRedirect();

61.B EL表达式,${10 mod3},执行结果为( )

A. 10 mod 3

B. 1

C. 3

D. null

62.B request.getRequestDispatcher().forward(request,response)称之为( )

A. 流转

B. 转发

C. 重定向

D. 导航

63.BCD 有关Servlet的生命周期说法正确的有( ) (多选)

A. Servlet的生命周期由Servlet实例控制

B. init()方法在创建完Servlet实例后对其进行初始化,传递的参数为实现ServletContext接口的对象

C. service()方法响应客户端发出的请求

D. destroy()方法释放Servlet实例

64.B 在Servlet中,response.getWriter()返回的是________

A. JspWriter对象

B. PrintWriter对象

C. Out对象

D. ResponseWriter对象

在web.xml中使用_____A______标签配置过滤器

A. <filter>和<filter-mapping>

B. <filter-name>和<filter-class>

C. <filter>和<filter-class>

D. <filter-pattern>和<filter>

1

2

3

4

66.D 在访问Servlet时,在浏览器地址栏中输入的路径是在_______地方配置的

A. <servlet-name/>

B. <servlet-mapping/>

C. <uri-pattern/>

D. <url-pattern/>

1

2

3

4

67.A 在JSP页面中,能够完成输出操作的内置对象是 ( )

A. out

B. response

C. request

D. config

68.A 给定以下JSP代码片段,有2个客户依次浏览该JSP;且每个客户只浏览一次,第2个客户会看到浏览器显示( )。(请选择一项)

<%int x = 1; %>

<%!int x = 10; %>

X =<%=x%>

1

2

3

A. x=1

B. x=2

C. x=10

D. x=11

69.D 能够保留请求作用域中数据的转向方式是_______

A. response.forward()

B. response.sendRedirect()

C. session.getRequestDispatcher().forward(request,response)

D. request.getRequestDispatcher().forward(request,response)

70.C Login.jsp为登录页面,表单代码如下:

<form action="index.jsp"method="post">

<input type="text" name="name"/>

<input type="submit" value="login"/>

</form>

1

2

3

4

Index.jsp中直接显示用户名,以下哪种代码正确()

A. ${requestScope.name}

B. <%=name%>

C. ${param.name}

D. <%=param.name%>

1

2

3

4

71.B 某JSP中有如下代码,显示结果为( )

<%

inta = 5;

request.setAttribute(“a”,”123”);

session.setAttribute(“a”,”456”);

%>

<c:out value="${a}"/>

1

2

3

4

5

6

A. 5

B. 123

C. 456

D. null

72.A 在编写过滤器时,需要完成的方法( )

A. doFilter()

B. doChain()

C. doPost()

D. doDelete()

73.B 以下代码执行效果为( ):

<c:forEach var = "i" begin = "1" end ="5" step = "2">

<c:outvalue=“${i}”/>

</c:forEach>

1

2

3

A. 1 2 3 4 5

B. 1 3 5

C. i i i

D. 15

request.setAttribute("user","svse");

session.setAttribute("user","bob");

1

2

使用{user}则显示( B)

A. null

B. svse

C. bob

D. 啥也没有

75.A 以下代码执行效果为( )

<c:forEach var = "i" begin ="1" end = "5">

<c:outvalue="${i}"/>

</c:forEach>

1

2

3

A. 1 2 3 4 5

B. i i i i i

C. 15

D. 编译错误

MVC中的 M V C 分别用_______、_______、_____表示(C)

A. jsp servlet javabean

B. HTml javabean jsp

C. javabean jsp servlet

D. servlet html jsp

pageContext.setAttribute("user","tom");

request.setAttribute("user","bob");

1

2

显示"bob",则可以使用( D )

A. {request.getAttribute(“user”)}

B. {param.user}

C. {user}

D. {requestScope.user}

以下哪个标签实现了switch功能( C )

A. <c:if>

B. <c:switch>

C. <c:choose>

D. <c:case>

过滤器使用________B______才能继续传递到下一个过滤器

A. request.getRequestDispatcher().forward(request,response);

B. doFilter()

C. doPut()

D. doChain()

80.C如下代码,执行效果为( C )

<c:set var=“a” value=“123” />

<c:out value=“${a}”/>

<c:out value=“a”/>

1

2

3

A. 123 123

B. a 123

C. 123 a

D. A a

application对象是_______,而session对象则是__________ ( C )

A. 服务器的一个数据空间,可以让服务器中的所有应用共享数据 / 与用户的请求有关

B. 应用程序上下文,它允许数据在同一应用程序中的任何Web组件共享 / 每个客户专用的

C. 存放所有的请求中数据 / 存放会话中的所有数据

D. HttpApplication类型 / 保存用访问应用期间的私有数据

下面关于MVC的说法不正确的是 ( D )

A. M表示Model层,是存储数据的地方

B. View表示视图层,负责向用户显示外观

C. Controller是控制层,负责控制流程

D. 在MVC架构中 jsp通常做控制层

一个具有注脚的文本。

填空题

1、用户可以有多种方式请求Servlet,如 浏览器直接调用,页面form中提交调用 、超链接调用 、 Servlet调用 等。

2、out对象的 _out.flush()_方法,功能是输出缓冲的内容。

3、response对象的_ sendRedirect(URL url)__方法可以将当前客户端的请求转到其他页面去。表单的提交方法包括__get__和___post__方法。

4、response.setHeader(“Refresh”, “5”)的含义是指 页面刷新时间为 5秒 。

5、表单标记中的__action___属性用于指定处理表单数据程序url的地址。

6、使用cookie的基本步骤为:创建cookie对象,设置cookie对象的有效时间 ,传送cookie对象 , 读取cookie对象 。

7、Servlet中使用Session对象的步骤为:调用HttpServletRequest.getSession()得到Session对象,查看Session对象,在会话中保存数据。

8、在Servlet中,主要使用HttpServletResponse类的重定向方法 sendRedirect() 方法实现重定向,以及使用RequestDispatcher类的转发方法 forward() 方法实现转发功能。

9、Servlet接口定义了三个用于Servlet生命周期的方法,它们是init()、service()、destroy()

10、Servlet运行于 服务器 端。

11、使用Servlet处理表单提交时,两个最重要的方法是_ doGet() _和_doPost() 。

12、Serlvet接口只定义了一个服务方法就是_ service() _。

13、MVC是三层开发结构,这三个字母按顺序分别代表_ model__、__view 、__controller __。

14、Filter接口中最主要的方法是 doFilter 方法。

15、实现Filter接口的类需要重写doFilter方法、init方法、destroy方法。

16、ServletContext 被创建时的监听类需要实现 ServletContextListener接口。

17、配置事件监听类的配置文件是 <listener><listener-class>监听类路径</listenr-class></listener>______

18、"/"的问题。在浏览器发请求时它代表什么含义__代表服务器根目录__,服务器内部跳转时代表什么含义___代表项目根目录____

19、下面代码有什么问题,请指出:response.setContentType(“text/html,charset=gbk”);__中间应该是;而不是,

20、一个完整的JSP页面是由普通的HTML标记、JSP指令标记、JSP动作标记、变量声明与方法声明 、程序片 、表达式、 注释7种要素构成。

21、JSP页面的基本构成元素,其中变量和方法声明(Declaration)、表达式 (Expression)和Java程序片(Scriptlet)统称为JSP脚本元素 。

22、指令标记、JSP动作标记统称为 JSP标记 。

23、“<%!”和“%>”之间声明的方法在整个页面内有效,称为页面的成员方法 。

24、在“<%!”和“%>”之间声明的变量又称为 页面成员变量 ,其作用范围为整个JSP页面。

25、JSP页面的程序片中可以插入 HTML 标记。

26、JSP页面中,输出型注释的内容写在 “<!--” 和 “-->” 之间。

27、Page指令的属性Language的默认值是 java 。

28、在Error.jsp页面中,要使用Exception对象,必须设置的指令是<%@page isErrorPage = “true”%>.

29、JSP的__session___对象用来保存单个用户访问时的一些信息。

30、response对象的_sendRedirect(URL url)___方法可以将当前客户端的请求转到其他页面去。

31、当客户端请求一个JSP页面时,JSP容器会将请求信息包装在__request__对象中。

32、在JSP中为内置对象定义了4种作用范围,即Application Scope 、

Session Scope 、Page Scope 和Request Scope 四个作用范围。

33、表单的提交方法包括___post___和____get__方法。

34、JavaBean是一个 java类,它必须有一个无参的构造方法。

35、JSP的是内部对象可以直接使用,它是由 web容器 创建的。

36、在JSP中,页面间对象传递的方法: request 、 session 、 application 、 cookie 等方法。

37、在jsp页面中,可以用request对象的 getParameterValues() 方法来获取其他页面传递参数值的数组。

38、在Web服务器端使用JavaBean,将原来页面中程序片完成的功能封装到JavaBean中,这样能很好地实现 业务逻辑层与视图层的分离 。

39、JavaBean中用一组set方法设置Bean的私有属性值,get方法获得Bean的私有属性值。set和get方法名称与属性名称之间必须对应,也就是:如果属性名称为xxx,那么set和get方法的名称必须为 setXxx() 和 getXxx() 。

40、使用Bean首先要在JSP页面中使用 import 指令将Bean引入。

41、控制器主要负责两方面的动作: 把用户的请求分发到相应的模型 ;将模型的改变及时反映到视图上 。

42、简单地说,JDBC能够完成下列三件事:与一个数据库建立连接(connection)、向数据库发送SQL语句(statement) 、处理数据库返回的结果(resultset) 。

43、查询结果集ResultSet对象是以统一的行列形式组织数据的,执行ResultSet rs = stmt.executeQuery (“select bid,name,author,publish,price from book”);语句,得到的结果集rs第一列显示 bid 字段;而每一次rs只能看到一行,要看到下一行,必须使用 next() 方法移动当前行。ResultSet对象使用 getXXX() 方法获得当前行字段的值。

44、stmt为Statement对象,执行String sql= "delete from book where bid=‘tp1001’ ";语句后,删除数据库表的记录需要执行stmt.executeUpdate(sql); 语句。

45、 模型 封装了数据和对数据的操作,是实际进行数据处理计算的地方。 视图 是应用和用户之间的接口,它负责将应用显现给用户和显示模型的状态。控制器 负责视图和模型之间的交互,控制对用户输入的响应、响应方式和流程。

46、JSTL标签库中,c:forEach标签用来循环输出集合中的数据。

47、获取request作用域中名为“uname”值的EL表达式是${uname} 。

简答题

1、说一说Servlet的生命周期?

Servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由Servlet接口的init,service和destroy方法表达。 Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。

2、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?

JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。

3、什么是Cookie?。

cookie是Web服务器发送给浏览器的一块信息。浏览器会在本地文件中给每一个Web服务器存储cookie。以后浏览器在给特定的Web服务器发请求的时候,同时会发送所有为该服务器存储的cookie,可以用来在某个WEB站点会话间持久的保持数据,是一种用来跟踪浏览器用户身份的会话方式。

4、什么是session?

session其实指的就是访问者从到达某个特定主页到离开为止的那段时间。 Session其实是利用Cookie进行信息处理的,当用户首先进行了请求后,服务端就在用户浏览器上创建了一个Cookie,当这个Session结束时,其实就是意味着这个Cookie就过期了。session都是用来跟踪浏览器用户身份的会话方式。

5、session的工作原理是什么?

session技术中所有的数据都保存在服务器上,客户端每次请求服务器的时候会发送当前会话的sessionid,服务器根据当前sessionid判断相应的用户数据标志,以确定用户是否登录或具有某种权限。

6、cookie和session的区别是什么?

cookie 和session的区别是:cookie数据保存在客户端,session数据保存在服务器端。无论客户端浏览器做怎么样的设置,session都应该能正常工作。客户端可以选择禁用cookie,但是,session仍然是能够工作的,因为客户端无法禁用服务端的session。

在存储的数据量方面session和cookies也是不一样的。session能够存储任意的Java对象,cookie只能存储String类型的对象。

7、什么是Servlet?

Servlet是用来处理客户端请求并产生动态网页内容的Java类。Servlet主要是用来处理或者是存储HTML表单提交的数据,产生动态内容,在无状态的HTTP协议下管理状态信息。

8、get请求和post请求有什么区别?

GET请求会把名值对追加在请求的URL后面。因为URL对字符数目有限制,进而限制了用在客户端请求的参数值的数目。并且请求中的参数值是可见的,因此,敏感信息不能用这种方式传递。

POST请求通过把请求参数值放在请求体中来克服GET方法的限制,因此,可以发送的参数的数目是没有限制的。最后,通过POST请求传递的敏感信息对外部客户端是不可见的。

9、Jsp隐式对象是什么意思?有哪些隐式对象?

JSP隐式对象是页面中的一些Java对象,JSP容器让这些Java对象可以为开发者所使用。开发者不用明确的声明就可以直接使用他们。JSP隐式对象也叫做预定义变量。

JSP有9个隐式对象:application、page、request、response、session、exception、out、config、pageContext

10、简述ServletContext接口的三个主要作用。

1)获取Web应用程序的初始化参数

2)实现多个Servlet对象共享数据

3)读取Web应用下的资源文件

11、简述请求转发与重定向的异同?

1、请求转发与重定向的异同点如下:

1)请求转发和重定向都可以实现访问一个资源时转向当前应用资源

2)请求转发是一次请求一次响应,而重定向为两次请求两次响应

3)一般情况下应该使用请求转发,减少浏览器对服务器的访问,减轻服务器压力

4)如果需要改变浏览器的地址栏,或更改浏览器的刷新按钮的功能时需要使用重定向

12、简述什么是会话技术?常用会话技术是什么?

会话过程类似于生活中的打电话过程,它指的是一个客户端(浏览器)与Web服务器之间连续发生的一系列请求和响应过程。在Servlet技术中,提供了两个用于保存会话数据的对象,分别是Cookie和Session。

13、简述过滤器的作用。

Filter被称作过滤器或者拦截器,其基本功能就是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应处理前后实现一些特殊功能。

14、简述Filter在Web应用中拦截的过程

当浏览器访问服务器中的目标资源时,会被Filter拦截,在Filter中进行预处理操作,然后再将请求转发给目标资源。当服务器接收到这个请求后会对其进行响应,在服务器处理响应的过程中,也需要先将响应结果发送给拦截器,在拦截器中对响应结果进行处理后,才会发送给客户端。

15、请简述什么是JDBC。

JDBC的全称是Java数据库连接(Java Database Connectivity),它是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系数据库,并使用SQL语句来完成对数据库中数据的查询、更新和删除等处理。

16、简述JDBC的实现步骤。

1)加载并注册数据库驱动

2)通过DriverManager获取数据库连接

3)通过Connection对象获取Statement对象

4)使用Statement执行SQL语句

5)操作ResultSet结果集

6)关闭连接,释放资源

17、请简述JSP的运行原理。

1)客户端发出请求,请求访问JSP文件。

2)JSP容器先将JSP文件转换成一个Java源文件(Java Servlet源程序)。

3)如果转换成功,则JSP容器将生成的Java源文件编译成相应的字节码文件.class。

4)由Servlet容器加载转换后的Servlet类(.class文件)。

5)执行jspService()方法来处理客户端的请求。

6)当请求处理完成后,响应对象由JSP容器接收,并将HTML格式的响应信息发送回客户端。*

复习资料

1、说一说Servlet的生命周期?

Servlet的生命周期主要由以下三个阶段组成:初始化,服务和销毁。

初始化(Initialization): 当一个Servlet被载入到内存中时(例如,第一次访问或者服务器启动并且在web.xml中配置了load-on-startup),Servlet容器(例如Tomcat)就会调用Servlet的init()方法进行初始化。此方法在Servlet的生命周期中只被调用一次。

服务(Servicing): 一旦Servlet被初始化,对其的每一次请求(例如HTTP请求)Servlet容器都会根据请求类型调用相应的方法(例如doGet(), doPost()等)。这个阶段会重复执行,每次有新的请求时都会被调用。

销毁(Destruction): 当Servlet容器需要从内存中移除Servlet实例时(例如服务器关闭或者手动卸载Servlet),就会调用Servlet的destroy()方法。它也只在Servlet的生命周期中被调用一次。

举一个应用场景的例子,假设我们有一个用于处理用户登录请求的LoginServlet。当服务器第一次启动或者第一次收到登录请求时,LoginServlet会被初始化,调用init()方法。然后,每当有用户发送登录请求时,LoginServlet就会调用 doPost()方法处理这个请求。最后,当服务器关闭或者我们不再需要LoginServlet时,就会调用destroy()方法,销毁这个Servlet。

2、Servlet API中forward()与redirect()的区别?

forward() 和 redirect() 都是用于在服务器端处理请求后,将请求/响应转发或重定向到另一个资源(例如另一个 Servlet,或者是一个 HTML 页面等)的方法。但是,它们的工作方式和使用场景有些不同。

1. forward():

forward() 方法是在服务器端进行的,客户端(浏览器)并不知道发生了转发,所以浏览器的 URL 地址栏不会改变。

转发是在服务器内部进行的,所以它更快,且不需要服务器和客户端之间的额外通信。

当使用 forward() 方法时,请求对象和响应对象可以在资源之间共享,这意味着你可以在请求的属性中设置数据,然后在被转发的资源中获取这些数据。

2. redirect():

redirect() 方法是通过向客户端(浏览器)发送一个带有新 URL 的响应来工作的,然后客户端会向这个新 URL 发送一个新的请求。所以,浏览器的URL地址栏会显示新的地址。

重定向需要服务器和客户端之间的额外通信,所以它比转发稍慢一些。

由于 redirect() 会导致新的请求,所以原始请求对象中的数据不会被保留。

举个例子,假设有一个电子商务网站,用户在浏览商品的时候,如果他们未登录,我们可能会使用 forward() 方法将请求转发到登录页面,因为我们需要保留用户原来的请求(即他们浏览的商品),以便在他们登录后可以继续处理。然而,如果用户完成了购物,我们可能会使用 redirect() 方法将他们重定向到一个确认页面,因为我们希望这个确认页面在浏览器的历史记录中有一个单独的条目,这样用户就可以使用浏览器的后退按钮返回到购物页面,而不会再次提交购物请求。

3、request.getAttribute()和 request.getParameter()有何区别?

request.getAttribute() 和 request.getParameter() 是 Java Web 编程中常见的两种方法,它们在 HTTP 请求处理中有着不同的用途和含义。

request.getParameter():这个方法是用来获取客户端(通常是一个网页表单)发送的参数。这些参数是通过 GET 或 POST 请求发送的。例如,如果您有一个登录表单,其中包含用户名和密码字段,那么您可以使用 request.getParameter("username") 和 request.getParameter("password") 来获取这些字段的值。

request.getAttribute():这个方法是用来从请求范围(request scope)获取对象的。当您在处理一个请求时,可以在请求范围内设置对象,然后在稍后的处理阶段或者在 JSP 页面中获取这些对象。例如,一个 Servlet 可以通过 request.setAttribute("data", data) 来设置一个名为 “data” 的属性,然后在 JSP 页面中可以通过 ${data} 来获取和显示这个对象。

所以,主要的区别在于,getParameter() 是用来获取客户端发送的参数,而 getAttribute() 是用来在服务器端的请求处理过程中共享对象。

举个例子,假设您有一个用来处理用户登录的 Servlet。用户会从一个 HTML 表单中输入他们的用户名和密码,然后这些信息会通过 POST 请求发送到您的 Servlet。在您的 Servlet 中,您可以使用 request.getParameter("username") 和 request.getParameter("password") 来获取这些信息。然后,您可能会验证这些信息,并根据验证结果,将一些信息(如用户对象或错误消息)放入请求范围,以便在转发到不同的 JSP 页面时使用。这就是 request.setAttribute() 和 request.getAttribute() 的用途。

4、jsp静态包含和动态包含的区别

在 JSP 中,包含操作可以是静态的(也被称为编译时包含)或动态的(也被称为运行时包含)。它们的主要区别在于包含操作发生的时间和方式。

静态包含:静态包含使用 JSP 指令 <%@ include file="file.jsp" %> 来实现。这种包含在 JSP 页面编译时发生。换句话说,被包含的 JSP 页面的内容在编译时就被插入到主 JSP 页面中,然后作为一个整体一起编译。因此,如果被包含的页面在包含后发生更改,这些更改将不会反映在主页面上,除非主页面重新编译。

动态包含:动态包含使用 JSP 动作 <jsp:include page="file.jsp" /> 来实现。这种包含在请求处理期间,也就是运行时发生。每次请求主 JSP 页面时,都会执行包含操作,并执行被包含的 JSP 页面的代码。因此,如果被包含的页面在包含后发生更改,这些更改将会在下次请求主页面时反映出来。

举个例子,假设我们有一个网站的头部和尾部是在所有页面上都一样的,我们可以用静态包含将它们包含在每个页面中。但是,如果我们有一个天气小部件,它需要根据当前的天气实时更新,那么我们可能会选择使用动态包含,以确保每次请求页面时都能获取最新的天气信息。

5、MVC的各个部分都有那些技术来实现?如何实现?

MVC(Model-View-Controller)是一种设计模式,用于分离应用程序的数据访问、用户界面和业务逻辑,主要用于简化应用程序的组织和实现。在 Java Web 开发中,通常使用以下技术来实现 MVC 设计模式:

Model(模型):模型代表应用程序的数据和业务逻辑。它通常包含与数据库交互的代码,以及处理数据的算法和逻辑。在 Java Web 应用程序中,模型通常由 POJO (Plain Old Java Object) 类来实现,这些类通常与数据库表一一对应。另外,数据访问对象(DAO)和服务层也可以被看作是模型的一部分,用于封装具体的数据库操作和业务逻辑。

在 Java 中,我们可以使用各种 ORM 框架(如 Hibernate、MyBatis 等)来实现与数据库的交互。

View(视图):视图负责将模型的数据展示给用户。在 Java Web 开发中,视图通常由 JSP 或 Thymeleaf 这样的模板引擎来实现。

例如,一个 JSP 页面可能会使用 EL (Expression Language) 和 JSTL (JSP Standard Tag Library) 来访问模型数据并将其呈现给用户。

Controller(控制器):控制器处理用户的请求,调用模型的逻辑,并更新视图。在 Java Web 开发中,控制器通常由 Servlet 或 Spring MVC 的 Controller 类来实现。

例如,一个 Servlet 可以接收用户的请求,从请求中获取参数,然后调用模型的方法来处理这些参数。处理完成后,Servlet 可以将结果存储在请求或会话范围的属性中,然后转发或重定向到一个 JSP 页面,该页面将使用这些结果来生成响应给用户。

以下是一个简单的示例,展示了如何使用 Servlet、JSP 和 POJO 类来实现 MVC 设计模式:

// Model

public class User {

private String name;

// getters and setters...

}

// Controller (Servlet)

@WebServlet("/user")

public class UserController extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

User user = new User();

user.setName("John");

request.setAttribute("user", user);

request.getRequestDispatcher("/user.jsp").forward(request, response);

}

}

// View (JSP)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<html>

<body>

User name: ${user.name}

</body>

</html>

在这个例子中,当用户访问 “/user” URL 时,UserController Servlet 会被执行。在 Servlet 中,我们创建了一个 User 对象,并将其设置为请求范围的属性。然后,我们将请求转发到 “user.jsp” 页面,该页面使用 EL 来访问 “user” 属性并将其显示给用户。

6、jsp有哪些内置对象?作用分别是什么?

JSP 中有 9 个预定义的(内置的)对象,你可以在 JSP 页面中直接使用它们,无需声明。以下是这些对象以及它们的作用:

request:这是一个 HttpServletRequest 对象。这个对象包含了客户端发送给服务器的请求信息,例如参数、头信息、请求的 URL 等。

response:这是一个 HttpServletResponse 对象。使用这个对象,你可以控制发送给客户端的响应,例如设置响应头、设置响应状态码等。

pageContext:这是一个 PageContext 对象。这个对象提供了对其他几个内置对象的访问,同时提供了一些有用的页面范围的方法,例如用于获取、设置和删除属性的方法。

session:这是一个 HttpSession 对象。这个对象用于在用户的整个会话期间保存状态信息。

application:这是一个 ServletContext 对象。这个对象允许你在整个应用程序范围内共享数据。

out:这是一个 JspWriter 对象。这个对象用于输出 HTML 到客户端。

config:这是一个 ServletConfig 对象。这个对象包含了 Servlet 的初始化参数。

page:这是一个 Object 对象,代表了当前的 Servlet 实例。

exception:这是一个 Throwable 对象。这个对象只在使用 isErrorPage=“true” 的错误页面中可用,它包含了在当前页面中抛出的异常。

这些内置对象为你在处理 HTTP 请求时提供了很大的便利。例如,你可以使用 request 对象来获取客户端发送的参数,使用 session 对象来跟踪用户的会话状态,使用 out 对象来发送 HTML 响应到客户端,等等。

7、jsp 和 servlet 有什么区别?

JSP (Java Server Pages) 和 Servlet 都是 Java Web 开发中常用的技术,它们都可以用于生成动态的 Web 内容。然而,它们在语法和用途上有一些重要的区别:

语法和易用性:JSP 是基于 HTML 的,它允许你在 HTML 代码中嵌入 Java 代码,这使得JSP 页面非常适合于生成和展示视图。JSP 支持表达式语言 (EL) 和 JSTL 标签库,这些功能使得在 JSP 页面中访问数据和执行常见操作变得非常简单。另一方面,Servlet 是纯 Java 的,你需要在 Servlet 中写出完整的 Java 代码来生成 HTML,这通常比在 JSP 中编写代码更为复杂和冗长。

编译方式:Servlet 在服务器启动时或在接收到第一次请求时编译,而且只编译一次。但是,JSP 在接收到第一次请求时编译,并且如果 JSP 文件被修改了,服务器会再次编译它。这意味着你可以更新 JSP 文件并立即看到更改,而无需重新启动服务器。

用途:由于上述的语法和易用性的差异,JSP 和 Servlet 通常被用于不同的目的。JSP 更适合于生成和展示视图,也就是用户看到的 HTML。Servlet 更适合于处理业务逻辑,例如处理表单提交、执行数据库查询等。

在实际开发中,JSP 和 Servlet 通常会一起使用,以实现 MVC (Model-View-Controller) 设计模式。在这种模式中,Servlet 作为控制器,处理用户的请求并执行业务逻辑;模型是由 POJO (Plain Old Java Object) 类来实现的,它们代表了应用程序的数据;JSP 作为视图,显示模型的数据给用户。

8、session 和 cookie 有什么区别?

Session 和 Cookie 都是用于存储用户的状态信息,但它们在许多方面都有所不同。以下是它们的主要区别:

存储位置:Session 数据存储在服务器端,每个用户都有一个独立的 Session。而 Cookie 存储在客户端(浏览器),服务器通过设置响应头部信息将 Cookie 发送给客户端。

存储容量:由于 Cookie 数据存储在客户端,因此其存储容量相对较小,通常不超过 4KB。而 Session 存储在服务器端,理论上其存储容量没有限制,但过多的 Session 数据会占用服务器的内存资源。

存储类型:Cookie 只能存储字符串类型的数据,并且需要对特殊字符进行编码。而 Session 可以存储任何类型的数据,包括字符串、数字、对象等。

生命周期:Cookie 有一个明确的过期时间,过期后 Cookie 数据将会被浏览器删除。如果没有设置过期时间,那么 Cookie 仅在当前浏览器会话期间有效,关闭浏览器后 Cookie 就会被删除。而 Session 的生命周期通常由服务器设置,当用户在一段时间内没有活动(如没有发送新的请求)时,服务器会自动销毁该用户的 Session。

安全性:由于 Cookie 数据存储在客户端,因此其安全性相对较低,可能会被恶意用户修改或窃取。而 Session 存储在服务器端,用户无法直接访问,因此更安全。

总的来说,选择使用 Session 还是 Cookie 主要取决于你的需求。如果你需要在客户端存储大量的数据,并且对安全性要求较高,那么应该使用 Session。而如果你只需要存储少量的数据,并且希望即使在用户关闭浏览器后也能保持这些数据,那么可以使用 Cookie。

9、Cookie的过期和Session的超时有什么区别?

Cookie 和 Session 都是在 Web 开发中常用的会话技术,它们都可以用于在用户的多次请求之间保存某些状态信息。然而,Cookie 的过期和 Session 的超时代表的是两种不同的概念:

Cookie 过期:

Cookie 是存储在客户端的一小段数据。当我们创建一个 Cookie 时,我们可以设置一个 Max-Age 或者一个 Expires 属性,来指定这个 Cookie 的生命周期。当这个 Cookie 的生命周期结束时,这个 Cookie 就会过期,浏览器会将其删除。

例如,如果我们创建了一个 Max-Age 为 3600 秒(1 小时)的 Cookie,那么这个 Cookie 将在创建后的 1 小时后过期。无论用户在这个 1 小时内做了什么(无论是浏览其他页面,还是关闭浏览器),只要这个 1 小时结束,这个 Cookie 就会过期。

Session 超时:

Session 是存储在服务器端的一组数据,每个用户都有一个与之对应的 Session。Session 的超时,也就是 Session 的生命周期结束,通常是由于用户在一段时间内没有活动(例如,用户没有发送新的请求)。

例如,如果我们设置了 Session 的超时时间为 30 分钟,那么如果用户在 30 分钟内没有发送新的请求,这个 Session 就会超时。一旦用户发送了新的请求,Session 的生命周期就会重置。

总的来说,Cookie 的过期是由 Cookie 的创建时间和 Max-Age 或 Expires 属性决定的,而 Session 的超时是由用户的最后一次活动和 Session 的超时设置决定的。

10、如何解决分布式 Session 问题?

在分布式系统中,Session 管理可能会成为一个挑战,因为用户的请求可能会被路由到不同的服务器上,而这些服务器需要共享 Session 信息。以下是解决分布式 Session 问题的一些常见策略:

Session 复制:在这种方法中,每个服务器都有所有 Session 的副本。这意味着,无论请求被路由到哪个服务器,都能找到该 Session 的信息。这种方法的优点是,如果某个服务器出现故障,其他服务器仍可以处理请求。但是,这种方法可能会消耗大量的内存,并且在服务器之间同步 Session 信息也可能成为性能瓶颈。

Session 粘性:在这种方法中,一旦用户的请求被路由到某个服务器,后续的所有请求都将被路由到同一台服务器。这样,只有这台服务器需要保存 Session 信息。这种方法的优点是简单且效率高,但是,如果这台服务器出现故障,用户的 Session 信息将丢失。

集中 Session 存储:在这种方法中,所有的 Session 信息都存储在一个集中的数据存储(例如,数据库或者缓存服务器如 Redis)中。无论请求被路由到哪个服务器,都可以从这个集中的数据存储中获取 Session 信息。这种方法的优点是,可以很好地处理服务器的故障,但是,如果集中的数据存储出现故障,所有的 Session 信息都可能丢失。

JWT(JSON Web Tokens):JWT 是一种无状态的解决方案,每次用户请求都会携带一个签名的 JSON 对象,该对象包含所有必要的信息。服务器验证 JWT 的签名,如果验证通过,则处理请求。这种方法的优点是无需在服务器端存储 Session 信息,可以很好地处理服务器的故障,但是,JWT 的大小通常比 Session ID 大,如果 JWT 包含了大量的数据,可能会影响网络性能。

选择哪种策略取决于具体的应用需求和环境,例如系统的可用性需求、系统的规模、网络条件等。

11、在单点登录中,如果 cookie 被禁用了怎么办?

单点登录(Single Sign-On,SSO)是一种让用户只需登录一次就可以访问所有相关的系统或服务的方法。通常,这种方法依赖于 Cookie 来跟踪用户的登录状态。然而,如果 Cookie 被禁用了,我们可以考虑以下的替代方案:

URL 重写:在每个 URL 后面附加一个 Session ID。这样,即使 Cookie 被禁用,服务器仍然可以通过 URL 中的 Session ID 来识别用户。但是,这种方法可能会引发安全问题,因为 Session ID 可能会被截获或者泄露,同时也可能破坏 URL 的美观。

隐藏表单字段:在每个表单中添加一个隐藏的字段,用于存储 Session ID。当用户提交表单时,服务器可以从表单字段中获取 Session ID。这种方法只适用于那些通过表单进行交互的应用。

使用 localStorage 或 sessionStorage:如果应用是基于 HTML5 的,那么可以使用 Web Storage API 中的 localStorage 或 sessionStorage 来存储 Session ID。这两者都是在客户端存储数据的方法,和 Cookie 不同的是,它们不会随着每次请求自动发送到服务器,而需要通过 JavaScript 明确地读取和发送。

使用其他认证方法:例如,可以使用基于令牌的认证方法,如 JWT(JSON Web Tokens)。在这种方法中,服务器生成一个包含用户身份信息的令牌,并将其发送给客户端。客户端将此令牌存储起来,并在每次请求时将其包含在请求头中。服务器通过验证此令牌来识别用户。

以上这些方法都有其优点和缺点,选择哪种方法取决于具体的应用需求和环境。例如,如果应用需要高安全性,那么可能需要避免使用 URL 重写;如果应用是基于 HTML5 的,那么可能可以考虑使用 localStorage 或 sessionStorage。

12、session何时被删除?

在 Web 开发中,一个 Session 对象何时被删除(或称为 Session 失效)主要取决于以下几个因素:

Session 超时:大多数 Web 应用框架都允许你设置一个 Session 的超时时间。如果在这个时间段内,服务器没有收到来自特定 Session 的任何请求,那么这个 Session 就会被自动删除。在 Java Servlet 中,你可以在 web.xml 配置文件中通过 <session-config> 元素来设置 Session 的超时时间。

手动删除:你的应用程序代码可以显式地删除一个 Session。例如,在 Java Servlet 中,你可以调用 HttpSession.invalidate() 方法来立即删除一个 Session。

服务器重启:如果你的 Web 服务器或应用服务器重启,那么存储在内存中的所有 Session 通常都会被删除。然而,一些服务器可以配置为在重启时将 Session 信息保存到磁盘,并在重启后从磁盘重新载入 Session 信息。

浏览器关闭:如果 Session 是基于 Cookie 实现的(这是最常见的实现方式),那么当用户关闭浏览器时,与 Session 关联的 Cookie 通常会被删除(除非你将 Cookie 设置为持久化 Cookie)。然而,这并不会直接导致 Session 在服务器端被删除,除非服务器设置了 Session 超时。

注意,Session 的管理是 Web 应用服务器的责任,不同的服务器可能会有不同的 Session 管理策略。例如,一些服务器可能会定期检查并删除超时的 Session,而其他服务器可能会在收到新请求时检查 Session 的超时状态。

13、tomcat容器是如何创建servlet类实例?用到了什么原理?

Tomcat 是一个实现了 Servlet 规范的 Web 容器。它负责创建和管理 Servlet 的生命周期,包括实例化 Servlet、调用其初始化方法和服务方法,以及调用其销毁方法。

以下是 Tomcat 创建 Servlet 实例的过程:

加载 Servlet 类:当 Tomcat 收到一个请求并确定需要使用某个特定的 Servlet 来处理请求时,它会使用类加载器(ClassLoader)来加载对应的 Servlet 类。如果这个 Servlet 类已经被加载过,那么就会跳过这个步骤。

实例化 Servlet 类:Tomcat 使用 Java 的 newInstance 方法来创建 Servlet 类的一个新实例。这个方法调用了 Servlet 类的无参构造函数。如果 Servlet 类没有无参构造函数,或者构造函数不可访问(例如,构造函数是私有的),那么 newInstance 方法会抛出一个异常。

初始化 Servlet 实例:Tomcat 调用了 Servlet 实例的 init 方法来初始化这个 Servlet。init 方法接收一个 ServletConfig 对象作为参数,这个对象包含了 Servlet 的初始化参数。

调用服务方法:在 Servlet 初始化完成后,Tomcat 会调用 Servlet 的 service 方法来处理请求。service 方法接收两个参数:一个 HttpServletRequest 对象和一个 HttpServletResponse 对象。这两个对象分别代表了客户端的请求和服务器的响应。

以上步骤中提到的 newInstance 方法,是 Java 反射(Reflection)的一部分。Java 反射允许程序在运行时访问和操作类和对象的内部信息,包括类的字段、方法和构造函数。在这个场景下,反射使得 Tomcat 能够在不知道 Servlet 类的具体类型的情况下,创建 Servlet 类的实例。

需要注意的是,Servlet 是单例的,即对于每个 Servlet 类,Tomcat 只会创建一个实例。这个实例会被多个线程共享,每个线程代表一个客户端的请求。因此,Servlet 必须是线程安全的。

14、如何避免 sql 注入?

SQL注入是一种常见的网络攻击方式,攻击者通过在查询语句中插入恶意的SQL代码,以获取敏感信息或对数据库进行操作。为了避免SQL注入,通常有以下几种方法:

预编译语句(Prepared Statements):这种方法是在执行SQL语句之前,先确定好SQL的执行格式,然后再把参数传入。由于参数不会被解释为SQL指令,因此可以防止SQL注入。在Java中,可以使用PreparedStatement对象来实现预编译语句。

String selectSQL = "SELECT * FROM Users WHERE username = ? AND password = ?";

PreparedStatement preparedStatement = connection.prepareStatement(selectSQL);

preparedStatement.setString(1, "user");

preparedStatement.setString(2, "password");

ResultSet resultSet = preparedStatement.executeQuery();

参数化查询(Parameterized Queries):参数化查询与预编译语句类似,也是先确定SQL语句的格式,然后再传入参数。这种方法也可以有效防止SQL注入。

过滤用户输入(Input Validation):在处理用户输入的信息之前,检查并过滤其中可能存在的恶意内容。例如,可以限制用户名只能由字母和数字组成。

最小权限原则(Principle of Least Privilege):对数据库的操作权限进行严格的控制,让每个用户只拥有其需要的最小权限,这样即使发生SQL注入,攻击者也无法执行非法的操作。

请注意,以上方法最好同时使用,以提供更强的安全保护。

15、什么是 XSS 攻击,如何避免?

XSS(Cross-Site Scripting)攻击是一种在网页上注入恶意脚本,使之在其他用户的浏览器上运行的攻击方式。当用户浏览这个含有恶意脚本的网页时,恶意脚本就会在用户的浏览器上执行,从而进行各种恶意操作,如窃取用户信息,篡改网页内容等。

以下是几种常用的防止XSS攻击的方法:

转义用户输入:对所有用户输入的数据进行转义处理(escaping),使得这些内容被浏览器解析为纯文本,而不是脚本代码。例如,可以把字符<和>转义为&lt;和&gt;,这样就可以防止恶意用户提交含有脚本的内容。

内容安全策略(Content Security Policy, CSP):CSP是一种浏览器安全机制,可以限制网页加载和执行的资源。例如,可以设置CSP只允许加载和执行来自于当前域名的脚本,这样就可以有效防止XSS攻击。

输入验证:对所有用户输入的数据进行验证,检查是否含有可能引发XSS攻击的字符或字符串,如<script>等,如果有,就拒绝接受。

使用HTTP-only Cookies:将敏感的会话cookie设置为HTTP-only,这样JavaScript就无法读取到cookie。即便XSS攻击发生,攻击者也无法窃取这些cookie。

避免使用不安全的API:部分JavaScript API,如eval,document.write,innerHTML,outerHTML等,可能会导致XSS攻击,应尽量避免使用。

请注意,以上方法最好同时使用,以提供更强的安全保护。

由于内容太多,更多内容以链接形势给大家,点击进去就是答案了

16. 什么是 CSRF 攻击,如何避免?

17. 什么是JDBC?

18. JDBC访问数据库的基本步骤是什么?

19. 常见的JDBC异常有哪些?

20. JDBC的DataSource是什么,有什么好处?

21. execute,executeQuery,executeUpdate的区别是什么?

22. JDBC的DriverManager是用来做什么的?

23. RowSet和ResultSet的区别?

24. 说说preparedStatement和Statement的区别

25. 说说事务的概念,在JDBC编程中处理事务的步骤。

26. 数据库连接池的原理。为什么要使用连接池。

27. JDBC的脏读是什么?哪种数据库隔离级别能防止脏读?

28. JDBC的DriverManager是用来做什么的?

29. execute,executeQuery,executeUpdate的区别是什么?

30. SQL查询出来的结果分页展示一般怎么做?

31. JDBC的ResultSet是什么?

32. AJAX有哪些有点和缺点?

33. AJAX应用和传统Web应用有什么不同?

34. Ajax的实现流程是怎样的?

35. HTTP中重定向和请求转发的区别?

36. 什么是过滤器?

37. 什么是监听器?

38. 什么是拦截器?

39. 过滤器和拦截器的区别?

40. Servlet与Filter的区别?

41. web.xml 的作用?

42. filter的生命周期?

8.Web应用常见技术

9.拓展

10.开发工具

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值