ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

HttpServletRequeste和HttpServletResponse

2020-02-28 09:06:41  阅读:306  来源: 互联网

标签:HttpServletRequeste username String request HttpServletResponse 获取 ServletContex


文章目录

Servlet配置方式

  • 路径匹配(开发常用)
    以 / 开始 如:/a
    输入:localhost:8080/项目名称/a
  • 路径匹配,前半段匹配
    以 / 开始,但是以 * 结束 如:/ a / *
    其实就是一个通配符,匹配任意文字
    输入:localhost:8080/项目名称/aa/bb
  • 以扩展名匹配
    写法: 没有/ 以 * 开始 *.扩展名 .aa .bb

ServletContext是什么

  • ServletContext是什么?
  1. Servlet上下文
  2. 每个Web工程都只有一个ServletContext对象,说白了也就是不管在那个Servlet里面,获取到的这个类的对象都是同一个。
  3. 如何得到对象:
//获取对象
ServletContext context=getServletContext();

ServletContext有哪些作用?

  1. 获取全局配置参数
  2. 获取Web工程中的资源
  3. 存取数据,servlet间共享数据,域对象。

一、ServletContext 获取全局参数

在这里插入图片描述
在这里插入图片描述

二、ServletContext 获取Web应用中的资源

1.获取资源在tomcat里面的绝对路径
先得到路径,然后自己new InputStream
	//这里得到的是项目在Tomcat里面的根目录
	String path = context.getRealPath("");
	//这里得到的是全路径
	String path = context.getRealPath("file/config.properties");

2.getResourceAsStream 获取资源 流对象
3 通过classloader去获取工程下的资源, 类加载器(JDBC)

三、servlet间共享数据

  • ServletContext的作用(存/取数据)
  • 例子:用户登录,并查看是第几个登录此网站的人。
<!--登录页面-->
<body>
	<h1>请输入以下内容,完成登录</h1>
	<form action="loginServlet" method="get">
		账号:<input type="text" name="username"/><br>
		密码:<input type="text" name="password"/><br>
		<input type="submit" value="登录"/>
	</form>
</body>
<!--后台验证并返回给浏览器-->
// 1.获取数据
	String username = request.getParameter("username");
	String password = request.getParameter("password");
	System.out.println("username="+username+"==password="+password);
// 2.校验数据
	//向客户端浏览器页面输出内容
	PrintWriter pw=response.getWriter();
	if("daq".equals(username)&&"123".equals(password)){
		//pw.write("login success...");
		//成功就跳转到index.html
	
		//设置状态码
		response.setStatus(302);
		//定位跳转到位置是哪一个页面
		response.setHeader("Location","index.html" );
	}else{
		pw.write("login failed...");
	}
<!--登录成功的页面-->
<body>

	<h2>登录成功了</h2>
	<a href="">获取网站登录成功总次数</a>
</body>

四、ServletContext作用范围和生命周期

1–问:ServletContext何时创建,何时销毁
答:服务器启动的时候,会为托管的每一个Web应用程序,创建一个ServletContext对象,从服务器移除托管,或者是关闭服务器。
2–问:ServletContext的作用范围
答:只要在这个项目里面,都可以取,只要同一个项目, A项目 存,在B项目是取不到的,因为他们的对象不同。

HttpServletRequeste

  • 这个对象封装了用户提交过来的一切数据。
  1. 可以获取用户端请求头信息。
    在这里插入图片描述
  2. 获取客户端提交的数据
// 1.取出请求里面的所有头信息 , 得到一个枚举集合
		Enumeration<String> headerNames = request.getHeaderNames();
		while (headerNames.hasMoreElements()) {
			String name = headerNames.nextElement();
			String value = request.getHeader(name);
			System.out.println(name + "=" + value);
		}
		System.out.println("----------------");

		// 2.获取的是客户端提交上来的数据。
		String name = request.getParameter("name");
		String address = request.getParameter("address");
		System.out.println("name=" + name);
		System.out.println("address=" + address);

		System.out.println("----------------");

		// 3. 获取所有的数据,得到一个枚举集合
		// Enumeration<String> parameterNames = request.getParameterNames();
		Map<String, String[]> map = request.getParameterMap();
		Set<String> keySet = map.keySet();
		Iterator<String> iterator = keySet.iterator();
		while (iterator.hasNext()) {
			String key = (String) iterator.next();
			String value = map.get(key)[0];
			
			System.out.println(key+"=="+value);
			
		}
  1. 获取中文数据
    问题: 客户端提交数据给服务器端,如果数据中带有中文的话,有可能出现乱码情况。
    原因: get请求过来的数据,在url地址栏上就已经经过编码了,所以我们取到的就是乱码。tomcat收到这批数据,getparameter默认使用ISO-8859-1去编码。
  • 如果是GET方式

解决方法:

  1. 代码转码
//先让文字回到ISO-8859-1,然后在按照utf-8拼接字符串
username=new String(username.getBytes("ISO-8859-1"),"UTF-8");
System.out.println("username="+username+"==password="+password);
  1. 可以再Tomcat里面设置处理,以后get请求过来的数据永远是UTF-8编码在这里插入图片描述
  • 如果是post方式
//这行设置一定要写在getParametr之前。
request.setCharacterEncoding("UTF-8");

HttpServletResponse

  • 负责响应(返回数据)给客户端
//以字符流的方式写数据
response.getWriter().write("hello response!!!");
//以字节流的方式写数据
response.getOutputStream().write("hello response....222".getBytes());

中文乱码问题

  • 响应的数据中包含中文,极有可能出生中文乱码
//以字符流输出,需要加入以下代码
//1.指定输出到客户端的时候,这些文字使用UTF-8编码
response.setCharacterEncoding("UTF-8");
		
//2.直接规定浏览器看这份数据的时候,使用什么编码来看。
response.setHeader("Content-Type", "test/html;charset=UTF-8");
  • 不管是字符流还是字节流,只用写下面这行代码
response.setContentType("text/html;charset-UTF-8");
然后在写数据即可!

下载资源

  1. 直接以超链接的方式下载,不写任何代码,也能够下载东西下来
    原因是tomcat里面有一个默认的Servlet --DefaultServlet,这个DefaultServlet专门用于存放在Tomcat服务器上面的静态资源。
<body>
	让tomcat的默认servlet去提供下载:<br>
	<a href="download/gui-config.json">gui-config.json</a><br>
	<a href="dowmload/OmegaOptions-fy0703.bak">OmegaOptions-fy0703.bak</a><br>
	<a href="download/Shadowsocks.exe">Shadowsocks.exe</a><br>
</body>

手动编码提供下载:

<!--index.html-->
<body>
	手动编码提供下载<br>
	<a href="Demo1?filename=gui-config.json">gui-config.json</a><br>
	<a href="Demo1?filename=OmegaOptions-fy0703.bak">OmegaOptions-fy0703.bak</a><br>
	<a href="Demo1?filename=Shadowsocks.exe">Shadowsocks.exe</a><br>
</body>
<!--servlet里面这么写-->
//1.获取要下载的文件名字
	String filename=request.getParameter("filename");
		
/2.获取这个文件在Tomcat里面的绝对路径地址
	String path=getServletContext().getRealPath("download/"+filename);
		
	response.setHeader("Content-Disposition","attachment;filename="+filename);
	
//3.转化成输入流
	InputStream is=new FileInputStream(path);
	OutputStream os = response.getOutputStream();
		
	int len=0;
	byte[]buffer=new byte[1024];
	while((len=is.read(buffer))!=-1){
		os.write(buffer, 0, len);
	}
	os.close();
	is.close();
}
怦然心痛 发布了61 篇原创文章 · 获赞 53 · 访问量 9642 私信 关注

标签:HttpServletRequeste,username,String,request,HttpServletResponse,获取,ServletContex
来源: https://blog.csdn.net/weixin_44861399/article/details/104532940

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有