Java基础_Servlet
实例化Servlet:
当初次请求Servlet时,Servlet容器会根据web.xml实例化Servlet类,当有新的客户请求时,Servlet容器不会再实例化这个Servlet类,而是开启一个新的线程,所以会出现单实例多线程的状态;
Servlet响应过程:
1, 用户点击链接,客户端发送Servlet请求;
2,服务器接收到请求后交给相应的容器来进行处理,当容器发现为Servlet的请求时,容器会创建HttpServletRequest和HttpServletResponse;
3,容器通过请求消息中的URL找到对应的Servlet,创建一个新的线程,将HttpServletRequest和HttpServletResponse两个对象以参数的形式传给新创建的线程;
4,容器调用Servlet的service()方法,service()方法根据请求的不同调用对应的dopost()或者doget()方法来完成具体的请求处理;
5,容器将响应信息按照HTTP组装好返回给客户端,同时线程运行结束,删除产生的HttpServletRequest和HttpServletResponse对象;
Servlet的生命周期:
1,加载: 容器通过类加载器来加载Servlet;
2,创建: 通过Servlet构造方法来创建Servlet对象;
3,初始化: 调用Servlet的init()方法进行初始化,只初始化一次;
4,处理客户请求: 容器在接收到客户端请求时,都会创建一个新的线程,通过调用Servlet的service()方法,service()方法根据请求的不同调用对应的dopost()或者doget()方法来完成具体的请求处理;
5,卸载: 容器在卸载Servlet之前需要调用destory()方法,让Servlet释放所占用的系统资源;
forward和redirect的区别:
forward | redirect |
---|---|
服务器请求资源,服务器直接访问目标的URL,将URL的响应内容读取过来,然后将内容发送给浏览器,地址保持不变; | redirect是服务器发送一个状态让浏览器去请求地址,地址栏显示新的地址; |
转发页面和转发到的页面共享request的数据信息; | 不共享数据; |
在同一个web应用内资源之间转发请求; | 服务器内部的操作; |
HttpServletRequest获取中文乱码问题:
获取处理的数据解析前的源码,然后用UTF-8来解析;设置tomcat,在conf目录下的servlet.xml文件中找到端口号为8080的那一行添加URLEncoding=“UTF-8”;post提交,设置请求体的默认编码解析方式为UTF-8,request.setCharacterEncoding(“UTF-8”);
HttpServletResponse响应中文乱码问题:
response.setCharacterEncoding(“UTF-8”);
request.setHeader(“Content-type”,“text/html;charset=UTF-8”);