Javaweb第十八天学习

请求转发和请求包含
是一个请求,至少包含两个Servlet,请求方法不可以有响应体,只可以有响应头,

请求转发:

response.setHeader("404","cuowu");//可以传过去

response.getWriter().print("响应体");//传不过去

RequestDispatcher re= request.getRequestDispatcher("/Bservlet");

//使用request调用getRequestDispatcher()方法,方法的参数是转发或包含的Servlet路径

re.forward(request,response);

 

请求包含:响应体可以传过去re.include(request,response);

 

Request域对象
在一个请求时间的有效,所以在重定向之后request就消失了。

包含的方法:

Void setAttribute(String name , Object value);封装参数

Object getAttribute(String name);获取参数

Void removeAttribute(String name );删除参数

 

转发和重定向的区别:****
转发是一个请求,一次响应,重定向是两次请求,两次响应

转发地址栏不会变化,重定向地址栏会变化

请求转发只能在本项目中的Servlet,重定向可以转发到任何项目中

转发是服务器端行为,只需给出转发的Servlet路径,重定向需要给出requestURI

请求的效率更高

 

编码
国际通用UTF-8, 系统默认,支持中文的(gb2312gbk)

服务器需要设置编码,setCharacterEncoding(“tuf-8”);然后浏览器有默认的编码,gbk,需要保持一致,name就需要定义浏览器的编码格式了

使用response.setHeader("Content-Type","text/html;charset=utf-8");既可以设置服务器的编码格式,也可以设置浏览器的编码格式。

便捷方法:response.setContentType(“text/html;charset=utf-8”);

总结:想要不出现乱码,在使用getWrite()之前使用便捷方法

 

请求编码:

POST请求:使用getAttribute等方法之前使用

reqponse.setCharacterEncoding(UTF-8);

GET请求:因为浏览器传给服务器的是utf-8,而浏览器默认接收使用的是ISO所有需要在Tomcat中的conf/server.xml中加上一句话来定义服务器的默认编码

(URIEncoding=”UTF-8”,一般不用)

可以使用byte[]bytes = name.getBytes(“ISO-8859-1”);反编码

然后使用name= new String(bytes ,”UTF-8”);

 

关于路径
1 web.xml中的<url-pattern>路径(一般叫做Servlet的路径)

2转发和请求包:以“/”开头,相对于当前路径,直接加上Servlet路径

3重定向路径(客户端路径,必须加项目名)

以“/”来头,就像相对于当前主机,所以可以省略http://localhost:8080/

直接用项目名/Servlet名就可以了

4页面中找链接路径和表单路径(和重定向相同都是客户端路径,都要加项目名)

绝对路径都是以“/”开头 相对路径都是不以“/”开头

posted @ 2022-02-17 22:56  向尧  阅读(25)  评论(0)    收藏  举报