⼩⽩学习servlet--常⽤⽅法
学习servlet
Servlet–>GenericServlet–>HttpServlet
我们常⽤的就是它的孙⼦类HttpServlet
⼀、HttpServletRequest常⽤⽅法
每次只要有请求进⼊ Tomcat 服务器,Tomcat 服务器就会把请求过来的 HTTP 协议信息解析好封装到 Request 对象中。然后传递到service ⽅法(doGet 和 doPost)中给我们使⽤。我们可以通过 HttpServletRequest 对象,获取到所有请求的信息。
1.常⽤⽅法
String getMethod(): 返回请求⽅式(GET/POST)
String getRequestURI():返回请求⾏中资源名字部分: 如/test/index.html
StringBuffer getRequestURL():返回浏览器地址栏的内容
String getContextPath():获取上下⽂路径(虚拟⽬录),<Context path=“上下⽂” …/>
String getRemoteAddr():返回请求服务器的客户端的IP地址
String getHeader(String headName):根据指定的请求头获取对应的请求头的值.
2.获取请求参数的⽅法
String getParameter(String name):根据参数名称,获取对应参数的值.
String[] getParameterValues(String name):根据参数名称,获取该参数的多个值.
Enumeration<String> getParameterNames(): 获取所有请求参数的名字
Map<String,String[]> getParameterMap():返回请求参数组成的Map集合.
key:参数名称
servlet和tomcat的关系value:参数值,封装在String数组中.
3.中⽂乱码
在tomcat8中已经⾃⼰解决get获取参数的乱码问题,post得⼿动解决
req.setCharacterEncoding(“UTF-8”)
4.请求转发
通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
使⽤RequestDispatcher对象来进⾏转发:forward(ServletRequest request, ServletResponse response)
// 常⽤⽅式转发到servlet2资源
特点:
浏览器地址栏路径不发⽣变化
只能转发到当前服务器内部资源中
转发只发送⼀次请求
5.共享数据
域对象: ⼀个有作⽤范围的对象,可以在范围内共享数据
request域: 代表⼀次请求的范围,⼀般⽤于请求转发的多个资源中共享数据
⽅法
void setAttribute(String name,Object obj):在servlet1存储数据
Object getAttitude(String name):就可以在servlet2通过键获取值
void removeAttribute(String name):通过键移除键值对
⼆、HttpServletResponse常⽤⽅法
ServletResponse接⼝: 响应对象, 封装了获取所有响应信息(状态⾏, 响应头, 请求实体)的⽅法HttpServletResponse接⼝:是ServletResponse的⼦接⼝, 处理HTTP协议响应的⽅法.
1.常⽤⽅法
OutputStream getOutputStream():获取字节输出流对象. :⼀般输出图⽚
Writer getWriter():获取字符输出流对象 :输出内容,⼀般输出⽂字
如果输出内容为中⽂会乱码
response.setContextType(“text/html;charset=utf-8”);告诉浏览器⽤什么编码来解码,乱码解决
2.重定向
当访问responseDemo1,会⾃动跳转到/responseDemo2
---------⽅式⼀------------
设置状态码
resp.setStatus(302);
设置响应头 location
resp.setHeader(“location”, “/Servlet/responseDemo2”);
---------⽅式⼆------------
resp.sendRedirect("/Servlet/responseDemo2");
1).重定向的特点:redirect
1. 地址栏发⽣变化
2. 重定向可以访问其他站点(服务器)的资源
3. 重定向是两次请求。不能使⽤request对象来共享数据
2).转发的特点:forward
1. 转发地址栏路径不变
2. 转发只能访问当前服务器下的资源
3. 转发是⼀次请求,可以使⽤request对象来共享数据
4.常见应⽤
1).向浏览器输出消息
2).下载⽂件
获取下载⽂件路径
下载⽂件名叫啥
设置想办法让浏览器⽀持我们下载需要的东西
获取下载⽂件的输⼊流
创建缓冲区
获取outputStream对象
将FileOutputStream流写⼊到buffer缓冲区
使⽤outputStream将缓冲区的数据输出到客户端
package com.wangningbo.servlet;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.URLEncoder;
/**
* @author wangningbo
* @date 2020/6/7 - 12:11
*/
public class HelloHttpServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
//获取下载⽂件路径
String realpath ="E:\\myidea_workspace\\javaweb\\05-study-javaweb\\httpservlertresponse-01\\target\\classes\\⽼婆.jpg";
//下载⽂件名叫啥,截取到⽂件名
String fileName = realpath.substring(realpath.lastIndexOf("\\")+1);
System.out.println(fileName);
//设置想办法让浏览器⽀持我们下载需要的东西,⼀中⽂命名会存在编码问题,指定de(fileName,"UTF-8")        resp.setHeader("Content-Disposition","attachment;filename="+ de(fileName,"UTF-8"));
//获取下载⽂件的输⼊流
FileInputStream inputStream =new FileInputStream(realpath);
//创建缓冲区
byte[] bytes =new byte[1024];
//获取outputStream对象
ServletOutputStream outputStream = OutputStream();
//将FileOutputStream流写⼊到buffer缓冲区,使⽤outputStream将缓冲区的数据输出到客户端
int i =0;
while((ad(bytes))!=-1){
outputStream.write(bytes,0,i);
}
outputStream.flush();
inputStream.close();
outputStream.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
doGet(req, resp);
}
}
三、绝对路径和相对路径
1.相对路径:通过相对路径不可以确定唯⼀资源
如:./index.html
不以/开头,以.开头路径
规则:到当前资源和⽬标资源之间的相对位置关系
./:当前⽬录
…/:后退⼀级⽬录
2.绝对路径:通过绝对路径可以确定唯⼀资源
以/开头的路径
规则:判断定义的路径是给谁⽤的?判断请求将来从哪⼉发出
规则:判断定义的路径是给谁⽤的?判断请求将来从哪⼉发出
给客户端浏览器使⽤:需要加虚拟⽬录(项⽬的访问路径)
建议虚拟⽬录动态获取:String ContextPath()
contextpath+"/responseDemo2"
例如:<a> , <form> 重定向…
给服务器使⽤:不需要加虚拟⽬录
例如:转发路径
四、ServletContext(⾥⾯的功能后期⽤其他的来代替掉,了解)
1.ServletContext概述
ServletContext对象,tomcat为每⼀个web项⽬单独创建的⼀个(ServletContext)上下⽂(知上知下贯穿全⽂)对象。服务器启动的时候,为每个WEB应⽤创建⼀个单独的ServletContext对象,我们可以使⽤这个对象存取数据,⽤这个对象存取的数据,可以在整个WEB应⽤中获取.
服务器会为每个应⽤创建⼀个ServletContext对象:
ServletContext对象的创建是在服务器启动时完成的;
ServletContext对象的销毁是在服务器关闭时完成的。
2.获取ServletContext对象
或者
3.ServletContext常⽤功能
1)获取MIME类型:在互联⽹通信过程中的⼀种⽂件数据类型
String name = “a.jpg” // 类型为:image/jpeg
String mimeType = ServletContext().getMimeType(filname);
2)多个servlet之间共享数据
ServletContext很⼤⼀旦创建所有的servlet都可以从其中拿数据,⽣命周期很长,数据也不安全
3)获取⽂件真实路径
获取⽂件保存的位置 :
1.src下 : 发布到 /WEB-INF/
String path = ServletContext().getRealPath("/WEB-INF/");
2.web⽬录下 : 发布到/a.xt
String path = ServletContext().getRealPath("/a.txt");
3.WEB-INF⽬录下 : 发布到 /
String path = ServletContext().getRealPath("/");
String getRealPath(String str) 获取资源绝对路径getResourceAsStream(String str) 获取资源输⼊流对象参数 : str 与 getRealPath()的参数⼀致
返回值 : 输⼊流对象, ⽤来直接读取⽂件.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。