我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代表响应response。
service方法中的response的类型是ServletResponse,而doGet/doPost方法的response的类型是HttpServletResponse,HttpServletResponse是ServletResponse的子接口,功能和方法更加强大。
访问demo4,重定向到demo3,显示404状态.
response.sendRedirect()底层就是使用该种方式进行重定向.
访问一个servlet,每隔3秒刷新页面
使用最多的就是设置响应体文本:getWriter.write();
getWriter方法获得字符流,通过字符流的write(String s)方法可以将字符串设置到response缓冲区中,随后Tomcat会将response缓冲区中的内容组装成Http响应返回给浏览器端。
response缓冲区的默认编码是iso8859-1,此码表中没有中文,可以通过 response的setCharacterEncoding(String charset) 设置response的编码.
但我们发现客户端还是不能正常显示文字. 是因为我们将response缓冲区的编码设置成UTF-8,但浏览器的默认编码是本地系统的编码,因为我们都是中文系统,所以客户端浏览器的默认编码是GBK,我们可以在代码中指定浏览器解析页面的编码方式.
通过response的setContentType(String type)方法指定页面解析时的编码是UTF-8
response.setContentType(“text/html;charset=UTF-8”);
上面的代码不仅可以指定浏览器解析页面时的编码,同时也包含setCharacterEncoding的功能,所以在实际开发中只要编写 response.setContentType(“text/html;charset=UTF-8”);就可以解决页面输出中文乱码问题。
我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代表响应response。
service方法中的request的类型是ServletRequest,而doGet/doPost方法的request的类型是HttpServletRequest,HttpServletRequest是ServletRequest的子接口,功能和方法更加强大.
如果是本机访问,注意别用localhost,否则会被转为IPV6地址.可以通过127.0.0.1或者本机的IP访问. 这里我们以封IP为例演示这个方法的作用.
当我们浏览网站的时候,有时会提示我们最好使用XX浏览器, 或者当我们下载某软件的时候,会自动根据我们的系统进行匹配.那服务器是如何知道我们的操作系统以及浏览器?其实是我们发出的请求的请求头中,出卖了我们的信息.
某些网站的资源,我们只能通过该网站的链接进入,通过其他网站的连接,哪怕url地址一致,都无法获取.这是因为服务器对该资源进行了防盗链处理.
如果请求不是通过本站的超链接发出的,发送错误代码404 —Referer这个请求头,表示请求的来源.
在桌面上创建一个index.html.点击链接后.
请求头中没有referer相关的信息
通过项目中的index.html页面点击
请求头中含有Referer的信息
以这个完整的URL为例,说明一下方法
http://localhost:8080/hello/oneServlet?name=zhangSan
—> /hello/oneServlet
—> http://localhost:8080/hello/oneServlet
我们在Servlet中接收多个表单参数后,最常做的事情,就是将参数封装为一个对象.手动声明对象,然后挨个属性的接收和封装过于麻烦,通常情况,我们都会借助Apache Commons组件中的BeanUtils工具包,帮我们完成数据的封装.
核心方法就是BeanUtils工具类的静态方法:populate.使用该方法切记表单提交的键必须和对象的属性名一致,否则无法进行属性的封装.
通常浏览器往服务器发送的数据,都是utf-8编码的.因此在我们使用requset.
getParameter()方法之前,调用request.setCharacterEncoding(“utf-8”)即可防止POST请求乱码.
但是GET请求的编码方式不让设置,所以我们只能将错就错,拿到错误字符,然后通过ISO-8859-1编码反编译回去,再使用UTF-8重新编码.
首先获取请求转发器,传入转发的路径.注意该路径不需要写项目名.
然后调用转发器的forword方法进行请求的转发
request对象也是一个存储数据的区域对象,所以也具有如下方法:
注意:request域的作用范围:一次请求中