Servlet调用流程
1.首先访问http://127.0.0.1/login.html 打开一个静态html页面,在这个页面中可以通过form以post的形式替吉奥数据
2./login路径,在上一步骤liogin.html,用form把账号和密码提交到/login这个路径,并且附带method="post"。
3.找到对应的Servlet。 tomcat接受一个新的请求,http://127.0.0.1/login。就到配置文件web.xml中进行匹配,发现/login对应的servlet类是LoginServlet。接下来的工作基于这个loginServlet.
4.实例化Servlet对象 tomcat定位之后,发现并没有loginServlet的实例存在,于是调用其public午餐构造函数LoginServlet(),实例化一个LoginServlet对象以备之后使用。
5.调用doPost或者doGet方法。根据html提交信息时候的method确定使用哪个方法。
6.request获取参数,通过request把页面上传递来的账号密码信息取出来。
7.response 设置响应,根据账号密码是否正确创建不同的html字符串。然后将html字符串通过一下方式,设置在response对象上。
8. tomcat把html传递给浏览器。Servlet完成工作之后,tomcat拿到被Servlet修改锅的response,根据这个response生成html字符串,然后再通过http协议把这个字符串发回给浏览器,l浏览器再根据http协议再去获取这个html字符串,并渲染在界面上,这样在效果上浏览器就可以看到Servlet中生成的字符串了。
doGet, doPost, service方法
- 当浏览器使用get方式提交数据的时候,servlet需要提供doGet()方法。get方式有:
- form默认的提交方式
- 通过一个超链访问某个地址
- 在地址栏直接输入某个地址
- ajax指定使用get方式的时候
- 当浏览器使用post方式替吉奥数据的时候,servlet需要提供doPost()方法。post方式有:
- 在form上显示设置method="post"的时候
- ajax指定post的方式的时候
Servlet继承HttpServlet同时也继承了一个方法。service(HttpServletRequest , HttpServletResponse ).
在执行doPost()或者doGet()之前都会执行service(),由service判断执行哪一个。三者的参数列表一样。所以有时候会直接重写service()方法,在其中提供相应的服务,就不用区分get,post了。
关于中文问题
1.在html中加上<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
2.method=“post"
3.在servlet中进行编码和解码。
byte[] bytes = name.getBytes("ISO-8859-1");
name = new String(byte,"UTF-8");
或者
request.setCharacterEncoding("utf-8");
这样可以使用utf-8的方式获取中文。
4.返回中文的响应。
在servlet中加上
response.setContentType("text/html; charset=utf-8");