首页 > 其他分享 >2022-8-30 servlet

2022-8-30 servlet

时间:2022-08-30 20:55:27浏览次数:54  
标签:请求 30 request System 2022 println servlet response name

HttpServletRequest --- request(请求)

所有的 和请求相关的操作,都用这对象来处理
当有请求来的时候 , request就被实例化

HttpServletResponse --- response(响应)

所有和响应相关的操作,都用这个对象来处理
当有请求来的时候 , response 就被实例化
当你想要给出响应就使用 response ,,  我们给出的响应,必须要展示在客户端(浏览器)

init方法什么时候执行?

 * 默认当我们第一次访问servlet的时候被调用,延迟加载。
 * 初始化方法只执行一次。
public class HelloServlet extends HttpServlet {
	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("servlet初始化");
		System.out.println(config.getInitParameter("username"));
		System.out.println(config.getInitParameter("password"));
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req,resp);
	}
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//接收参数 ,处理请求
		  request.getParameter("username");
		  request.getParameter("password");
		  // 给出响应
		// 客户端和服务器端的信息传递
		// 设置响应的字符集   一定要放在获取流之前
		// 服务器处理字符串按照UTF-8处理
		response.setCharacterEncoding("utf-8");
		// 添加响应头,告诉浏览器以HTML的格式来解析响应字符串
		response.addHeader("content-type","text/html;charset=utf-8");
		//Io流
		PrintWriter writer = response.getWriter();
		//向客户端回复数据
		writer.write("我是后台返回的数据");
		   //  * writer.write---写字符。
		   //  * writer.print---写字节。
		//流的操作
		writer.flush();
		writer.close();
	}
}

System.out.println("请求的方法:" + request.getMethod());
System.out.println("请求的根路径:" + request.getContextPath());
System.out.println("请求的URI:" + request.getRequestURI());
System.out.println("请求的URL:" + request.getRequestURL());
System.out.println("请求的servletPath:" + request.getServletPath());

@WebServlet("/demo.do")
public class Demo01Servlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 根据key获取对应的value
	   request.getParameter("");
		// 获取一个key对应的多个值,返回值为String类型的数组  例如:复选框
	   String[] hobbies = request.getParameterValues("hobby");
//        System.out.println(Arrays.toString(hobbies));

    // 获取请求中传过来的参数的key值,根据key值获取对应的value值
   Enumeration<String> parameterNames = request.getParameterNames();
   while(parameterNames.hasMoreElements()){
       System.out.println(parameterNames.nextElement());
   }
    // 可以获取到请求中的所有的键值对,返回值是一个map集合
    // 这个map集合的key是String,value是String[]
    // username=admin,password=123456,hobby=a,b,c,gender=man
    Map<String, String[]> map = request.getParameterMap();
    for (Map.Entry<String, String[]> name : map.entrySet()) {
        String key = name.getKey();
        String[] value = name.getValue();
        System.out.println(key + "--->" + Arrays.toString(value));
    }
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doGet(request,response);
}

}

转发 request.getRequestDispatcher("demo03.do").forward(request,response);

@WebServlet("/demo02.do")
public class Demo02Servlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		/*
		* 请求转发---由多个servlet来处理同一个请求
		*
		* 请求转发是在服务器上完成的,跟客户端是否无关!!!
		*
		*
		*/
		String name = request.getParameter("name");
		System.out.println("Demo02Servlet,name:" + name);
		// getRequestDispatcher参数:转发的servlet的地址
		// forward参数:request,response,把当前servlet用的request和response传给下一个
		request.getRequestDispatcher("demo03.do").forward(request,response);
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

@WebServlet("/demo04.do")
public class Demo04Servlet extends HttpServlet {

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    /*
    * 作用域:起作用的区域
    *
    * 往request作用域中添加了一个属性name,值是zhangsan
    *
    * 请求转发的时候是同一个request
    *
    */
    request.setAttribute("name","zhangsan");
    // name怎么取出来?
    System.out.println("demo04.do---name:" + request.getAttribute("name"));
    request.getRequestDispatcher("demo05.do").forward(request,response);

//        根据指定的key,删除对应的value
//        request.removeAttribute("name");
		// 获取request作用域中的所有的key
//        Enumeration<String> attributeNames = request.getAttributeNames();


}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}
}

    request.getRequestDispatcher("demo03.do").forward(request,response);
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doGet(request, response);
}
}

重定向 response.sendRedirect("success.html");

@WebServlet("/demo06.do")
public class Demo06Servlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	   response.getWriter()
	   response.setCharacterEncoding("utf-8");
	   response.addHeader("content-type","text/html;charset=utf-8");
	   response.sendRedirect("success.html");

}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}
}

请求转发和重定向的区别:

        1.重定向是两次请求,请求转发是一个请求
        2.重定向是客户端行为,请求转发是服务器行为
        3.重定向浏览器地址会发生改变,转发不会

最常见的客户端传参的方式两种,get,post

 * 浏览器地址栏直接输入:一定是get请求
 * 超级链接:一定是get请求
 * 表单:可以是get,也可以是post,取决于method
 *
 * GET请求和POST请求的区别:
 * GET:请求的参数会在浏览器的地址栏中显示,不安全;请求的长度限制在1K之内。
 *      没有请求体,无法通过request去设置一些参数。
 * POST:请求的参数不会在浏览器的地址栏中显示,相对安全。
 *       把请求的参数封装成几个数据报文(请求体)。请求参数的长度没有限制。

标签:请求,30,request,System,2022,println,servlet,response,name
From: https://www.cnblogs.com/ychptz/p/16640749.html

相关文章

  • 2022牛客多校第8场 I.Equivalence in Connectivity
    题目大意给定一张\(n\)个点\(m\)条边的无向图,定义两张图\(G_1\)和\(G_2\)连通性等价,当且仅当\(\forallu,v\inG_1\),只要在\(G_1\)中\(u\)和\(v\)连通,一定......
  • PAT Advanced 1030 Travel Plan(30)
    题目描述:Atraveler'smapgivesthedistancesbetweencitiesalongthehighways,togetherwiththecostofeachhighway.Nowyouaresupposedtowriteaprogra......
  • PAN3028 是一款采用 ChirpIoTTM调制解调技术的低功耗远距离无线收发芯片
    PAN3028是一款采用ChirpIoTTM调制解调技术的低功耗远距离无线收发芯片,支持半双工无线通信,工作频段为370~600MHz和740~1200MHz,该芯片具有高抗干扰性、高灵敏度、低......
  • 8/30 注册博客园
    8月30日下午17:05鄙人写下了第一篇博客。写博客的目的很单纯,想通过记录博客的方式以记录自己的ACM学习,大学生活什么的。另外大佬们总会说要自己写解题报告,算法分析,模板什......
  • C20220712T3 牛半仙的妹子Tree
    给定一棵树,要求执行3种操作:给树上某一结点涂色,从下一次操作起每一次向周围传染一个单位。树上所有点变为正常询问某个点是否被感染。\(n,m\leq10^5\)。首先想到暴......
  • C20220711T4 移动
    牛牛从0出发走到\(n+1\),每秒可以选择向前走一步,向后走一步或者不走,有一些时刻不让呆在某一格,求最短到达时间,\(n\leq10^5\)。这是一道很神奇的压轴题(其实并没有什么......
  • C20220712T1 牛半仙的妹子数
    给定\(A,B,C\),操作\(K\)次,每次操作若\(A+B\leqC\)则\(A=2A,B=2B,C=C-A-B\),否则记\(A,B\)中较小的为\(W\),\(P=min(\frac{C}{2},W-1)\),则\(A=A-P,B=B+P-C,C=......
  • C20220712T2 牛半仙的妹子图
    给定\(n\)个点和\(m\)条边,起点\(s\),每个点有颜色。给定多组\([l,r]\),求最大走\(l...r\)边权所有可以走到的不同颜色数之和。(同一种颜色在不同区间内算多组)。\(n......
  • 2022-08-30 第二小组 张晟源(javaweb,request,response)
    JavaWebHttpServletRequest//请求  所有和请求相关的操作  当请求来的时候,request就被实例化HttpServletResponse//响应   所有和响应的操作  当请求来......
  • Spring Boot注册Servlet、Filter、Listener原理
    如何使用在SpringBoot中注册Servlet、Filter办法主要有3种,下面来看下具体例子,例子都采用Filter,Servlet同理。第一种,使用FilterRegistrationBean、ServletRegistrationBe......