1,Servlet
简介:servlet实际上就是运行在服务端的小程序,用来接收用户发送的请求,然后根据用户的请求内容调用其它的java程序来处理请求,最后根据处理结果,借用浏览器的界面返回给用户。
注意:servlet本质上是一段java代码,这段java代码无法独立运行,必须放在Servlet容器中,比如tomcat服务器,由容器调用才可以执行。
2,开发Sevlet程序的步骤
- 创建一个类,实现Servlet接口,并添加未实现的方法。
- 在web.xml文件中配置Servlet对外访问的虚拟路径,再将web应用部署到虚拟主机中。
<servlet>
<servlet-name>别名</servlet-name>
<servlet-class>类名</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>别名</servlet-name>
<url-pattern>servlet的请求地址</url-pattern>
</servlet-mapping>
servlet的继承关系Servlet接口: 通用的接口提供一个servlet应该具有的功能。
| - Generic Servlet类,实现了Servlet接口,并实现了其中大部分的方法,但是service方法没有实现,这个方法需要开发人员自己实现。
|HttpServlet类,继承了GenericServlet,并实现了service方法,在service方法中判断请求方式,根据不同的请求方式xxx调用不同的doxxx
- |XxxServlet类,在开发中,我们只需要写一个类继承HttpServlet,并覆盖doget和doPost方法,来处理GET请求和POST请求即可。
Servlet调用过程:
开发一个Sevrlet,放在web应用中,并将web应用部署在服务器中,启动服务器,通过浏览器访问Servlet,可以访问到Servlet处理的结果,具体过程如下图:
Servlet的生命周期:
- Serlvet在第一次被访问的时候创建Servlet实例(),之后服务器会立即调用init方法对其进行初始化。创建之后Servlet实例会一直驻留在服务器的内存中,为后续的请求提供服务(注意:Servlet是单例模式,也就是说Servlet实例只会创建一次),只要有请求来访问这个Servlet,服务器就会调用service方法来处理请求,直到服务器关闭,或者web应用被移除容器,随之web应用的销毁,Servlet实例也会被跟着销毁,在销毁之前服务器会调用destroy方法进行收尾工作,释放资源。
Servlet的开发细节: - Servle虚拟路径的配置方式可以有两种:
- 1.直接写一个路径
- 如:/SeondServlet
<servlet>
<servlet-name>SeondServlet</servlet-name>
<servlet-class>cn.rute.servlet.SecondServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SeondServlet</servlet-name>
<url-pattern>/SeondServlet</url-pattern>
</servlet-mapping>
后期我们需要通过/SeondServlet这个路径来访问该Servlet,当然你也可以改成/aaa,那么你就需要通过/aaa来访问你的这个Servlet了。- 2.还可以使用星号*匹配符来设置路径:
- 斜杠(/)开头,以斜杠星(/*)结尾
- 如:/* ; /a/*
- 以星点后缀的方式(*.后缀)
- 如.html ; .abc
使用匹配的弊端是一个url导致被多个mapping所匹配。
- 如.html ; .abc
- 匹配符的优先级规则:
- a.哪一个更接近更像更精准哪一个起作用。
b.*.后最的优先级永远是最低
Servlet请求的中文乱码问题
我们发现当用户通过表单向Servlet发送中文请求参数时,Servlet获取到的内容会产生乱码问题,其实乱码的根本原因就是编码格式不一。在这里我将GET请求和POST请求分开处理
- GET请求:
//先获取表单中的数据
String username = request.getParameter("username");
// 将乱码格式的数据再反向转成字节,这里我们需要指定iso-8859-1
byte[] bytes = username.getBytes("iso-8859-1");
//然后把数据重新指定编码格式进行编码
username = new String(bytes , "utf-8");
-如果是POST请求,那么我们可以采用更简单的办法:
//直接告诉浏览器采用什么编码格式(POST提交方式可以告诉浏览器接收格式,GET不可以)
request.setCharacterEncoding("utf-8");//注意这句话需要放在获取数据之前
String username = request.getParameter("username");
//输出数据
....