1
2
3
4
5
|
//1.程序的数据以什么码表输出了,程序就要控制浏览器以什么码表打开
response.setHeader(
"content-type"
,
"text/html;charset=utf-8"
);
String data=
"中国"
;
OutputStream out=response.getOutputStream();
out.write(data.getBytes(
"utf-8"
));
|
1
|
"content-type"
,
"text/html;charset=utf-8"
中的分号切不可写成逗号,不然浏览器会提示下载
|
1
2
3
4
5
|
//2.用HTML技术中的meta标签来模拟http响应头,用于控制浏览器的行为
String data=
"中国人"
;
OutputStream out=response.getOutputStream();
out.write(
"<meta http-equiv='content-type' content='text/html;charset=utf-8'>"
.getBytes());
out.write(data.getBytes(
"utf-8"
));
|
1
2
3
4
|
//设置response中的码表
response.setCharacterEncoding(
"utf-8"
);
response.setContentType(
"text/html;charset=utf-8"
);
response.getWriter().write(
"中国"
);
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
String path=
this
.getServletContext().getRealPath(
"/download/image1.jpg"
);
String filename=path.substring(path.lastIndexOf(
"\\"
)+
1
);
//取文件名的小技巧
response.setHeader(
"content-disposition"
,
"attachment;filename="
+URLEncoder.encode(filename,
"utf-8"
));
InputStream in =
null
;
OutputStream out =
null
;
in =
new
FileInputStream(path);
int
len=
0
;
byte
buffer[]=
new
byte
[
1024
];
out=response.getOutputStream();
while
((len=in.read(buffer))>
0
){
out.write(buffer,
0
,len);
}
out.close();
in.close();
|
1
2
|
response.setHeader(
"refresh"
,
"3"
);
//3秒后刷新
response.setHeader(
"refresh"
,
"3;url='index.jsp'"
);
//3秒后跳到index.jsp
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
System.out.println(request.getRequestURI());
System.out.println(request.getRequestURL());
//URL和URI的区别:
//URI:统一资源标识符 exp:/day02/RequestDemo1
//URL:全球资源定位器 exp:http://localhost:8080/day02/RequestDemo1
System.out.println(request.getQueryString());
//获取参数信息(返回请求行中的参数)exp: 返回name=zengxiang
System.out.println(request.getRemoteAddr());
//返回发出请求的客户机IP地址
System.out.println(request.getRemoteHost());
//返回发出请求的客户机主机名
System.out.println(request.getMethod());
//返回请求方式POST、GET、PUT
//客户机带数据给servlet有两种方式:超链接和提交表单,下面是获取请求数据的几种方式
1
.String value = (String)request.getParameter(
"name"
);
2
.Enumeration e=request.getParameterNames();
while
(e.hasMoreElements()){
String name=(String) e.nextElement();
value=request.getParameter(name);
System.out.println(name+
"="
+value);
}
3
.String[] values=request.getParameterValues(
"password"
);
for
(
int
i=
0
;values.length!=
0
&&i<values.length;i++){
System.out.println(values[i]);
}
//切记判断传递过来的参数是否为空
4
.Map m=request.getParameterMap();
User user=
new
User();
try
{
BeanUtils.populate(user,m);
//用map集合数据填充bean
}
catch
(Exception e1){
e1.printStackTrace();
}
System.out.println(user);
5
.InputStream in=request.getInputStream();
//一般不采用此种方式去获取数据,文件上传需要这种方式
int
len=
0
;
byte
buffer[]=
new
byte
[
1024
];
while
((len=in.read(buffer))>
0
){
System.out.println(
new
String(buffer,
0
,len));
}
|
1
2
3
|
String value=request.getParameter(
"username"
);
String value1=
new
String(value.getBytes(
"iso8859-1"
),
"gbk"
);
System.out.println(value1);
|
1
2
3
|
request.setCharacterEncoding(
"gbk"
);
String value1=request.getParameter(
"username"
);
System.out.println(value1);
|
1
2
|
request域:作用于请求范围,每个请求对应一个request域,相互独立
servletContext域:作用于WEB应用,所有请求都在一个context域,数据易覆盖
|
1
2
|
getAttribute():获取域中的数据
getParameter():获取客户机所提交的数据
|
1
2
3
4
5
6
|
1
.request.getRequestDispatcher(
"/form1.html"
).forward(request, response);
2
.response.sendRedirect(
"/day02/form1.html"
);
3
.
this
.getServletContext().getRealPath(
"/form1.html"
);
4
.
this
.getServletContext().getResourceAsStream(
"/form1.html"
);
5
.<a href=
"/day06/form1.html"
>xx</a>
6
.<form action=
"/day06/form1.html"
></form>
|
> 请求转发地址栏不变化,而重定向会显示后一个请求的地址
> 请求转发只能转发到本项目其他Servlet,而重定向不只能重定向到本项目的其他Servlet,还能定向到其他项目
> 请求转发是服务器端行为,只需给出转发的Servlet路径,而重定向需要给出requestURI,即包含项目名!
> 请求转发和重定向效率是转发高!因为是一个请求!
<> 需要地址栏发生变化,那么必须使用重定向!
<> 需要在下一个Servlet中获取request域中的数据,必须要使用转发!