Javaweb第十七天学习

例题:访问量的统计

创建一个int类型的变量,然后把它保存到ServletContext的域中,这样可以保存所有的Servlet都可以访问到

思想:

最初ServletCOntext中没有保存访问量的属性

的第一次访问时,创建一个变量,设置值是1,保存的ServletContext中

当以后访问时,从中获取,值加1.

//步骤:先获取,根据获取的值,做出判断,如果是空就是第一次访问,就直接创建,如果不是空,就加1然后再存储。

ServletContext context = this.getServletContext();

Integer count = (Integer)context.getAttribute("count");

if(count==null){

context.setAttribute("count", 1);

}

else {

count+=1;

context.setAttribute("count", count);

}

PrintWriter pw = response.getWriter();

pw.print(count);

}

获取类路径的资源:类路径对一个javaweb项目而言,就是/WEN-INF/CLASS

和/WEB-INF/lib每一个jar包!

//得到ClassLoader

ClassLoader loader = this.getClass().getClassLoader();

//调用方法

InputStream input = loader.getResourceAsStream("index.jap");

//读取输入流内容,转换成字符串

String s = IOUtils.toString(input);

System.out.println(s);

Response
类型是HttpServletResponse

 

setError(int sc)--à发送错误状态码,例如404 500

setError(int sc,String infor)发送错状态码,并且加上错误信息

setStatus(int sc)-à发送正确的状态码

 

响应头
响应头就是一个键值对可以会存在一个name多个值

setHeader(String name , String value)用于单值的响应头,

例如:response.setHeader("sss", "SSS");
addHeader(Stringname , String value),多值的响应头(少用)

setIntHeader(Stringname , String value)

适用于单值的int类型的响应头

setDataHerder(Stringname , long value)

适用于单值的毫秒类型的响应头

 

响应头实现自动刷新

PrintWriter writer = response.getWriter();

writer.print("huangying");

response.setHeader("Refresh","5;URL=/java10_1/Cservlet");

刷新时间,跳转地址

关键字

 

 

禁止浏览器缓存

三句话:

response.setHeader("Cache-Control", "no-cache");

response.setHeader("pargam", "no-cache");

response.setDateHeader("expires", -1);

 

response有两个流
ServletOutputStream:用来向客户端发送字节数据

ServletOutputSteam out = response.getOutputStream();

Print Writer:用来向客户端发送字符数据!需要设置编码

PrintWriter writer = response.getWriter();

不可以同时使用

 

把一张图片读取到字节数组中

String path = "图片绝对路径";

FileInputStream in = new FileInputStream(path);

byte[] bytes = IOUtils.toString(path);

response.getOutputStream().write(bytes);

 

请求uri :项目名+servlet路径

重定向

response.sendRedirect("http://www.baidu.com");

 

request
封装了客户端所有的请求数据

获取常用信息:

获取客户端IP

String request.getRemoteAddr();

获取请求方式:

Request.getMethod();返回值事get 或者 post 通缩这个来调用do方法

获取请求头:

String getHeader(String name);适用于单值头

Int getIntHeader(String name);适用于int类型的请求头

Long getDateHeader(String name);适用于单值毫秒类型的请求头

Enumeration<String>getHeader(String name),适用于多值请求头

//获取客户端IP

String ip = request.getRemoteAddr();

System.out.println(ip);

//获取请求方式

String mothod = request.getMethod();

System.out.println(mothod);

//获取客户段信息

String user = request.getHeader("User-Agent");

System.out.println(user);

获取请求URL:

String getScheme();获取协议名

String getServerName();获取服务器名

String getServlerPort();获取服务器端口号

String getContextPath();获取项目地址

String getServletPath();获取servlet地址

String getQueryString();获取参数

String getRequestURI();获取uri

String getRequestURL();获取请求地址

 

使用referer请求头防盗链
如果是本机请求的就正常运行到百度,否则到index.jsp

String str = request.getHeader("Referer");

System.out.println(str);

if(!str.contains("localhost")||str==null){

response.sendRedirect("index.jsp");

}

else{

response.sendRedirect("http://www.baidu.com");

}

}

request请求参数
getparameter(参数名);返回参数的值

String[] name =request.getparamentValue(参数名);如果一个参数对应多个值,例如多选框

Enumeration names =request.getParamentNames();返回所有参数名,是一个数组

Map<String,String[]> map =request.getParamentMap();,获取所有请求参数,封装的map中

 

posted @ 2022-02-16 22:00  向尧  阅读(43)  评论(0)    收藏  举报