java web 中servlet原理以及创建方法详解内含众多知识点
来源:互联网 发布:金融行业数据分析报告 编辑:程序博客网 时间:2024/06/03 17:31
servlet原理
1.什么是servlet?
servlet是用java编写的服务器端程序,采用请求——响应模式提供web服务,是运行在服务器端,
2.servlet与JSP有什么关系?
JSP在运行时首先会编译一个servlet,因此,servlet是JSP的基础,
3.前台页面的创建【form表单的编写】:
3.1 form表单的编写方法有doget和dopost方法
两者的区别在于
Servlet的doGet/doPost 是在 javax.servlet.http.HttpServlet 中实现的
doGet:处理GET请求
doPost:处理POST请求
当发出客户端请求的时候,调用service 方法并传递一个请求和响应对象。Servlet首先判断该请求是GET 操作还是POST 操作。然后它调用下面的一个方法:doGet 或 doPost。如果请求是GET就调用doGet方法,如果请求是POST就调用doPost方法。doGet和doPost都接受请求(HttpServletRequest)和响应(HttpServletResponse)。
get只有一个流,参数附加在url后,地址行显示要传送的信息,大小个数有严格限制且只能是字符串,大小限制在1024KB。post的参数是通过另外的流传递的, 不通过url,所以可以很大,也可以传递二进制数据,如文件的上传。
get通过URL提交的参数会显示在地址栏中,这在系统的安全方面可能带来问题;post提交的参数不会显示在地址栏中。这样post就可以提高get的安全性能,避免数据的泄露。
当form框里面的method为get时,执行doGet方法,使用get提交就必须在服务器端用doGet()方法接收;当form框里面的method为post时,执行doPost方法,使用post提交就必须在服务器端用doPost()方法接收。
在request请求里面,编码转换;get方法得到的内容每一个都要进行编码转换,而post方法则只要设置request.setCharacterEncoding("UTF-8")就可以,不要再从request得到的每个数据进行编码转换了。
4.servlet的生命周期?
1)加载和实例化
加载和实例化servlet是由servlet容器实现的,加载servlet之后,容器会通过java的反射机制来创建servlet的实例。
2)初始化
在servlet的实例创建后,容器会调用servlet的init()方法来初始化该servlet对象。初始化的目的是让servlet对象在处理客户端请求前先完成一些初始化工作。对于每个servlet实例,只会调用一次init()方法。
3)服务/执行
当客户端请求到来后,servlet容器首先针对该请求创建servletRequest和servletResponse两个对象,然后servlet容器会自动调用servlet的service()方法来响应客户端的请求,同时把servletRequest和servletResponse两个对象传给service()方法,通过servletRequest对象,servlet实例可以获得客户端的请求信息,处理完请求后则将响应信息放在servletResponse对象中,最后销毁servletResponse和servletResponse对象。
注意:在service()方法调用前,init()方法必须已经成功执行。
4)销毁
当servlet实例需要从服务中移除时,容器会调用destory()方法,让该实例释放掉它所使用的资源,并将实例中的数据保存到持久的存储设备中,之后,servlet实例便会被java的垃圾回收器所回收。
在servlet的整个生命周期中,其初始化和销毁都只发生一次,service()方法的执行次数取决于servlet被客户端所访问的次数。
构造方法:
init():
该方法在javax.servlet.Servlet接口中定义。创建servlet实例时会调用init()方法,在init()方法中完成类似于构造方法的初始化功能,其参数为servletConfig的实例。init()方法结束后,servlet就可以接受客户端请求。
在servlet的整个生命周期中,只执行一次init()方法。
service():
该方法用来响应客户端发出的请求,service()方法使用servletResquest接口和servletResponset接口的对象作为参数,其中,servletRequest对象用来处理请求,servletResponse对象用来发送响应。
service()方法执行时会检查HTTP请求的类型,并相应地调用doGet()、doPost()等方法,因此通常的做法是,不使用service()方法直接使用doGet()和doPost()等方法来处理请求。
service()方法的语法形式如下:
public void service (servletRequest request,ServletResponse response)throws ServletException ,IOEception
其中,resquest是ServletRequest接口的对象,它作为参数来接收和存储客户端请求,response是ServletResponse接口的对象,它包含了servlet做出的响应。
doGet()/doPost():
destroy():
当不再需要servlet实例或重新装入时,destory()方法被调用。使用destory()方法可以释放掉所有在init()方法中申请的资源,一个servlet实例一旦终止,就不允许再次被调用。只能等待被卸载。
destory()方法通常用来执行一些清理任务,在destory()方法中一般安排释放资源的代码。
原理:从Servlet的第一次请求开始(因为这时Servlet对象还没有创建),先执行new的操作(构造方法),再调用init()进行初始化。接着等待请求的到来,一旦有请求到来,service()方法被调用,根据请求类型决定调用doGet()/doPost()。只要有请求到来就会重复service()-->doGet()/doPost()这一过程。当服务器重启或者关闭时,destroy()方法被调用,进行销毁Servlet对象工作
注意:修改了Servlet文件中的代码后要重启Tomcat。
5.数据的传递方式:
<servlet>
<servlet-name>name</servlet-name>
<servlet-class>classname</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>name</servlet-name>
<url-path>/xxxx</url-path>
</servlet-mapping>
7.页面跳转有那几种方式?
内部跳转和外部跳转
对于内部跳转,地址栏没有变化,对于外部跳转,地址栏有变化
请求转发(内部跳转)与重定向(外部跳转)
请求转发:由服务器内部将请求转发给另一个Servlet/JSP资源,由其他资源去处理。在整个过程中,客户端(浏览器)没有意识到请求已转向,请求对象和响应对象都只有一个,浏览器的地址栏没有变化
页面重定向:由服务器向客户端发出一个特殊的响应,指导客户端重新向另一个资源发出新的请求。在这一过程中,客户端是清楚重定向的目标地址的,请求对象和响应对象是重新创建的,地址栏有变化
8.重定向和转发
请求转发,又称内部跳转,用ResquestDispatcher对象的forward()方法。
请求重定向,又称外部跳转,用Response对象的sendRedirect()方法。
通常接收到一个请求并处理后会让客户端访问一个指定的页面,这个过程可以通过两种方式来完成。
建立一个登陆页面如果用户名密码正确则返回登陆成功页面,否则返回登陆失败页面
方式一:
方式二:
请求转发器:通过request对象的getRequestDispatcher(“demo.html”);获取请求转发器对象RequestDispatcher,使用该对象的forward()方法进行转发。
原理是客户端向服务端发一次登陆请求,服务端对其进行处理后,通过应答对象告诉客户端要去的目的,那么客户端就再一次向服务器发一个请求,请求目的页面。
请求完的结果:
在地址栏中显示最后一次服务端返回的请求地址。该地址可以是应用程序内部的资源,也可以是任意一个网络资源。 比如:可以定一个绝对地址百度。也就是地址栏发生变化。
因为是多次请求,所以每一次的请求和应答对象都不同。
请求转发与页面重定向的区别:
1、 请求转发只能将请求转发给同一个WEB应用程序中的其他资源,而重定向不仅可以重定向到同一个WEB应用程序中的其他资源,还可以重定向到其他的应用程序的资源。
2、 请求转发浏览器的URL不会改变,而重定向浏览器的URL会改变
3、 请求转发在页面跳转时使用的是相同的request和response,而重定向在页面跳转时是不同的request和response
4、 请求转发在页面跳转时一共只有1次请求和1次响应,而重定向在页面跳转时一共有2次请求和2次响应
9.解决乱码问题的方法?
解决乱码问题中,设置请求内容的字符编码?
request.setCharacterEncoding(“utf-8”);
解决乱码问题中,设置输出内容及字符编码
response.setContentType(“text/html;charset=utf-8”);
关键代码:
request.setCharacterEncoding(“utf-8”);
response.setContentType(“text/html;charset=utf-8”)或者response.setCharacterEncoding(“utf-8”);
- java web 中servlet原理以及创建方法详解内含众多知识点
- JAVA WEB SERVLET 基础知识点
- 传智播客Java web之 Servlet工作原理以及日志处理
- Web工程中创建Servlet常见的问题以及解决方法
- Maven详解(七)------ 创建Web工程以及插件原理
- java Web.xml中servlet配置方法
- 【JavaWeb-5】Servlet的原理、周期、创建方法、转发、ServletConfig以及重要的ServletContext
- Servlet第一章知识点总结——Web工作原理
- Java Web -- Servlet(4) 开发Servlet的三种方法、配置Servlet详解、Servlet的生命周期(1)
- Java Web -- Servlet(5) 开发Servlet的三种方法、配置Servlet详解、Servlet的生命周期(2)
- 传智播客Java web学习,jsp的运行原理以及它和Servlet的区别
- java web中servlet笔记
- Servlet的生命周期及其常用覆盖方法的说明 以及在web.xml中配置servlet的属性说明
- Java反射基础知识点总结(内含六部博文实例)
- servlet中web.xml配置详解
- servlet中web.xml配置详解
- servlet中web.xml配置详解
- 【转】servlet中web.xml配置详解
- H2数据类型
- Python中的装饰器(decorator)
- EL表达式与JSTL标签库
- python爬虫scrapy框架基础知识
- Linux中的In命令
- java web 中servlet原理以及创建方法详解内含众多知识点
- 巧用CAS解决数据一致性问题
- 利用Python数据可视化工具plotly从数据库读取数据制作本地图表应用实例
- 多角度分析,休闲食品即将成为第四餐?
- 【Shell】linux shell将字符串分割成数组
- Spring Cloud Eureka REST 接口
- Kafka设计解析(二)- Kafka High Availability (上)
- dubbo 笔记
- 百度咋做长文本去重(一分钟系列)