java面试之Jsp(面试必看)

java面试之Jsp

  • 1.HTTP和HTTPS之间的区别?
  • 2.如何修改Tomcat中访问端口?
  • 3.JSP的执行过程?生成的.java文件和.class文件在tomcat中那个目录下面?
  • 4.对Java中序列化和反序列化的理解?
  • 5.常用的JSP内置对象有哪些?
  • 6.Get和Post请求的区别?
  • 7.转发和重定向的区别?
  • 8.如何通过JSP的内置对象Request获取Form中的数据?
  • 9.如何通过JSP的内置对象Session实现访问控制?
  • 10.JSP四大作用域?与之关联的内置对象是什么?
  • 11.Session和Cookie的区别?
  • 12.文件上传总结?(非面)
  • 13.Servlet和JSP之间的区别?
  • 14.Servlet生命周期?
  • 15.Servlet的开发步骤是什么?
  • 16.JSTL和EL如何使用(区别)?
  • 17.JSTL常用的标签有哪些?
  • 18.EL表达式如何使用?
  • 19.页面间对象传递的方法?
  • 20.你对MVC设计模式的理解?
  • 21.你对Filter过滤器的理解?
  • 22.你对Ajax的理解?
  • 23.在JQuery中如何进行表单序列化?
  • 24.JSON和XML的区别?
  • 25.前后端开发套路?(非面)
  • 26.如何上传文件?

1.HTTP和HTTPS之间的区别?

①、https协议需要到ca申请证书,一般免费证书很少,需要交费。
②、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
③、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
④、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

2.如何修改Tomcat中访问端口?

apache-tomcat\conf\server.xml中修改Connector标签的port属性

3.JSP的执行过程?生成的.java文件和.class文件在tomcat中那个目录下面?

Web容器处理Jsp文件请求需要经过3个阶段。
①翻译阶段
②编译阶段
③执行阶段
java面试之Jsp(面试必看)_第1张图片

4.对Java中序列化和反序列化的理解?

定义
对象序列化是一个用于将内存中对象转换为字节流的过程,可以将其保存到磁盘文件中或通过网络发送到任何其他程序;
②从字节流创建对象的相反的过程称为反序列化

序列化成功的条件
①该类必须实现java.io.Serializable 接口
②类的所有字段都必须是可序列化的(属性类型是实现类java.io.Serializable 接口的)

对象的序列化主要有两种用途
① 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
② 在网络上传送对象的字节序列。

应用场景:
① 在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些seesion先序列化到硬盘中,等要用了,再把保存在硬盘中的对象还原到内存中。
② 当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。

样例代码

public class Person implements Serializable {
    /**
	 * 编译器生成
	 */
	private static final long serialVersionUID = 4603642343377807741L;
	private int age;
    private String name;
    private String sex;
    public int getAge() {
        return age;
    }
    public String getName() {
        return name;
    }
    public String getSex() {
        return sex;
    }
       public void setAge(int age) {
        this.age = age;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
}
public class TestObjSerializeAndDeserialize {
    public static void main(String[] args) throws Exception {
        SerializePerson();//序列化Person对象
        Person p = DeserializePerson();//反序列Perons对象
        System.out.println(MessageFormat.format("name={0},age={1},sex={2}",
                        p.getName(), p.getAge(), p.getSex()));
    }
    /**
     * MethodName: SerializePerson 
     * Description: 序列化Person对象
     */
    private static void SerializePerson() throws FileNotFoundException,
            IOException {
        Person person = new Person();
        person.setName("gacl");
        person.setAge(25);
        person.setSex("男");
        // ObjectOutputStream 对象输出流,将Person对象存储到E盘的Person.txt文件中,完成对Person对象的序列化操作
        ObjectOutputStream oo = new ObjectOutputStream(new FileOutputStream(
                new File("E:/Person.txt")));
        oo.writeObject(person);
        System.out.println("Person对象序列化成功!");
        oo.close();
    }
    /**
     * MethodName: DeserializePerson 
     * Description: 反序列Perons对象
     */
    private static Person DeserializePerson() throws Exception, IOException {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
                new File("E:/Person.txt")));
        Person person = (Person) ois.readObject();
        System.out.println("Person对象反序列化成功!");
              return person;
    }
}

5.常用的JSP内置对象有哪些?

Out、request、response、session、application(常用)
共九大内置对象:
①.request对象 客户端请求,此请求包含来自GET/POST的请求参数,通过它才能了解到客户的需求,然后做出响应。
②.response对象 响应客户端的请求的有关信息。
③.session对象 它之客户端与服务起的一次会话,从客户端到服务器的一个WebApplication开始,直到客户端与服务器的链接断开为止。
④.out 对象 它是JspWriter类的实力,是向客户端输出内容常用的对象
⑤.page对象 它指当前JSP页面本身,有点类似this指针,它是java.lang.object类的一个实例
⑥.application对象 它实现用户间的数据共享,可以改变全局变量,它从服务器启动开始直到服务器关闭。
⑦.exception对象 它是一个例外对象当一个页面的运行过程中发生了例外,就产生这个对象。
⑧.pageContext对象 它提供了对JSP页所有对象及名字空间的访问。
⑨.config对象 它是在一个Servlet初始化时,JSP引擎向它传递信息用的。

6.Get和Post请求的区别?

①.GET请求会将参数跟在URL后进行传递,而POST请求则是作为HTTP消息的实体内容发送给Web服务器。
②.GET方式对传输的数据大小有限制,通常不能超过2KB,而POST方式可以传递的数据量比GET方式大得多,理论上没有限制。
③.GET方式请求的数据会被浏览器缓存起来,因此其他人可以从浏览器的历史记录中读取到这些数据,例如账号和密码等。

7.转发和重定向的区别?

①.转发是在服务器端发挥作用,将同一请求在服务器资源之间进行传递(一次请求),客户端浏览器的地址栏不会显示转向后的地址;
②.重定向是在客户端发挥作用,通过发送一个新的请求实现页面转向(两次请求),在地址栏中可以显示转向后的地址。

转发和重定向的理解
①.二者都是为了实现页面跳转。
②.转发能够保证请求中的数据带到转发后的页面,而重定向则不行。
③.二者在使用时,二选一。
java面试之Jsp(面试必看)_第2张图片
都写的话,会报如下异常信息
java面试之Jsp(面试必看)_第3张图片

8.如何通过JSP的内置对象Request获取Form中的数据?

getParameter( ) 根据表单组件名称获取提交数据
getParameterValues( ) 获取表单组件对应多个值时的请求数据

9.如何通过JSP的内置对象Session实现访问控制?

①.登陆的时候,登陆成功,在Session写入值,再跳转到主页面。Session.setAttribute();
java面试之Jsp(面试必看)_第4张图片
②.其它页面加入访问控制(可以借助include,减少冗余代码,使用过滤器优化,可以不在每个页面写include)。访问控制:Session.getAttribuite();相当于验证是不是走了登录这条路。
java面试之Jsp(面试必看)_第5张图片
③.退出系统时,将Session失效。Session.invalidate();
java面试之Jsp(面试必看)_第6张图片

10.JSP四大作用域?与之关联的内置对象是什么?

Page:只在一个页面保留数据(javax.servlet.jsp.PageContext(抽象类))
Request:只在一个请求中保存数据(javax.servlet.httpServletRequest)
Session:在一次会话中保存数据,仅供单个用户使用(javax.servlet.http.HttpSession)
Application:在整个服务器中保存数据,全部用户共享(javax.servlet.ServletContext)

1)page:就是设置的属性只能在当前页面有效。
通过pageContext的setAttribute()和getAttribute()
2)request:指属性在一次请求范围内有效。
如果页面从给一个页面跳转到另一个页面,那么该属性就失效了。
这里所指的跳转是指客户端跳转,比如客户单击超链接跳转到其他页面或者通过浏览器地址栏浏览其他页面。
如果使用服务器端跳转,则该属性仍然生效。
同理使用request对象的setAttribute()和getAttribute()
3)session:指客户浏览器与服务器一次会话范围内,如果服务器断开连接,那么属性就失效了。
同理通过session对象的setAttribute()和getAttribute()。
session范围的例外比如重新打开一个浏览器。
4)application:指在整个服务器范围,知道服务器停止以后才会失效。
同理通过application对象的setAttribute()和getAttribute()
application范围就是保存的属性只要服务器不重启,就能在任意页面中获取,就算重新打开浏览器也是可以获取属性的。

11.Session和Cookie的区别?

两者区别:
①.Session在服务器端保存用户信息,Cookie在客户端保存用户的信息
②.Session中保存的是Object类型,Cookie保存的是String类型
③.Session随会话的结束而将其存储的数据销毁,Cookie可以长期保存在客户端
④.Session保存重要的信息,Cookie保存不重要的用户信息

Session和Cookie知识点补充
①.Session存储数据的结构是Map,Cookie存储数据的结构是对象数组;
②.Cookie相当于扩展了服务器的内存和硬盘,将非重要的用户信息放到用户的内存和硬盘上面。

12.文件上传总结?(非面)

1、上传前要估算好一个月或一年上传的量。
2、上传前要规划好目录(主要是为了上传文件的备份)。
3、对于数据库表来说,需要有个字段来保存上传文件的路径。
①第1种情况一个字段;
②第2种情况2个字段,一个是文件名称显示的字段和文件路径的字段(路径/时间戳.扩展名)。
4、上传文件要控制一下上传文件类型,避免不合法的文件上传到服务器上,例如:非法用户上传了病毒文件。
5、上传文件可以控制一下文件的大小,已节约服务器的磁盘空间。

13.Servlet和JSP之间的区别?

①.JSP本质上就是一个Servlet,它是Servlet的一种特殊形式,每个JSP页面都是一个servlet实例。
②.JSP是HTML页面中内嵌的Java代码,侧重页面显示;Servlet 是HTML代码和Java代码分离,侧重逻辑控制;
③.MVC设计思想中JSP位于视图层,JSP适合表示层开发;servlet位于控制层,Servlet适合封装控制逻辑。
(Servlet 是由 Java 提供用于开发 web 服务器应用程序的一个组件,运行在服务端,由 servlet 容器管理,用来生成动态内容。一个 servlet 实例是实现了特殊接口 Servlet 的 Java 类,所有自定义的 servlet 均必须实现 Servlet 接口。)

14.Servlet生命周期?

① 实例化:Servlet容器创建Servlet的实例。
② 初始化:该容器调用init(ServletConfig)方法。
③ 服务:如果请求Servlet,则容器调用service()方法。
④ 销毁:销毁实例之前调用destroy()方法。

15.Servlet的开发步骤是什么?

A.创建Servlet,继承HttpServlet,重写doPost()或doGet()方法。
B.部署Servlet,编译Servlet到/WEB-INF/classes目录,配置web.xml文件。

    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>demo.servlet.HelloServlet</servlet-class>
        <init-param>
            <param-name>initParam</param-name>
            <param-value>Hello Servlet</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/HelloServlet</url-pattern>
    </servlet-mapping>

①.Tomcat容器通过反射技术来实例化我们编写的Servlet;在内存中只有一份(注意:慎重在编写的Servlet添加属性,优先考虑局部变量);
②.Tomcat请求过来会开启一个线程处理请求,要注意线程安全的问题。
C.通过服务器访问Servlet。

16.JSTL和EL如何使用(区别)?

①.EL表达式封装了数据访问的功能。
②.JSTL标签库则封装了逻辑控制、循环控制以及数据格式化等功能。
③.二者结合使用,可以减少JSP中嵌入的Java代码,有利于程序的维护和扩展,能完整实现动态页面的开发需求。

17.JSTL常用的标签有哪些?

①.通用标签:set、out、remove
②.条件标签:If、choose
多分支标签往往和角色在一起使用,来确定不同的角色,界面的元素的变化。)
③.迭代标签:forEach

18.EL表达式如何使用?

①.${表达式} 按照page → request → session → application的作用域顺序依次查找找到即返回,最终找不到返回null
②.配合“.”获取对象属性:${user.name}
③.“[]”获取集合元素:${user["name"]}或${user["下标值"]}

19.页面间对象传递的方法?

方式一:表单方式传递
表单传递参数是一种最简单,也是最基本的参数传递方式。
注意:表单元素隐藏按钮的使用
方式二:带参数的URL方式传递
带参数的url写法: url?参数名1=值1&参数名2=值2。
方式三:请求request对象
可以将数据绑定到request对象上,通过request对象getAttribute和setAttribute方法读写
方式四:用户会话Session对象
可以将数据绑定到session对象上,通过session对象getAttribute和setAttribute方法读写
方式五:application对象
可以将数据绑定到application对象上,通过application对象getAttibute方法和setAttribute方法读写
方式六:cookie对象
可以将数据写到到客户端浏览器cookie文件中。

六种方式总结:
.其中方式一,方式二只能实现字符串参数的传递,方式三,四,五,六可以实现对象的传递(方式六需要对象序列化后进行存储)
.方式一,方式二,方式三数据传递只能请求页面获取数据,而方式四,五,六可以在多个不同页面获取数据对象
.方式四和六保存的数据对象都是和某个用户相关的信息,不同的是方式四将数据保存到服务器内存中,方式六将数据保存到客户端内存或硬盘中。
.方式五保存的数据对象都是和所有用户相关的信息,数据也是保存到服务器内存中

20.你对MVC设计模式的理解?

M-V-C(Model-View-Controller)
MVC执行流程:
1.客户端向服务器发送请求
2.服务器把请求分发给Servlet控制器
3.Servlet控制器获取用户输入的数据,并调用JavaBean(Dao、Service)进行处理
4.Servlet根据处理的结果选择一个JSP视图来响应用户
5.JSP视图显示处理的数据(如果存在数据)

扩展总结:

MVC模式的编写套路
1.创建视图:XXX.jsp
2.创建控制器:XXXServlet.java
3.创建模型
service:业务层
dao:数据层

MVC中C的编写套路(非Ajax方式)
1、接收到前端页面的数据进行后端校验;
参考代码:
java面试之Jsp(面试必看)_第7张图片
2、调用M中业务逻辑层(Service)相关方法完成具体功能;
参考代码:
java面试之Jsp(面试必看)_第8张图片
3、将第2步返回的数据放入到request中,进行页面的跳转;
参考代码:
在这里插入图片描述
在这里插入图片描述

21.你对Filter过滤器的理解?

理解
当用户的请求到达指定的URL之前,可以借助Filter来改变这些请求的内容;同样的,当响应结果到达客户端之前,可以使用Filter修改输出的内容。
Filter使用的场景
用在登录验证和解决乱码问题
Filter的工作原理
用户发送请求到过滤器;过滤器将用户请求发送至web资源;web资源将响应发送到过滤器;过滤器将响应返回给用户。

22.你对Ajax的理解?

Ajax:异步刷新技术(提高用户体验,节约带宽)
①.与传统web发送的请求方式不同
传统web浏览器发送同步请求,Ajax技术是异步引擎对象发送请求。
②.与传统web服务器响应不同
传统web响应内容是一个完整的页面,Ajax响应内容只是局部需要的数据。
③.与传统web客户端处理方式不同
传统web需等待服务器响应完成并重新加载整个页面后用户才能进行操作,Ajax可以动态更新页面中的局部内容不影响用户在页面进行其他操作。

23.在JQuery中如何进行表单序列化?

①.第一步:
给form的id属性设置好值。
②.第二步:
使用serialize()方法。
表单序列化原因
①.form中的值比较多,我们需要一个一个取,以map方式发送到服务端,而用表单序列化就可以打包,也是以map方式发送到服务端。
②.如果表单的输入字段过多,会需要多行代码,并且如果增加或者减少表单字段都需要修改,不利于扩展。

24.JSON和XML的区别?

共同点
都用来存储、传递和交换文本信息
不同点:
JSON比XML更小、更快、更容易解析。

客户端解析JSON格式字符串的两种方式
①.Eval()函数——存在安全隐患,要慎用;
②.JSON解析器,即JSON.parse();——推荐使用。

25.前后端开发套路?(非面)

后端开发套路
1、引入第三方Json解析库,例如:
java面试之Jsp(面试必看)_第9张图片
2、后端Control代码返回Json格式的字符串(Ajax方式)
java面试之Jsp(面试必看)_第10张图片
注意:与非Ajax进行对照理解,这里没有转发到某个JSP页面,仅仅发送数据。

前端开发套路
1、调用Ajax请求,编写回调函数,完成数据和页面渲染显示。
java面试之Jsp(面试必看)_第11张图片
前后端调试技巧
1、先在前端用console.log或者之间访问后端请求,确认可以请求到数据,以确定是后端问题还是前端问题。
2、确定好前端或后端问题后,再进行下一步的诊断。
3、如果是后端问题,可以使用Java中调试或输出解决问题。
4、如果是前端问题,可以使用前端的输出来解决问题(console.log).

26.如何上传文件?

上传的步骤:
1.建立上传目录uploadfiles(上传到tomcat->webapp下)
2.导入第三方jar包
3.编写前台页面(增加表单属性,写Servlet)
在表单中增加enctype属性、post方式提交、action;
增加file表单元素;
4.写后台代码,调用第三方组件保存上传文件
5.把路径信息保存到后台数据库
修改
①.把上传的图片用img显示出来,文档借助a标签来显示href存放上传文件路径,a标签内部的HTML内容是文件名,就是文本超链接。

<a href=”XXXXX/上传的目录/文件名”>文件名</a>

②.后台判断是否获取到上传的文件,如果有更新数据库存放的路径信息,否则不更新。
下载
(下载的时候不一定要有上传,有上传的时候一定要有下载)
使用a标签,将要下载的文件路径写入href中

你可能感兴趣的:(java面试之Jsp(面试必看))