Day26 JavaWeb知识 (3)_HTTPServletRequest 和 HTTPServletResponse
一.Servlet配置方式
- 全路径匹配
- - 以 / 开始 例如 : /a /aa/bb
- - localhost:8080/项目名称/aa/bb - 路径匹配 , 前半段匹配
- - 以 / 开始 , 但是以 * 结束 例如 : /a/* /*
- - * 其实是一个通配符, 匹配任意文字
- - localhost:8080/项目名称/aa/bb - 以扩展名匹配
- - 写法: 没有/ 以*开始 *.扩展名 例如 *.aa *.bb
二.ServletContext
- Servlet 上下文
- 每个web工程都只有一个ServletContext对象.
- 获取对象:
ServletContext context = new getServletContext(); - 作用:
可以获取全局配置参数
<context-param>
<param-name>age</param-name>
<param-value>23</param-value>
</context-param>
获取全局参数
ServletContext context = new getServletContext();
String age = context.getInitParameter("age");
syso(age); - 可以获取web应用中的资源
- - 1.获取资源在tomcat里面的绝对路径
先得到路径,然后自己new InputSteam
ServletContext context = new getServletContext(); //获取ServletContext对象
Properties properties = new Properties(); //创建属性对象
String path = context.getRealPath("file/config.properties");
Inputstream is = new FileInputStream(path);
properties.load(is);
- - 2.getResourceAsStream 资源获取 流对象
ServletContext context = new getServletContext();
Properties properties = new Properties();
Inputstream is = context.getResourceAsStream("file/config.properties");
properties.load(is);
- - 3.根据classloader去获取工程下的资源 类加载器
ServletContext context = new getServletContext();
Properties properties = new Properties();
Inputstream is = this.getClass().getClassLoader().getResourceAsStream("../../file/config.properties");
//因为类加载的路径是 ....\项目名\WEB-INF\classes 需要向上返回两级目录
//而需要读取的文件路径是 ....\项目名\file\config.properties
properties.load(is); - 存储数据, servlet间共享数据 域对象
- - 1.使用ServletContext存储数据
定义一个登陆的html页面,定义一个form表单
<form action="LoginServlet" method="get"> //这里的action写的是相对路径,是根据web.xml中的url-pattern
账号密码省略不写
</form>
定义一个Servlet,名为LoginServlet
重写doGet方法
//1.获取数据 String userName = request.getParameter("username");
//2.校验数据 PrintWriter pw = response.getWriter(); //向客户端输出内容
针对成功或者失败,进行判断,然后跳转到不一样的网页
if(条件判断){
//设置状态码? 重新定位 状态码
reponse.setStatus(302);
//定位跳转的位置是哪一个页面
response.setHeader("Location","login_success.html");
}else{
pw.write("login failed..");
}
服务器启动的时候,会为托管的每个web应用程序,创建一个ServletContext对象
从服务器移除托管,或者是关闭服务器
三.HttpServletRequest
这个对象封装了客户端提交过来的一切数据
- 可以获取客户端请求头信息
Enumeration<String> headerNames = request.getHeaderNames(); - 获取客户端提交过来的数据
- -
String name = request.getParameter("name");
String address = request.getParameter("address");
- -
Map<String,String[ ]> map = request.getParameterMap(); //对应的请求是这种类型的: name=xxx&name=zzz&name=ccc
可以使用map.keySet(); 然后用迭代器遍历/增强for循环遍历 - 获取中文问题
- - 客户端提交数据给服务器端,如果数据中带有中文的话,有可能会出现乱码情况 如果是Get方式
String username = request.getParameter("username");
//get请求过来的数据,在url地址栏上就已经经过编码了,所以我们取到的是乱码
//tomcat收到了这批数据,getParameter默认使用ISO-8859-1去解码
//先让文字回到ISO-8859-1对应的字节数组,然后再按utf-8组拼字符串
username = new String(username.getBytes("ISO-8859-1"), "UTF-8");
简单的方法:直接在tomcat里面配置,以后get请求过来的数据永远都是UTF-8编码
在tomcat的conf/server.xml 中 找到port="8080"的Connector,加上URIEncoding="UTF-8" - 如果是Post方式
在doGet()方法的第一行写上:
//设置请求体里面的文字编码
request.setCharacterEncoding("UTF-8");
四.HttpResponse
负责返回数据给客户端
- - 输出数据到页面上
//以字符流的方式写数据
response.getWriter().writer("<h1>hello response...</h1>");
//以字节流的方式写数据
response.getOutputStream().write("hello response....".getBytes());
- - 输出中文乱码问题
//响应的数据中包含中文:乱码
//这里写出去的文字默认使用的是ISO-8859-1,我们可以指定写出去的时候,使用什么编码写
//以字符流输出
//1.指定输出到客户端的时候,这些文字使用UTF-8编码
response.setCharacterEncoding("UTF-8");
response.getWriter().write("你好");
//2.直接规定浏览器看这份数据的时候,是用什么编码看
response.setHeader("Content-Type","text/html; charset=UTF-8");
response.getWriter().write("你好");
//以字节流输出
//默认情况下getOutputStream输出使用的是UTF-8的码表
//1.指定浏览器看这份数据的码表
response.setHeader("Content-Type","text/html; charset=UTF-8");
//2.指定输出的中文用的码表
response.getOutputStream().write("你好".getBytes("UTF-8"));
- - 设置响应的数据类型是Html文本,并且告知浏览器,使用UTF-8来编码
reponse.setContentType("text/html;charset=UTF-8"):
五.演示下载资源
- 直接以超链接的方式下载,不写任何代码,也能够下载东西
让tomcat的默认Servlet去提供下载:<br>
<a href="download/xx.jpg">xx.jpg</a><br>
原因是tomcat里面有一个默认的Servlet -- DefaultServlet. 这个DefaultServlet专门用于处理放在tomcat服务器上的静态资源
手动编码提供下载
<a href="Demo01?filename=xx.jpg">xx.jpg</a><br>
//1.获取要下载的文件名字 xx.jpg
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();
- JavaWeb如何将后台数据传递到前台页面HttpServletResponse和HttpServletRequest
- JavaWeb如何将后台数据传递到前台页面HttpServletResponse和HttpServletRequest
- JavaWeb开发知识总结(HttpServletRequest,HttpServletResponse)
- JavaWeb ( HttpServletRequest,HttpServletResponse)
- Maven项目下HttpServletRequest 或 HttpServletResponse需引用的依赖包
- HttpServletRequest和HttpServletResponse详解
- dwr与HttpServletRequest,HttpServletResponse,HttpSession,ServletContext,ServletConfig.
- HttpServletRequest&&HttpServletResponse参数的接收和响应
- Tomcat 解决The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes limit
- httpServletRequest,HttpServletResponse (方法及作用)
- HttpServletRequest和HttpServletResponse详解
- HttpServletRequest和HttpServletResponse
- Maven项目下HttpServletRequest 或 HttpServletResponse需引用的依赖包
- HttpServletRequest和HttpServletResponse详解
- HttpServletRequest和HttpServletResponse实现登录(附乱码处理代码)(2017.9.28第一次修改版)
- Filter处理HttpServletRequest & HttpServletResponse 笔记
- HttpServletRequest和HttpServletResponse详解
- 在Action类中获得HttpServletResponse,HttpServletRequest对象的方法
- Struts2之HttpServletRequest、HttpServletResponse,HttpSession,Parameters处理
- The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes limit