萌新学Java之崭露头角----转发请求响应

ServletConfig(Servlet配置信息)

  • 配置信息需要在web.xml进行配置
  • 是以键值对形式进行配置 key=value
  • 在Servlet初始化时配置
注意:
  • 1.每个Servlet都有一个属于自己的ServletConfig对象
  • 2.ServletConfig对象内部维护一个map集合

public class Demo02 extends HttpServlet {
//获取方式1
//声明成员变量来保存ServletConfig
private ServletConfig config;

//初始化Servlet配置信息
@Override
public void init(ServletConfig config) throws ServletException {
	// TODO Auto-generated method stub
	super.init(config);
	//接收参数中的配置对象
	this.config = config;
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	//fun1();
	//通过父类中的方法 直接获取ServletConfig对象
	ServletConfig servletConfig = this.getServletConfig();
	String value = servletConfig.getInitParameter("wanglong");
	System.out.println(value);
}
private void fun1() {
	// 获取servletconfig对象中的初始值
	String value = this.config.getInitParameter("wanglong");
	System.out.println(value);
	Enumeration<String> keys = this.config.getInitParameterNames();
	while(keys.hasMoreElements()){
		String key = keys.nextElement();
		System.out.println(key + " = " + this.config.getInitParameter(key));
	}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	// TODO Auto-generated method stub
	doGet(request, response);
}}

注意:

在web.xml文件中配置路径方式
1.使用绝对路径 /demo01 (常用)
2.使用匹配后缀 .后缀名 .action
3.直接使用 /
匹配 只要是工程下 都能访问到
4.注意:2/3 不要放在一起使用 /
.action
5.直接使用 / 匹配
注意:/匹配 一般不使用 系统默认使用的是/匹配

域对象

  • 在一定范围内有效的对象
  • ServletContext(application域)
  • 作用范围(最大范围的域对象):
  • 当期工程都有效 并且整个工程有且只有一个ServletContext对象
  • 相当于一个单例对象

注意: 所有的域对象都有共同的特点 内部维护了一个map集合

所有域对象共有的方法:
  • 1.setAttribute
  • 2.getAttribute
  • 3.removeAttribute

域对象的作用

  • 1.存值取值
  • 2.进行单例传值
  • 3.可以获取全局配置信息 web.xml
  • 4.可以获取项目中所有资源在服务器上的绝对路径 getRealPath
  • 5.可以进行请求转发

//获取Context域方式1
//可以通过ServletConfig对象获取
ServletContext application = this.getServletConfig().getServletContext();
//存值
application.setAttribute(“name”, “wanglong”);
System.out.println(“存值”);
//取出全局配置信息
String value = application.getInitParameter(“dajun”);
System.out.println(value);

//获取Context域方式2
ServletContext application = this.getServletContext();
//获取服务器上的真实路径
//参数:使用服务器上相对于项目的相对路径
// / 表示服务器上项目名后面的斜杆
String path1 = application.getRealPath("/WEB-INF/classes/a.properties");
System.out.println(path1);

	//读取文件 打印value
	FileInputStream fis = new FileInputStream(path1);
	Properties properties = new Properties();
	properties.load(fis);
	System.out.println(properties.getProperty("key"));
	fis.close();

利用Context域 进行请求转发 demo06转发给demo07

  ServletContext application = this.getServletContext();
	//获取请求转发器
	//参数:转发的路径
	//注意:请求转发	只能转发站内的路径
	//			并且传入的地址    相对于工程
	//请求转发注意:
	//		1.请求转发用户只发送了一次请求
	//      2.网址没有发生变化(用户并不知道内部你怎么操作的)
	//      3.只能转发站内
	RequestDispatcher dispatcher = application.getRequestDispatcher("/demo07");
	//发送转发请求
	dispatcher.forward(request, response);

响应(response 响应回浏览器(用户))

响应行
  •  响应状态码 200(成功) 302(重定向) http协议1.1
    
响应头
  •  转给浏览器 下一步操作     
    
响应体
  •  响应的内容
    
  //TomCat默认的编码格式  iso-8859-1
	response.setCharacterEncoding("UTF-8");
	//设置响应头  告诉浏览器 以什么编码格式来解析响应
response.setHeader("Content-type", "text/html;charset=UTF-8");
	//相当于上面两句二合一
	response.setContentType("text/html;charset=UTF-8");
	//利用response获取 字符流 和 字节流
	
	PrintWriter writer = response.getWriter();
	writer.write("张三");

下载图片

  //设置响应头 来告诉浏览器 资源用于下载
	// content-disposition attachment;filename=
	//response.setContentType("png/html");
	//获取图片在服务器上的真实路径
	ServletContext application = this.getServletContext();
	String path = application.getRealPath("/WEB-INF/classes/哈哈.png");
	File file = new File(path);
	String fileName = file.getName();
	//设置图片名的编码格式 iso-8859-1
	fileName = new String(fileName.getBytes(), "iso-8859-1");
	response.setHeader("content-disposition", "attachment;filename=" + fileName);
	//设置下载内容的格式(去web.xml中查找资源后缀的格式)
	response.setHeader("content-type", "image/png");
	//读取字节流图片
	FileInputStream fis = new FileInputStream(path);
	//使用响应中的字节流 将图片写回浏览器
	
	ServletOutputStream sos = response.getOutputStream();
	
	//PrintWriter writer = response.getWriter();
	byte[] b = new byte[1024];
	int len = 0;
	while ((len = fis.read(b)) != -1) {
		sos.write(b, 0, len);
	}
	fis.close();

通过响应response 请求重定向

	//可以进行站内重定向    相对于8080后的斜杠(需要带上工程名)
	//response.setHeader("location", "/sh-web-02/demo11");
	//可以进行站外重定向
	response.setHeader("location", "http://www.baidu.com");
	//添加重定向的状态码
	response.setStatus(302);
	//注意:
	//1.重定向 发送两次请求(网址变了)
	//2.重定向 会执行完第一次请求的方法 在进行第二次请求
3秒后 刷新页面(刷新头)
	response.setHeader("refresh", "3;url=http://www.baidu.com");
	//每个一秒 刷新界面
	response.setIntHeader("refresh", 1);
	//回写数据测试
	PrintWriter writer = response.getWriter();
	writer.write(Math.random() + "");

request(请求)

	//获取请求的方式(get/post)
	String method = request.getMethod();
	System.out.println(method);
	//获取用户请求的URL(统一资源定位符)
	StringBuffer url = request.getRequestURL();
	System.out.println(url);
	//获取用户请求的URI(统一资源标识符)
	String uri = request.getRequestURI();
	System.out.println(uri);
	//获取相对路径 /sh-web-02(工程名)
	String path = request.getContextPath();
	System.out.println(path);

获取用户请求的参数

	//参数: 传入相当于key
	//http://localhost:8080/sh-web-02/demo12?username=wanglong
	String username = request.getParameter("username");
	String password = request.getParameter("password");
	System.out.println(username);
	System.out.println(password);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值