Servlet设置获取全局配置信息
两种方式
1.获取config对取出servlet配置信息
//先获取config对象
ServletConfig servletConfig = this.getServletConfig();
//取出servlet的配置信息
String value = servletConfig.getInitParameter("username");
System.out.println(value);
2.获取context域对象在获取全局配置信息
//获取context域对象
ServletContext application = this.getServletContext();
//获取全局配置信息
String value = application.getInitParameter("key");
System.out.println(value);
获取服务器上的文件路径并读取
1.在src下新建一个名称为a的文件
2.使用Context域对象获取,它可以获取到服务器上任意资源路径
3.使用字节流读取a文件
// 获取a文件
ServletContext context = this.getServletContext();
// 获取服务器上的真实路径(绝对路径 磁盘路径)
String path = context.getRealPath("/WEB-INF/classes/a.properties");
System.out.println(path);
// 读取文件
Properties properties = new Properties();
properties.load(new FileInputStream(path));
System.out.println(properties.getProperty("key"));
请求转发
请求转发过程:浏览器发给服务器一个请求Demo01,但是Demo01执行不了,转发给Demo02由Demo02执行后发给Demo01再有Demo01响应给服务器。
请求转发定义:浏览器只发起一个请求,但是servlet内部做的请求转发浏览器不知道 ,请求地址不会发生改变。
代码实例:
Demo01
System.out.println("你是大傻子");
System.out.println("我不是 你看看Demo02是不是");
//获取context域对象
ServletContext qpplication = this.getServletContext();
//从Context 类中获取请求转发器
RequestDispatcher dispatcher = qpplication.getRequestDispatcher("/demo02");
//进行请求转发
dispatcher.forward(request, response);
System.out.println("Demo02是大傻子");
Demo02
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("我是大傻子???");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
HttpServletResponse服务器响应对象
1.响应对象都有什么 ?
响应头:告诉浏览器要做什么,例如响应给你的文件需要下载什么格式
响应行:http/1.1 状态码200 等
响应体:响应回浏览器的数据
2.设置服务器编码格式
response.setContentType(“text/html;charset=UTF-8”);
response.setContentType("text/html;charset=UTF-8");
// 响应一句话给浏览器
// 从响应对象HttpServletResponse中获取流对象
// 注意:这个流对象保护是自己创建,要从响应中获取
PrintWriter out = response.getWriter();
out.write("大傻子");
下载文件
思路:用户发送请求请求Servlet
servlet处理请求(在服务器上以流的形式使用response 响应给用户)
以下载图片为例
1.获取服务器上图片路径
2.用字符串切割 获取图片名字
3.修改文件名的字符集
4.添加响应头设置文件下载格式
5.使用字符流在服务器中读取图片
6.边读边写响应会浏览器。
//获取服务器上的图片路径
String realPath = this.getServletContext().getRealPath("/WEB-INF/classes/团子大家族.png");
//字符串切割 获取图片名字
int index = realPath.lastIndexOf("/");
String filname = realPath.substring(index+1);
System.out.println(filname);
//修改文件名字的字符集
filname=new String(filname.getBytes(), "iso-8859-1");
//添加响应头(需要拼接文件名子)
response.setHeader("content-disposition", "attachment;filename="+filname);
//告诉浏览器文件下载的格式添加响应头
response.setHeader("content-type", " image/png");
//从服务器中读取图片
FileInputStream fis = new FileInputStream(realPath);
// 注意:获取response中的字节流进行数据响应
ServletOutputStream sos = response.getOutputStream();
//边读边写
int a = 0;
byte[] b = new byte[1024];
while((a = fis.read(b))!=-1) {
// 响应回浏览器
//如果只是单纯的把图片响应回去浏览器并不知道你要干啥(下载或浏览)
//需要通过响应头 通知浏览器 我这个文件是下载用的
sos.write(b, 0, a);
}
// 注意:自己创建的流自己关
fis.close();
请求重定向
重定向含义:浏览器发起请求servlet给浏览器一个响应再响应中会携带一个重定向响应头浏览器接到这个响应后发现重定向头,再一次发起请求去访问重定向头中的地址
请求转发和请求重定向的区别:
请求重定向是发起了两次请求请求转发是发起一次请求。
1.跳转网址
//设置响应的字符集
response.setContentType("text/html;charset=UTF-8");
//3秒后跳转一个网址
response.setHeader("refresh", "3;url=/java-web-servlet-3.27/demo08");
response.getWriter().write("3秒后跳转");
2.刷新网址
//添加刷新头 (每秒刷新一次)
response.setIntHeader("refresh", 1);
//添加随机数
response.getWriter().write(Math.random()+"");
3.重定向
Demo01代码:
//通过请求头的方式请求重定向
System.out.println("我要借钱");
System.out.println("我没有去找02");
//添加重定向响应头
//添加头信息请求网址时需要写明工程名
response.setHeader("location", "/java-web-servlet-3.27/dome02");
//添加重定向状态码
response.setStatus(302);
System.out.println("我去了");
Demo02代码:
System.out.println("给你");
HttpServletRequest
HttpServletRequest包含:
请求头
请求行
请求体
1.获取地址,获取请求类型,获取请求的路径
System.out.println(request.getRequestURI());// /java-web-servlet-3.27/demo08
System.out.println(request.getRequestURL());// http://localhost:8080/java-web-servlet-3.27/demo01
//获取请求的类型 GET(用浏览器直接回车请求的都是get请求)
System.out.println(request.getMethod());
// 获取请求的路径(相对路径) /java-web-servlet-3.27
System.out.println(request.getContextPath());
2.获取请求中携带的参数
先写一个form表单
html代码:
java代码
// 参数是你提交表单时表单的name属性
String userName=request.getParameter("userName");
String userPwd=request.getParameter("userPwd");
System.out.println(userName+""+userPwd);
3.通过请求判断用户使用的浏览器
String header = request.getHeader("User-Agent");
//Firefox chrome
System.out.println(header);
if(header.toLowerCase().contains("firefox")) {
System.out.println("火狐");
}else if(header.toLowerCase().contains("chrome")) {
System.out.println("谷歌");
}else {
System.out.println("其他");
}