一.概述
Servlet 是Server Applet的简称,意思是为用Java编写的服务器端的程序。它运行在Web服务器当中,web服务器负责Servlet 和客户的通信以及调用Servlet方法。
Servlet的作用:
1.接受用户发送的请求数据
2.调用其他的java程序来处理请求
3.根据处理结果,将结果相应给客户端
二.Servlet的创建和使用
在每一个前端的请求事件中,凡是需要给后端发送请求的,都需要在后端程序中有一个类与之对应响应。
1.创建一个类继承 javax.servlet.http 包下的HttpServlet
2.每个Servlet程序需要被执行都必须在web.xml文件中进行配置
3.通过浏览器访问 http:localhost:8080/项目名/配置的url 运行Servlet程序
eg:下面我们来创建一个Servlet程序(Servlet程序命名规则一般都以servlet结尾):
创建完Servlet类时需要在web.xml文件中去配置servlet程序:
对于Servlet程序:
这个Servlet类中继承了HttpServlet的四个方法,其实也就是对应着Servlet的生命周期,我们先来学习一下这四个方法的用法及意义。
1.无参构造方法:默认是存在的的,用来初始化创建的对象,只能被调用一次(始终都是只创建了一个对象),在第一次访问Servlet程序时由服务器创建执行(Java只是提供了类库,具体实现还是通过各种服务器自己执行,此思想和JDBC中的思想如出一辙)。
2.innit()方法:也是初始化操作,在构造方法执行完成后,立即被调用执行,完成一些对Servlet程序的初始化,也只执行一次。
3.service()方法:用来接收前端请求,为前端提供服务,每次前端发送的请求都会调用service()方法,所以service()方法是可以被多次调用的,发一次请求就会调用一次。其中也有两个属性,HttpServletRequest req 和 HttpServletResponse resp,一个用来发送请求,一个用来响应。
4.destory()方法:销毁操作,指关闭服务器时自动执行,一般是有需要重写。
Servlet生命周期:
1.创建:第一次访问servlet程序时,由服务器创建。
2.初始化:在构造方法执行后,调用innit()执行初始化操作。
3.服务:每次请求调用service()方法。
4.销毁:服务器关闭时,会销毁servlet对象并且在销毁对象时,会自动调用destory()方法,执行一些最终操作。
三.http请求
从前端向后端发送的请求都是http请求。
1.内容
一次http请求包括:请求行,请求头,请求体三部分。
请求行:请求的方式,请求的资源地址等。
请求头:包括主机地址,请求内容编码,客户端环境信息(都是由浏览器自动发送,以键值对形式传递)
请求体:以表单post的形式像后端发送的请求数据。
2.http请求可分为get请求和post请求。
get请求:get请求主要从前端获取信息的,例如网页上的超链接,向后端传递少量信息,请求数据在请求地址中直接拼接,所以传输数据量有限,并且若存在敏感信息就会不安全。
post请求:post请求主要用于向后端发送大量数据,请求数据在请求体中,可以传输大量数据,可以传输大量数据,不会再地址中显示,相对安全。
3.在后端中实现交互
在serve()方法中可以通过请求变量来调用方法去得到从前端请求回来的数据。
并将返回过来的数据打印在控制台中:
后端响应:
java
//响应
resp.setHeader("content-type","text/html;charset=utf-8");//设置响应的编码格式,因为无法显示中文
//或 resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();//获得流
writer.write("<h2>登陆成功</h2>");
4.servlet生命周期补充
在父类中,生命周期中的四个方法都是存在的,也就是说在servlet程序中可以不需要去重写生命周期的四个方法,直接去调用父类的方法就可以了。
在service()方法中:
由上图底层service()方法中,如果请求方式为get时,就会跳转doGet()方法;如果请求方式是post时,就会跳转doPost()方法,所以在servlet程序中,一般我们就只去重写doGet()和doPost()方法就可以了。
注意:post请求中doPost()方法不能接收中文,接受到后端为乱码,所以需要设置解码格式:
需要在doPost()方法中设置解码格式: