Java web学习第十七天——Servlet

Day17

例题:访问量的统计

创建一个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中

猜你喜欢

转载自blog.csdn.net/swh18337397695/article/details/80042024