servlet的学习笔记

文章详细介绍了ServletContext对象,它是应用程序中唯一的,用于存储全局信息,如访问量统计。HttpServletRequest用于封装HTTP请求信息,提供获取请求数据的方法。HttpServletReponse则用于设置响应信息,包括输出流的使用。此外,文章还讨论了请求转发和重定向的区别,前者在服务器端内部完成,后者涉及两次客户端请求。
摘要由CSDN通过智能技术生成

ServletContext

Servlet上下文对象

一个应用程序只有一个上下文对象

生命周期和Servlet的一样长.

上下文地址就是运行的项目地址

获取方式:

1.ServletContext Context = getServletContext();

2.ServletContext Context = getServletConfig.getServletContext;

方法:

  1. Object getAttribute(String name): 获取属性值

  2. void setAttribute(String name,Object value): 设置属性值

  3. void remoteAttribute(String name):删除属性值

    这个类底层用一个map映射:Map(String ,object)

    这三个方法分别调用了get(key),put(key,value),remove(key)

  4. String getContextPath():获取项目名称

  5. String getRealPath():获取项目部署路径

     

    这两个servlet一起指向ServletContex,ServletContex是公共且唯一的.

    ServletContext主要用于访问量的统计

    访问量的代码:

    ServletContext application  = this.getServletContext();     
    Integer count = (Integer)application.getAttribute("count");          
        if(count ==null){           
            count = 1;  
            }else{      
            count++;        
        }       
    response.setContentType("text/html;charset=utf-8"); //设置响应的文本类型 
    response.getWriter().print("<h1>本页面一共被访问" + count + "次!</h1>");     application.setAttribute("count", count);

Servletrequest

原理:

 

主要的类:HttpServletRequest类

HttpServletRequest类的作用:

每次只要有请求进入 Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好封装到 Request 对象中。 然后传递到 service 方法(doGet 和 doPost)中给我们使用。我们可以通过 HttpServletRequest 对象,获取到所有请求的 信息。

主要的方法:

  • getRequestURI() 获取请求的资源路径

  • getRequestURL() 获取请求的统一资源定位符(绝对路径)

  • getRemoteHost() 获取客户端的 ip 地址

  • getHeader() 获取请求头

  • getParameter() 获取请求的参数

  • getParameterValues() 获取请求的参数(多个值的时候使用)

  • getMethod() 获取请求的方式 GET 或 POST

  • setAttribute(key, value); 设置域数据

  • getAttribute(key); 获取域数据

  • getRequestDispatcher() 获取请求转发对象

乱码问题: 1.POST

request.setCharacterEncoding("UTF-8");

2.GET

 String username =  request.getParameter("username");  //GBK
 username = new String(username.getBytes("GBK"),"UTF-8")

[理解请求转发]

Servletreponse

主要用到的类是HttpServletReponse

HttpServletReponse类的作用:

HttpServletResponse 类和 HttpServletRequest 类一样。每次请求进来,Tomcat 服务器都会创建一个 Response 对象传 递给 Servlet 程序去使用。HttpServletRequest 表示请求过来的信息,HttpServletResponse 表示所有响应的信息, 我们如果需要设置返回给客户端的信息,都可以通过 HttpServletResponse 对象来进行设置

响应返回数据肯定要输出流,最重要的两个输出流:

  • 字节流 :getOutputStream();

    • 常用于下载(传递二进制数据)

  • 字符流 :getWriter();

    • 常用于回传字符串(常用)

两个流同时只能使用一个。 使用了字节流,就不能再使用字符流,反之亦然,否则就会报错。

下载的代码:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   System.out.println("get请求");
   boolean flag =false;
   if (flag){
       response.sendRedirect("web/user/login.html");
   }
   else{
       String mine = getServletContext().getMimeType("D:\\桌面\\05.png");
        response.setHeader("content-type",mine);
        response.setHeader("content-disposition","attachment;filename=05.png");
       FileInputStream fis = new FileInputStream("D:\\桌面\\05.png");
       OutputStream os = response.getOutputStream();
       byte bys[] = new byte[1024];
       while (fis.read(bys) !=-1){
           os.write(bys);
       }
       os.close();
       fis.close();
   }

请求转发和重定位

请求转发:服务器收到请求后,从一次资源跳转到另一个资源的操作

RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servlet2");//这是找去servlet2的路
请求转发必须要以斜杠打头,/ 斜杠表示地址为:http://ip:port/工程名/ , 映射到 IDEA 代码的 web 目录
requestDispatcher.forward(req,resp);通过forward方法去到servlet2
​
​

重定位:

代码:

resp.sendRedirect("http://localhost:8080");

1.重定位需要请求两次

2.重定位的时候不能使用response.getWriter()或response.getOutputStream()输出数据,不然可能会出现异常;

请求转发与重定位的区别:

  • 请求转发是一个请求,而重定向是两个请求;

  • 请求转发后浏览器地址栏不会有变化,而重定向会有变化,因为重定向是两个请求;

  • 请求转发的目标只能是本应用中的资源,重定向的目标可以是其他应用;

  • 请求转发对AServlet和BServlet的请求方法是相同的,即要么都是GET,要么都是POST,因为请求转发是一个请求;

  • 重定向的第二个请求一定是GET;

  • 请求转发是在服务端内部执行的,而重定向是在客户端执行的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值