servlet运行流程,通过虚拟路径去访问服务器上的资源,输入虚拟路径的时候,会将客户端的请求按照http协议,封装成了http请求,Tomcat服务器接收到请求,解析请求的资源根据请求的项目,找到该xml文件,根据虚拟路径,找到访问的那个类,将请求信息封装成一个request对象,并生成一个response对象,之后创建一个servlet对象,调用servlet方法,将两个对象传入,进行响应,然后服务器对象,会根据response对象中写给客户端的内容进行读取,服务器从response的读取的内容按照http协议封装成一个响应,再响应给客户端。
service方法中的response的类型是ServletResponse,而doGet/doPost方法的response的类型是HttpServletResponse, HttpServletResponse是ServletResponse的子接口,功能和方法更加强大,今天我们学习HttpServletResponse。
可以通过response设置响应行的数据,通过设置响应行的状态码setStatus(int sc),可以改变状态码的数值;改变响应头的内容 调用setheader(string name,string value )方法进行操作;这里我们可以牵扯到一个重定向跳转,客户端访问服务器,但是该服务器没有这个路径,他会返回给客户端哪里有客户端要访问的资源,并返回一个状态码,然后客户端可以根据返回的地址在此访问,最终找到想要的资源。流程如图所示
servlet对重定向进行了封装,我们可以用response的方法,sendredirect(string重定向的地址)。
响应头中封装了服务器返回给客户端的各种指令操作;我们也可以要访问的资源,进行多久时间后的自动跳转,response.setHeader("Refresh", "多少秒;url=(要跳转的界面)");写一个响应的jsp文件如图所示
里面运用到了js中所涉及的计时器,何时取消计时器进行的判定。
响应体是服务器回写给客户端的页面正文,浏览器将正文加载到内存,然后解析渲染 显示页面内容。
通过response设置响应体,使用该类的getwriter方法,获得字符流,通过write方法写的内容,传入response缓冲区,写完之后service方法结束,Tomcat引擎会监测service方法是否结束,去获取缓冲区的内容,在组装成一个http响应返回给客户端,我们输出中文是会打印出乱码,response缓冲区拉丁码表,客户端默认是jdk码表,我们要设置好缓冲区的码表,还要在代码中指定浏览器解析页面的解码方式response中的setcontexttype方法可以同步解决;同时还设置了字节流,这样我们就可以访问图片文档等文件,我们服务器不一定在同一个电脑执行,被访问的文件应该放到服务器下;我们编写一下 如图