Java经典面试题 带答案(五)_forward和redirect的区别描述错误的是( ) a 一般来说浏览器会用刚才请求的所有参

js基础

1)对js的理解?
2)请说出以下代码输出的值?
3)把以下代码,改写成依次输出0-9
4)如何区分数组对象,普通对象,函数对象
5)面向对象、面向过程
6)面向对象的三大基本特性
7)XML和JSON的区别?
8)Web Worker 和webSocket?
9)Javascript垃圾回收方法?
10)new操作符具体干了什么呢?
11)js延迟加载的方式有哪些?
12)WEB应用从服务器主动推送Data到客户端有那些方式?

js基础.PNG

前16.PNG

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

  • 10 -
    8、对一批编号为 1~100,全部开关朝上(开)的灯进行以下*作:凡是 1 的倍
    数反方向拨一次开关;2 的倍数反方向又拨一次开关;3 的倍数反方向又拨一次
    开关……问:最后为关熄状态的灯的编号。
    9 想象你在镜子前,请问,为什么镜子中的影像可以颠倒左右,却不能颠倒上
    下?
    答案:因为照镜子时,镜子是与你垂直平行的,但在水平方向刚好转了 180 度。
    10 一群人开舞会,每人头上都戴着一顶帽子。帽子只有黑白两种,黑的至少有
    一顶。每个人都能看到其它人帽子的颜色,却看不到自己的。主持人先让大家
    看看别人头上戴的是什幺帽子,然后关灯,如果有人认为自己戴的是黑帽子,
    就打自己一个耳光。第一次关灯,没有声音。于是再开灯,大家再看一遍,关
    灯时仍然鸦雀无声。一直到第三次关灯,才有劈劈啪啪打耳光的声音响起。问
    有多少人戴着黑帽子?
    答案:应该是三个人:
    1,若是两个人,设 A、B 是黑帽子,第二次关灯就会有人打耳光。原因是 A
    看到 B 第一次没打耳光,就知道 B 也一定看到了有带黑帽子的人,可 A 除了知
    道 B 带黑帽子外,其他人都是白帽子,就可推出他自己是带黑帽子的人!同理 B
    也是这么想的,这样第二次熄灯会有两个耳光的声音。
    2,如果是三个人,A,B,C. A 第一次没打耳光,因为他看到 B,C 都是带黑
    帽子的;而且假设自己带的是白帽子,这样只有 BC 戴的是黑帽子;按照只有两
    个人带黑帽子的推论,第二次应该有人打耳光;可第二次却没有。。。于是他知道
    B 和 C 一定看到了除 BC 之外的其他人带了黑帽子,于是他知道 BC 看到的那个
    人一定是他,所以第三次有三个人打了自己一个耳光!
    3,若是第三次也没有人打耳光,而是第四次有人打了耳光,那么应该有几个
    人带了黑猫子呢?大家给个结果看看_
    11 两个圆环,半径分别是 1 和 2,小圆在大圆内部绕大圆圆周一周,问小圆自
    身转了几周?如果在大圆的外部,小圆自身转几周呢?
    答案:可以把圆看成一根绳子,大绳是小绳的 2 倍长,所以应该是 2 圈吧
  • 11 -
    12 1 元钱一瓶汽水,喝完后两个空瓶换一瓶汽水,问:你有 20 元钱,最多可
    以喝到几瓶汽水?
    答案:一开始 20 瓶没有问题,随后的 10 瓶和 5 瓶也都没有问题,接着把 5 瓶
    分成 4 瓶和 1 瓶,前 4 个空瓶再换 2 瓶,喝完后 2 瓶再换 1 瓶,此时喝完后手
    头上剩余的空瓶数为 2 个,把这 2 个瓶换 1 瓶继续喝,喝完后把这 1 个空瓶换
    1 瓶汽水,喝完换来的那瓶再把瓶子还给人家即可,所以最多可以喝的汽水数为:
    20+10+5+2+1+1=40
    四、数据库
    1、设有关系 R(S,D,M)其函数一览集 F={SÆD,DÆM}。则关系 R 至多满足
    _____。
    A. INF B. 2NF C. 3NF D. 4NF
    答案:B
    2、which are DML statements(choose all that apply)(下面哪个
    是 DML 语句多选)
    A. commit B. merge C.update D.delete E. creat F. drop
    答案:C,D
    3、whice select statement will the result ‘ello world’from
    the string’Hello world’?(如果要从字符串“Hello world”中提取出
    “ello world”这样的结果,下面的哪条 SQL 语句适合?)
    A. select substr(‘Hello World’,1)from dual;
    B. select substr(‘Hello World’,1,1)from dual;
    C. select lower(substr(‘Hello world’,1))from dual;
    D. select lower(trim(‘H’ from ‘Hello world’) )from dual;
    答案:D
    3、储存过程和函数的区别是什么
  • 12 -
    答案:存储过程是用户定义的一系列 SQL 语句的集合,涉及特定表或其他对象
    的任务,用户可以调用存储过程。而函数通常是数据库已经定义的方法,它接受
    参数并返回某种类型的值,并且不涉及特定用户表。
    4、事务是什么?
    答案:1)原子性:事务必须是原子工作单元。对于其数据修改,要么全都执行,
    要么全都不执行。
    2)一致性:事务在完成时,必须使所有的数据都保持一致。在相关数据库中,
    所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所
    有的内部数据结构都必须是正确的。
    3)隔离性:由并发事务所做的修改必须与任何其他并发事务作的修改隔离。事
    务查看数据更新时数据所处的状态,要么是另一并发事务修改它之前的状态,要
    么是另一事务修改它之后的状态,失误不会查看中间状态的数据,这称为可串行
    性,因为它能够重新装载起初始数据,并且重播一系列事务,以使数据结束时的
    状态与原始事务执行的状态相同。
    4)持久性:事务完成之后,它对于系统的影响是永久性的。该修改即使出现系
    统故障也将一直保持。
    5、游标的作用是什么?如何知道游标已经到了最后?
    答案:游标用于定位结果集的行。通过判断全局变量@@FETCH_STATUS 可以判
    断其是否到了最后。通常此变量不等于 0 表示出错或到了最后。
    6、触发器分为事前触发和事后触发,这两种触发有什么区别?语句级出发和行
    级触发有何区别?
    答案:事前触发器运行于触发事件运行之前,而事后触发器运行于触发事件发生
    之后。语句级触发器可以在语句执行前或后执行,而行级触发在触发器所影响的
    每一行触发一次。
    7、找出表 ppp 里面 num 最小的数,不能使用 min 函数
    答案:select * from ppp where num<=all(select num from ppp)
    或者
    Select top 1 num from ppp order by num
    8、找出表 ppp 里面最小的数,可以使用 min 函数
    答案:select * from ppp where num = (select Min(num)from ppp)
  • 13 -
    9、选择表 ppp2 中 num 重复的纪录
    答案:select * from ppp2 where num in(select num from ppp2 group
    by num having(count(num)>1))
    10、为了防止在查询记录的时候被其他用户更改记录,应该采用什么方法?如
    何用查询语句实现该方法?
    答案:添加一个“时间戳”类型的字段就可以了。 Timestamp 这种数据类型会
    根据当前时间自动产生一个时间字符串,确保这些数在数据库中是唯一的。
    Timetamp 一般用做给表行加版本戳的机制,存储大小为 8 字节。一个标志能
    有一个 timestamp 列。每次插入或更新包含 timestamp 列的行时,
    timestamp 列中的值均会更新。这一属性使 timestamp 列不适合为关键是用,
    尤其是不能作为主键是用。对行的任何更新都会更改 timestamp 值,从而更改
    键值。
    五、Java 框架方面
    1、关键的 Struts 标签种类?
    Bean 标签、html 标签、logic 标签、nested 标签。
    2、EJB 的三种 bean?
    会话 bean、实体 bean、消息驱动 bean。 3、什么是 Ajax?
    Ajax 的全称是:AsynchronousJavaScript+XML
    Ajax(AsynchronousJavaScriptandXML)是结合了 Java 技术、XML 以 及 JavaScript 等编程技术,可以让开发人员构建基于 Java 技术的 Web 应用,
    并打破了使用页面重载的惯例。
  • 14 -
    4、简单地说一下什么是 Hibernate?
    Hibernate 是 ORmaping 的一种实现
    是目前在 JAVA 界使用非常广泛的 ORMapping 的一种实现
    可以实现关系型数据库和对象之间的映射。
    用来开发数据库系统非常方便。
    可以将数据库和程序的设计融合在一起
    不会在出现以前那样程序是面向对象的,但是一到数据库那里就乱套了的想象。
    5、Struts 工作流程是什么?
    一个用户的请求是通 ActionServlet 来处理和转发的。那么,
    ActionServlet 如何决定把用户请求转发给哪个 Action 对象呢?这就需要
    一些描述用户请求路径和 Action 衍射关系的配置信息了。在 Struts 中,这
    些配置映射信息都存储在特定的 XML 文件 Struts-config.xml 中。在该配
    置文件中,每一个 Action 的映射信息都通过一个元素来配置。
    这些配置信息在系统启动的时候被读入内存,供 Struts 在运行期间使用。
    在内存中,每一个 元素都对应一个
    org.apache.struts.action.ActionMapping 类的实例。
    对于采用 Struts 框架的 web 应用,在 web 应用启动时就会加载并初始化
    ActionServlet,ActionServlet 从 struts-config.xml 文件中读取配
    置信息,把它们存放到各个配置对象中,例如 Action 的映射信息存放在
    ActionMapping 对象中。
    当 ActionServlet 接收到一个客户请求时,将执行如下流程:
    1.检索和用户请求相匹配的 ActionMapping 实例,如果不存在,就返回用户
    请求路径无效信息。
    2.如 ActionForm 实例不存在,就创建一个 ActionForm 对象,把客户提交
  • 15 -
    的表单数据保存到 ActionForm 对象中。
    3.根据配置信息决定是否需要表单验证。如果需要验证,就调用 ActionForm
    的 Validate()方法。
    4.如果 ActionForm 的 Validate()方法返回 null 或返回一个不包含
    ActionMessage 的 ActionErrors 对象,就表示表单验证成功。
    5.ActionServlet 根据 ActionMapping 实例包含的映射信息决定将请求转
    发给哪个 Action。如果相应的 Action 实例不存在,就先创建这个实例,然后
    调用 Action 的 execute()方法。
    6 . Action 的 execute ()方法返回一个 ActionForward 对象,
    ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件。
    7.ActionForward 对象指向的 JSP 组件生成动态网页,返回给客户。
    6、谈一谈你对 Spring 的认识?
    Spring 是 Rod 主创的一个应用于 J2EE 领域的轻量应用程序框架,其核心
    是一个 IOC 容器以及 AOP 实现,在核心上面的一个主要部件是数据访问 DAO 框
    架,包括一个自己的 JDBC 数据访问封装以及对众多 ORM 系统的集成支持。
    Spring 还内置一个功能强大、灵活的 Web MVC 框架,以提供快速的 Java Web
    应用程序开发,同时 Spring 还提供了以其它各种 MVC 框架或视图技术的集成。
    通过 Spring 的核心容器及 AOP 的应用,Spring 提供了统一的声明式系统级
    服务支持。
    7、白盒测试一般所以的工具是什么?
    Junit
  • 16 -
    8、什么是 Ioc 和 AOP?
    控制反转、面向切面编程
    六、XML 方面
    1、解析 xml 的四种解析器?区别是什么?
    DOM 是基于平台、语言无关的官方 W3C 标准。基于树的层次,其优点是可
    以移植,编程容易,开发人员只需要调用建树的指令。其缺点是加载大文件不理
    想。
    SAX 是基于事件模型的,它在解析 XML 文档的时候可以触发一系列的事
    件,当发现给定的 tag 的时候,它可以激活一个回调方法,告诉该方法制定的
    标签已经找到。类似与流媒体的解析方式,所以在加载大文件时效果不错。
    JDOM 是想成为 Java 特定文档模型。它简化与 XML 的交互并且比使用
    DOM 实现更快。使用的是具体类不使用接口,运用了大量的 Collections 类,
    方便程序员。
    DOM4J 是一个独立的开发结果。是一个非常非常优秀的 Java XML API,
    具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的
    软件。推荐使用。
    2、XML 文档定义有几种形式?它们之间有何本质区别?
    两种形式 dtd,schema
    本质区别:schema 本身是 xml 的,可以被 XML 解析器解析(这也是从 DTD 上发
    展 schema 的
    根本目的)
    七、网络基础方面
    1、网络的 7 层协议是?
    第一层 是物理层
    第二层 是数据链路层
  • 17 -
    第三层 是网络层
    第四层 是运输层
    第五层 是会话层
    第六层 是表示层
    第七层 是应用层
    第一层,物理层
    OSI 模型最低层的“劳苦大众”。它透明地传输比特流,就是传输的信号。该层
    上的设备包括集线器、发送器、接收器、电缆、连接器和中继器。
    第二层,数据链路层
    这一层是和包结构和字段打交道的和事佬。一方面接收来自网络层(第三层)的
    数据帧并为物理层封装这些帧;另一方面数据链路层把来自物理层的原始数据比
    特封装到网络层的帧中。起着重要的中介作用。
    数据链路层由 IEEE802 规划改进为包含两个子层:介质访问控制(MAC)和逻
    辑链路控制(LLC)。
    第三层,网络层
    这一层干的事就比较多了。它工作对象,概括的说就是:电路、数据包和信息交
    换。
    网络层确定把数据包传送到其目的地的路径。就是把逻辑网络地址转换为物理地
    址。如果数据包太大不能通过路径中的一条链路送到目的地,那么网络层的任务
    就是把这些包分成较小的包。
    这些光荣的任务就派给了路由器、网桥路由器和网关。
    第四层,传输层。
    确保按顺序无错的发送数据包。传输层把来自会话层的大量消息分成易于管理的
    包以便向网络发送。
    第五层,会话层。
    在分开的计算机上的两种应用程序之间建立一种虚拟链接,这种虚拟链接称为会
    话(session)。会话层通过在数据流中设置检查点而保持应用程序之间的同步。
    允许应用程序进行通信的名称识别和安全性的工作就由会话层完成。
    第五层,会话层。
    在分开的计算机上的两种应用程序之间建立一种虚拟链接,这种虚拟链接称为会
    话(session)。会话层通过在数据流中设置检查点而保持应用程序之间的同步。
    允许应用程序进行通信的名称识别和安全性的工作就由会话层完成。
    第六层,表示层。
    定义由应用程序用来交换数据的格式。在这种意义上,表示层也称为转换器
    (translator)。该层负责协议转换、数据编码和数据压缩。转发程序在该层
    进行服务操作。
    第七层,应用层,该层是 OSI 模型的最高层。应用层向应用进程展示所有的网
  • 18 -
    络服务。当一个应用进程访问网络时,通过该层执行所有的动作。

2、电子邮件传输协议是?
SMTP
3、文件传输是基于哪种协议的?
TCP
4、一个 C 类网络最多能容纳多少台主机?
254
八、算法方面
1、插入排序:
package org.rut.util.algorithm.support;
import org.rut.util.algorithm.SortUtil;
public class InsertSort implements SortUtil.Sort{
/* (non-Javadoc)

  • @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
    / public void sort(int[] data) {
    int temp;
    for(int i=1;i<data.length;i++){
    for(int j=i;(j>0)&&(data[j]<data[j-1]);j–){
    SortUtil.swap(data,j,j-1);
    }
    }
    }
    }
    2、冒泡排序:
    package org.rut.util.algorithm.support;
    import org.rut.util.algorithm.SortUtil;
    public class BubbleSort implements SortUtil.Sort{
    /
    (non-Javadoc)

  • @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
    */ public void sort(int[] data) {

  • 19 -
    int temp;
    for(int i=0;i<data.length;i++){
    for(int j=data.length-1;j>i;j–){
    if(data[j]<data[j-1]){
    SortUtil.swap(data,j,j-1);
    }
    }
    }
    }
    }
    3、选择排序:
    package org.rut.util.algorithm.support;
    import org.rut.util.algorithm.SortUtil;
    public class SelectionSort implements SortUtil.Sort {
    /*

  • (non-Javadoc)

    • @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
      */ public void sort(int[] data) {
      int temp;
      for (int i = 0; i < data.length; i++) {
      int lowIndex = i;
      for (int j = data.length - 1; j > i; j–) {
      if (data[j] < data[lowIndex]) {
      lowIndex = j;
      }
      }
      SortUtil.swap(data,i,lowIndex);
      }
      }
      }
      4、Shell 排序:
      package org.rut.util.algorithm.support;
      import org.rut.util.algorithm.SortUtil;
      public class ShellSort implements SortUtil.Sort{
  • 20 -
    /* (non-Javadoc)

  • @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
    / public void sort(int[] data) {
    for(int i=data.length/2;i>2;i/=2){
    for(int j=0;j<i;j++){
    insertSort(data,j,i);
    }
    }
    insertSort(data,0,1);
    }
    /
    *

  • @param data

  • @param j

  • @param i
    / private void insertSort(int[] data, int start, int inc)
    {
    int temp;
    for(int i=start+inc;i<data.length;i+=inc){
    for(int j=i;(j>=inc)&&(data[j]<data[j-inc]);j-=inc){
    SortUtil.swap(data,j,j-inc);
    }
    }
    }
    }
    5、快速排序:
    package org.rut.util.algorithm.support;
    import org.rut.util.algorithm.SortUtil;
    public class QuickSort implements SortUtil.Sort{
    /
    (non-Javadoc)

  • @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
    */ public void sort(int[] data) {
    quickSort(data,0,data.length-1);
    }
    private void quickSort(int[] data,int i,int j){
    int pivotIndex=(i+j)/2;
    //swap
    SortUtil.swap(data,pivotIndex,j);
    int k=partition(data,i-1,j,data[j]);
    SortUtil.swap(data,k,j);

  • 21 -
    if((k-i)>1) quickSort(data,i,k-1);
    if((j-k)>1) quickSort(data,k+1,j);
    }
    /**

  • @param data

  • @param i

  • @param j

  • @return
    / private int partition(int[] data, int l, int r,int pivot)
    {
    do{
    while(data[++l]<pivot);
    while((r!=0)&&data[–r]>pivot);
    SortUtil.swap(data,l,r);
    }
    while(l<r);
    SortUtil.swap(data,l,r);
    return l;
    }
    }
    6、改进后的快速排序:
    package org.rut.util.algorithm.support;
    import org.rut.util.algorithm.SortUtil;
    public class ImprovedQuickSort implements SortUtil.Sort {
    private static int MAX_STACK_SIZE=4096;
    private static int THRESHOLD=10;
    /
    (non-Javadoc)

  • @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
    */ public void sort(int[] data) {
    int[] stack=new int[MAX_STACK_SIZE];
    int top=-1;
    int pivot;
    int pivotIndex,l,r;
    stack[++top]=0;
    stack[++top]=data.length-1;
    while(top>0){
    int j=stack[top–];

  • 22 -
    int i=stack[top–];
    pivotIndex=(i+j)/2;
    pivot=data[pivotIndex];
    SortUtil.swap(data,pivotIndex,j);
    //partition
    l=i-1;
    r=j;
    do{
    while(data[++l]<pivot);
    while((r!=0)&&(data[–r]>pivot));
    SortUtil.swap(data,l,r);
    }
    while(l<r);
    SortUtil.swap(data,l,r);
    SortUtil.swap(data,l,j);
    if((l-i)>THRESHOLD){
    stack[++top]=i;
    stack[++top]=l-1;
    }
    if((j-l)>THRESHOLD){
    stack[++top]=l+1;
    stack[++top]=j;
    }
    }
    //new InsertSort().sort(data);
    insertSort(data);
    }
    /**

  • @param data
    */ private void insertSort(int[] data) {
    int temp;
    for(int i=1;i<data.length;i++){
    for(int j=i;(j>0)&&(data[j]<data[j-1]);j–){
    SortUtil.swap(data,j,j-1);
    }
    }
    }
    }

  • 23 -
    7、归并排序:
    package org.rut.util.algorithm.support;
    import org.rut.util.algorithm.SortUtil;
    public class MergeSort implements SortUtil.Sort{
    /* (non-Javadoc)

  • @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
    */ public void sort(int[] data) {
    int[] temp=new int[data.length];
    mergeSort(data,temp,0,data.length-1);
    }
    private void mergeSort(int[] data,int[] temp,int l,int r){
    int mid=(l+r)/2;
    if(lr) return ;
    mergeSort(data,temp,l,mid);
    mergeSort(data,temp,mid+1,r);
    for(int i=l;i<=r;i++){
    temp=data;
    }
    int i1=l;
    int i2=mid+1;
    for(int cur=l;cur<=r;cur++){
    if(i1mid+1)
    data[cur]=temp[i2++];
    else if(i2>r)
    data[cur]=temp[i1++];
    else if(temp[i1]<temp[i2])
    data[cur]=temp[i1++];
    else
    data[cur]=temp[i2++];
    }
    }
    }
    8、改进后的归并排序:
    package org.rut.util.algorithm.support;
    import org.rut.util.algorithm.SortUtil;

  • 24 -
    东软信息学院创业实训中心
    public class ImprovedMergeSort implements SortUtil.Sort {
    private static final int THRESHOLD = 10;
    /*

  • (non-Javadoc)

    • @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
      ES6
  • 列举常用的ES6特性:

  • 箭头函数需要注意哪些地方?

  • let、const、var

  • 拓展:var方式定义的变量有什么样的bug?

  • Set数据结构

  • 拓展:数组去重的方法

  • 箭头函数this的指向。

  • 手写ES6 class继承。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

微信小程序

  • 简单描述一下微信小程序的相关文件类型?

  • 你是怎么封装微信小程序的数据请求?

  • 有哪些参数传值的方法?

  • 你使用过哪些方法,来提高微信小程序的应用速度?

  • 小程序和原生App哪个好?

  • 简述微信小程序原理?

  • 分析微信小程序的优劣势

  • 怎么解决小程序的异步请求问题?

其他知识点面试

  • webpack的原理

  • webpack的loader和plugin的区别?

  • 怎么使用webpack对项目进行优化?

  • 防抖、节流

  • 浏览器的缓存机制

  • 描述一下二叉树, 并说明二叉树的几种遍历方式?

  • 项目类问题

  • 笔试编程题:

最后

技术栈比较搭,基本用过的东西都是一模一样的。快手终面喜欢问智力题,校招也是终面问智力题,大家要准备一下一些经典智力题。如果排列组合、概率论这些基础忘了,建议回去补一下。

些方法,来提高微信小程序的应用速度?

  • 小程序和原生App哪个好?

  • 简述微信小程序原理?

  • 分析微信小程序的优劣势

  • 怎么解决小程序的异步请求问题?

其他知识点面试

  • webpack的原理

  • webpack的loader和plugin的区别?

  • 怎么使用webpack对项目进行优化?

  • 防抖、节流

  • 浏览器的缓存机制

  • 描述一下二叉树, 并说明二叉树的几种遍历方式?

  • 项目类问题

  • 笔试编程题:

最后

技术栈比较搭,基本用过的东西都是一模一样的。快手终面喜欢问智力题,校招也是终面问智力题,大家要准备一下一些经典智力题。如果排列组合、概率论这些基础忘了,建议回去补一下。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Web开发中,服务重定向是常见的需求之一。Java提供了两种常用的服务重定向方式:forward()方法和sendRedirect()方法。它们都可以将请求重定向到不同的资源,但是它们之间有一些区别。 1. forward()方法 forward()方法可以将请求转发到另一个资源,例如JSP页面、Servlet或者HTML文件等。在转发请求时,浏览器并不知道正在进行的重定向过程,因为所有的重定向都是在服务器端进行的。要使用forward()方法,可以使用以下代码: ```java RequestDispatcher rd = request.getRequestDispatcher("/somePage.jsp"); rd.forward(request, response); ``` 在这个例子中,我们将请求转发到名为“somePage.jsp”的JSP页面,这个页面会显示在浏览器中。需要注意的是,forward()方法只能将请求转发到同一个Web应用程序中的资源。 2. sendRedirect()方法 sendRedirect()方法可以将请求重定向到另一个URL,例如其他Web应用程序或者外部网站。在重定向请求时,浏览器会收到一个新的URL,并将请求发送到这个URL。要使用sendRedirect()方法,可以使用以下代码: ```java response.sendRedirect("http://www.example.com"); ``` 在这个例子中,我们将请求重定向到名为“http://www.example.com”的URL。需要注意的是,sendRedirect()方法可以将请求重定向到同一个Web应用程序中的资源,也可以将请求重定向到其他Web应用程序或者外部网站。 3. 区别 使用forward()方法转发请求时,浏览器并不知道正在进行的重定向过程,因为所有的重定向都是在服务器端进行的。而使用sendRedirect()方法重定向请求时,浏览器会收到一个新的URL,并将请求发送到这个URL。因此,使用forward()方法可以保持URL不变,而使用sendRedirect()方法则会改变URL。 另外,使用forward()方法转发请求时,可以将请求转发到同一个Web应用程序中的资源,而使用sendRedirect()方法重定向请求时,可以将请求重定向到其他Web应用程序或者外部网站。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值