最近看到几道关于JavaWeb的题目,我通过结合自己前面的学习和翻阅资料整合了以下几个内容方便大家了解熟悉,如有错误希望大家能够多多指正。
1、自定义Servlet的三种方式及其区别?
1.1 实现Servlet接口
实现Servlet接口需要实现接口中的方法(不要问,问就是java之父对我们接口有意见)。其基本的方法如下代码块展示:
//Servlet的生命周期:从Servlet被创建到Servlet被销毁的过程
//宗旨:一次创建,到处服务
//一个Servlet只会有一个对象,以服务所有的请求
/*
* 1.实例化(使用构造方法创建对象)
* 2.初始化 执行init方法
* 3.服务 执行service方法
* 4.销毁 执行destroy方法
*/
1.2 继承类
创建servlet
的第二种方法在于继承GenericServlet
类。它实现Servlet
接口除了service
方法。当然这种方法很少使用便是。
public class ServletDemo2 extends GenericServlet {
@Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
System.out.println("heihei");
}
}
1.3 继承HttpServlet
继承HttpServlet
类时,要重写doGet
或者doPost
方法。
public class ServletDemo3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("hello");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("en");
doGet(req,resp);
}
}
总结:
- 很明显,实现接口
Servlet
时需要重写其生命周期全部的方法,非常繁琐。 - 继承
GenericServlet
创建Servlet
,只需要重写service()
方法即可,大大减少了创建Servlet
的工作量。 HttpServlet
是GenericServlet
的子类,它在GenericServlet
的基础上专门针对HTPP
协议进行了处理。所以后者对于我们进行HTTP
协议时,就需要手动封装HTTP
请求信息和响应信息。前者通过对应的doGet
和doPost
方法,能够专门处理HTTP协议请求,省去客户—服务器端之间因为协议而额外需要手动配置的问题。
2、写出Servlet的三大作用域,并分别说明各自的特点。
首先,作用域规定变量的有效期限,其用处在于共享数据。
2.1 request
它表示的是一个请求,只要发出一起请求就会创建一个request
。其变量有效范围为当前的请求周期。
**请求周期:**就是指从http请求发起,到服务器处理结束,返回响应的整个过程。
2.2 session
服务器会对每一个回话创建一个session对象,所有session中的数据可以为当前会话提供所有servlet
共享。
**当前会话:**就是指用户从浏览器开始到浏览器关闭的过程,这其中会包括很多的响应情况如刷新,发送数据等等。那么换句话说,如果浏览器一直不关闭,实际上服务器就知道这些请求由一个客户端发起而来。
2.3 Application
如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用。
整个应用:从应用启动,到应用关闭结束。当然一个服务器有可能会部署两个或者多个,当你关闭服务器时,以上所有应用全部关闭。所以事实上,你可以很生动的认为如果服务器另一边的企业没有倒闭,那么实际上application里的变量就会一直被所有用户所使用共享
对象名称 | 对象类型 |
---|---|
request | HttpServletRequest |
session | HttpSession |
application | ServletContext |
3、filter 和 servlet 在生命周期上的区别
filter
顾名思义就是过滤,过滤器的意思。它是一段可复用的代码。我们在客户端请求到达servlet之前,通过拦截Httpservlet
对其进行处理;也可以在HttpServletResponse
返回给客户端之前,对其再次进行处理。
Servlet
是一种运行在服务端的Java程序,可以用来收集来自用户表单的数据输入,并将来自数据库或者其他来源的数据呈现给客户端,还可以动态的生成网页。
filter生命周期各个方法执行调用顺序原理如下:
而servlet的调用方法可以参考我前面写的博客:Servlet学习Notebook
- 在客户端首次发送第一个请求时,首先由容器解析请求。根据请求中找到对应的Servlet。首先判断该类的对象是否存在,如果存在则调取初始化方法。在Object中调用Service()方法,由Service()判断客户端的请求方式。处理方式完成后,作出相应的结果返回给客户端,单词请求处理完毕。
- 再次请求时,同样判断其对象是否存在,但是不再调用init()方法,而是直接调取Service()方法。
- 当服务器关闭时,调取destroy()方法进行销毁。
4、表单提交的方式及区别
表单提交方式有GET/POST请求
其中有以下区别:
- 数据类型
GET请求的数据会附加在URL后面,以?
分割URL和传输的数据。多个参数要用&
拼接,URL编码格式多为ASCll码。而POST请求会把请求的数据放置在HTTP请求包的包体中进行传输。
通过上面的解释,如果对于GET请求时,实际开发上传输的数据就要受到URL长度的限制。
- 传输数据
GET传输的数据不超过2KB,POST传输的数据较大,一般不受限制
- 安全性
由于数据类型的差异,GET请求的数据会暴露在地址栏中,而POST不会。
所以综上所述: get安全性非常低,post安全性较高。
5.jsp 有哪些内置对象? 作用分别是什么
具体的博客内容请访问我的博客:JSP—NoteBook。
JSP中⼀共预先定义了9个对象,分别为:request
、response
、session
、application
、out
、 pagecontext
、config
、page
、exception
,具体的情况可以根据后面的博客翻阅即可。
总结
以上就是今天对Java Web部分内容的回顾复习,大家有需要的地方可以多多关注我的博客,谢谢大家!