JavaWeb之Request&Response编程

这篇具有很好参考价值的文章主要介绍了JavaWeb之Request&Response编程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 servlet回顾

1.1 servlet

编写
1.编写实现类
	extends HttpServlet --> extends GenericServlet --> implements Servlet
	复写:doGet(HttpServletRequest,HttpServletResponse)、doPost
2.配置servlet,在web.xml文件配置(注册、映射)
<servlet>
  <servlet-name>
  <servlet-class>
<servlet-mapping>
  <servlet-name>
  <url-pattern>   
1.完全匹配:/a/b/c/xxxxx
2.不完全匹配: /xxx/*   --> /*
3.通配符匹配:*.xxx  (*.jsp、*.action等)
4.缺省路径: /   (tomcat为缺省路径配置一个servlet,用于处理html页面、图片等)

servlet生命周期 (servlet 单实例,多线程)
init(ServletConfig):只会执行一次,默认第一次访问,如果配置服务器启动(web.xml )
service(ServletRequest,ServletResponse):每请求一次,将执行一次。
destroy() 服务器正常关闭时,将执行一次。
使用细节
1.完成初始化操作:
复写init() , 此访问时GenericServlet提供的。
注意:如果复写 init(ServletConfig) 必须手动再方法体中 super.init(config)。否则空指针
2.获得当前servlet初始化参数
this.getInitParameter(“”) ; GenericServlet 实现 ServletConfig 提供4个便捷方法

3.获得ServletContext对象
this.getServletContext() GenericServlet提供便捷方法
this.getServletConfig().getServletContext() 获得GenericServlet缓存ServletConfig对象之后再操作。

1.2 ServletContext对象

一个web项目,只有一个ServletContext对象,此对象在服务器启动时tomcat创建,服务器关闭时tomcat销毁。
ServletContext对象 一般被称为:web项目的上下文对象。(servlet管理者)
api
1.web项目共享数据:xxxAttribute (set、get、remove)
2.获得系统初始化参数  getInitParameter(name)
	web.xml  <context-param><param-name><param-value>
3.获得web项目资源
	getRealPath("/WEB-INF/web.xml")  --> String  d:/tomcat/webapps/day07/WEB-INF/web.xml
	getResourceAsStream("")  InputStream

2 response对象

回顾 http协议 响应
http响应包括:响应行、响应头、响应体
oracle(sun) 根据http协议规定 servlet相应规范(java接口),tomcat根据规范编写实现类。
接口:javax.servlet.ServletResponse、javax.servlet.http.HttpServletResponse
ServletResponse servlet通用规范,与协议无关。
HttpServletResponse就是与http协议有关规范。(提供与http协议有关的api)
response对象:服务器响应给浏览器的描述对象。

2.1 响应行

setStatus(int sc)  设置状态码
例如:
setStatus(404)
setStatus(HttpServletResponse. SC_NOT_FOUND)

2.2 响应头

setHeader(java.lang.String name, java.lang.String value) 设置指定的头,一般常用。
例如:setHeader("location","http://www.itheima.com");
setDateHeader(java.lang.String name, long date) 设置时间的(new Date().getTime())
setIntHeader(java.lang.String name, int value) 设置整形
例如:setIntHeader("expires", 1000) 设置过期时间的(缓存页面时间),如果0表示不缓存。现代浏览器不好使。
2.2.1 页面跳转(重定向)
方式1:手动方案
response.setStatus(302)
response.setHeader("location","http://www.itheima.com");
方式2:使用api
response.sendRedirect("http://www.itheima.com")

2.3 响应体

提供字符流:PrintWriter getWriter()		--> 提供write() 和  print()
提供字节流:ServletOutputStream getOutputStream()  --> 提供write() 和print()
注意:所有的print()方法底层调用都是write()  --> 流最后只使用一个write(int )
	 
流的使用,一般情况下
如果发送的中文数据等,使用字符流。例如:一般内容 getWriter()
如果发送二进制数据(字节)等,使用字节流。例如:下载
一般情况,如果是流,必须关闭流。但servlet中如果使用可以不关闭。
如果没有关闭流,tomcat在请求结束时,将自动的关闭。
注意:response 的两个流不能同时使用。
2.3.1 中文乱码处理
    • 2.1 通知tomcat发送的数据编码 – 注意必须在使用流之前
  •  response.setCharacterEncoding("UTF-8");
    
  •  注意:只通知tomcat,但不控制浏览器行为
    
    • 2.2 通过tomcat和浏览器 --强制要求浏览器查看编码
  •  方式1:手动方案
    
  •  	response.setHeader("content-type", "text/html;charset=UTF-8");
    
  •  方式2:使用api【】
    
  •  	response.setContentType("text/html;charset=UTF-8");
    
    • 2.3 通知tomcat,在使用html通知浏览器 (html源码)
  •  注意:<meta>建议浏览器应该使用编码,不能强制要求。
    

2.4 response输出缓存

response中使用流向浏览器发送数据,首先数据将写入 数据流的缓存中,但缓存大小8k时,将自动刷新到浏览器。
	api使用
isCommitted()  缓存是否刷新过
flushBuffer() 手动的刷新 输出缓存
getBufferSize() 获得大小
resetBuffer() 清空缓存

3 request对象

回顾 http协议 请求
包含:请求行,请求头,请求体
oracle 根据 http协议,定义 request相应规范(接口),tomcat实现request规范
接口:javax.servlet.ServletRequest、javax.servlet.http.HttpServletRequest
浏览器发送请求,tomcat将创建 request和response 对象,传递doGet/doPost方法,方法体可以具体对象。

3.1 请求行

HttpServletRequest接口 提供 getMethod()  获得GET/POST 请求方式
路径访问

//实际访问路径 http://localhost:8080/day08/Demo05Servlet?username=jack&password=1234

	//1 统一资源标记符  。例如: /day08/Demo05Servlet
	String uri = request.getRequestURI();
	System.out.println(uri);
	
	//2统一资源定位符:例如:http://localhost:8080/day08/Demo05Servlet
	StringBuffer url = request.getRequestURL();
	System.out.println(url);
	//3 协议和版本 ,  例如: HTTP/1.1
	String protocol = request.getProtocol();
	System.out.println(protocol);
	//协议,例如: http
	String scheme = request.getScheme();
	System.out.println(scheme);
	
	//4 主机(域名) , 例如:localhost ,如果使用ip地址,就显示ip
	String serverName = request.getServerName();
	System.out.println(serverName);
	
	//5 端口 , 例如:8080
	int port = request.getServerPort();
	System.out.println(port);
	
	//6 发布到tomcat下的项目名称 【】
	String contextPath = request.getContextPath();
	System.out.println(contextPath);
	
	//7 servlet路径 , 例如:/Demo05Servlet【】
	String servletPath = request.getServletPath();
	System.out.println(servletPath);
	
	//8 所有请求参数,及?之后所有 ,例如: username=jack&password=1234
	String queryString = request.getQueryString();
	System.out.println(queryString);
	//9远程主机的ip地址【】
	String remoteAddr = request.getRemoteAddr();
	System.out.println(remoteAddr);

3.2 请求头

String getHeader(java.lang.String name) 获得指定头内容String【】
例如:request.getHeader("referer");
long getDateHeader(java.lang.String name) 获得指定头内容Date
int getIntHeader(java.lang.String name)  获得指定头内容int
Enumeration getHeaders(java.lang.String name) 获得指定名称所有内容

3.3 请求体–参数获取

请求参数:
get请求参数:http://localhost:8080/day08/Demo07Servlet?username=jack&password=1234
post请求参数: <form method="post"><input type="text" name="username">
String request.getParameter(String) 获得指定名称,一个请求参数值。
String[] request.getParameterValues(String) 获得指定名称,所有请求参数值。例如:checkbox、select等
Map<String , String[]> request.getParameterMap() 获得所有的请求参数。
map.key : 请求参数名称,map.value : 名称对应的所有参数值。
3.3.1 请求参数乱码
post请求和get请求,中文乱码处理方式不同。(不含tomcat8)
post 请求处理
request.setCharacterEncoding("UTF-8") 修改tomcat默认对请求体的编码方式
post请求内容存放请求体中,所以可以使用上面的api进行乱码处理。
get请求乱码处理
在获得数据的基础上,进行手动的编码。
new String(xxx.getBytes("ISO-8859-1") , "UTF-8")

3.4 属性操作

request 属性操作,服务器内部事情,浏览器时不知晓的。
Servlet 3作用域对象:ServletContext、ServletRequest、HttpSession
3个对象都提供xxxAttribute (set、get、remove)
如果要使用request属性,必须和“请求转发”结合使用。
request属性特定:在一次请求中共享数据。一次请求可以涉及页面个数:默认情况1个,使用请求转发多个。

4 RequestDispatcher 请求调度对象

请求调度:从当前servlet A,调度另一个servlet B(资源:html、servlet、jsp等)
在服务器内部,从一个servlet去执行另一个servlet,浏览器不知道的。
获取
ServletRequest.getRequestDispatcher(String path) 获得请求调度对象,如果/开头,表示web项目根(context root)
ServletContext.getRequestDispatcher(String path) 获得请求调度对象,必须以/开头,表示web项目根
ServletContext.getNamedDispatcher(java.lang.String) (了解)

例如:
当前servlet路径: http://localhost:8080/day08/a/b/Demo01Servlet
另一个servlet路径:http://localhost:8080/day08/a/b/Demo02Servlet

ServletRequest (常用)
request.getRequestDispatcher(“Demo02Servlet”)
request.getRequestDispatcher(“/a/b/Demo02Servlet”) --注意:没有day08 , (扩展:对比重定向)

ServletContext
this.getServletContext().getRequestDispatcher("/a/b/Demo02Servlet ")

api
forward(ServletRequest request, ServletResponse response) 请求转发
	A 转发 B,只输出B内容到浏览器。(如果A没有数据发送 response.isComitted = false,将清空缓存)
	请求转发只输出最后一个servlet内容
	如果 isCommitted = true ,在进行forward将抛异常。一般情况如果输出少量的数据,认为isCommitted=false
include(ServletRequest request, ServletResponse response)  请求包含
	A 包含 B,先输出A内容到浏览器,在输出B的内容到浏览器。
	请求包含,输出所有servlet 汇总后的内容。
应用场景
请求转发:第一个servlet处理数据,第二个servlet显示数据 -- MVC软件设计模式
	思想:处理与显示相分离

AServlet{
//处理
** 使用dom4j 查询所有数据
List allBook = …
//将数据存request属性中(request作用域: 数据的作用范围)
request.setAttribute(“allBook”,allBook);
//请求转发
request.getRequestDispatcher(“Bservlet”).forward(1,2);
}

BServlet{
// 获得request属性中数据 – 此数据从服务器获得
List allBook = (List)request.getAttribute(“allBook”); //注意:request.getParameter(“”) 从浏览器
//显示
}

总结:
1.web项目根:(context root)
开发:G:\Workspaces\hei16\day08\WebRoot
运行:D:\java\tomcat\apache-tomcat-7.0.53\webapps\day08
2. web站点根:
运行:D:\java\tomcat\apache-tomcat-7.0.53\webapps
3.编码
页面(html、jsp)、servlet 请求和响应 编码 必须保持一致。
一般情况下:servlet开始2段内容
request.setCharacterEncoding(“UTF-8”);
response.setContentType(“text/html;charset=UTF-8”);
4.请求转发特点
* 请求路径没有改变,但可以涉及服务器端多个资源(你和媳妇)
* 可以在一次请求中,共享request作用域的数据。
* 一次请求,使用请求转发,tomcat将创建两个request,和一个response对象
两个request对象数据相同的(可以理解成对象被克隆了)文章来源地址https://www.toymoban.com/news/detail-499682.html

到了这里,关于JavaWeb之Request&Response编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java Web 项目入门指南(http、Servlet、Request、Response、ServletContext、会话技术[cookie、session]、Filter、Listener)

    web 服务器 :可以被浏览器访问到的服务器 常见的 web 服务器: tomcat:中小型的服务器软件,免费开源,支持 JSP 和 Servlet apache 公司的产品 WebLogic:Oracle 公司的产品,是目前应用最广泛的 Web 服务器,支持 J2EE 规范。WebLogic 是用于开发、集成、部署和管理大型分布式 Web 应用

    2024年02月02日
    浏览(81)
  • IDEA项目实践——JavaWeb简介以及Servlet编程实战

    IDEA项目实践——创建Java项目以及创建Maven项目案例、使用数据库连接池创建项目简介 IDEWA项目实践——mybatis的一些基本原理以及案例 IDEA项目实践——动态SQL、关系映射、注解开发 IDEA项目实践——Spring框架简介,以及IOC注解 IDEA项目实践——Spring当中的切面AOP IDEA项目实践—

    2024年02月13日
    浏览(48)
  • Request和Response应用

    ServletRequest应用 ServletRequest应用非常广泛,下面是一些例子: 获取请求参数:可以使用HttpServletRequest的getParameter()方法获取请求参数。 获取请求头信息:可以使用HttpServletRequest的getHeader()方法获取请求头信息。 获取Session对象:使用HttpServletRequest的getSession()方法可以获取HttpS

    2024年02月02日
    浏览(44)
  • Request+Response

    Request+Response Request是请求对象,Response是响应对象 request: 获取请求数据 浏览器会发送HTTP请求到后台服务器[Tomcat] HTTP的请求中会包含很多请求数据[请求行+请求头+请求体] 后台服务器[Tomcat]会对HTTP请求中的数据进行解析并把解析结果存入到一个对象中 所存入的对象即为reques

    2024年02月12日
    浏览(45)
  • Request Response详解

    1.1.1 关于响应 响应,它表示了服务器端收到请求,同时也已经处理完成,把处理的结果告知用户。简单来说,指的就是服务器把请求的处理结果告知客户端。在B/S架构中,响应就是把结果带回浏览器。 响应对象,顾名思义就是用于在JavaWeb工程中实现上述功能的对象。 1.1.2

    2024年02月04日
    浏览(76)
  • Request对象和response对象

           request对象和response对象是通过Servlet容器(如Tomcat)自动创建并传递给Servlet的。 Servlet容器负责接收客户端的请求,并将请求信息封装到request对象中,然后将request对象传 递给相应的Servlet进行处理。类似地,Servlet容器会创建一个response对象,并将其传递给 Servlet,用于

    2024年02月11日
    浏览(34)
  • JavaWeb期末大作业 Javaweb项目 Javaweb Servlet html

    1.进入之后是一个分页查询所有数据的内容  该页面有基础的增删改查  还有分页查询  批量删除  进行条件查询  有什么不对的地方欢迎提出  谢谢  2.增删改查 1.添加 添加成功 2.删除  将刚才添加的OPPO删除 3.修改     4.查询的话就是主页查询所有  页面所用的是分页查询

    2024年02月10日
    浏览(42)
  • 一篇博客上手request和response

    request:获取请求数据 response:设置响应数据 ServletRequest——Java提供的请求对象根接口 HttpServletRequest——Java提供的对http协议封装的请求对象接口 RequestFacade——tomcat实现定义类 请求转发(forward):一种在服务器内部的资源跳转方式。 请求转发特点: 浏览器地址栏路径不发

    2023年04月19日
    浏览(43)
  • Servlet-Request

    一、预览 在上一篇Servlet体系结构中,我们初步了解了怎么快速本篇将介绍Servlet中请求Request的相关内容,包括Request的体系结构,Request常用API。 二、Request体系结构 我们注意到我们定义的Servlet类若实现Servlet接口时,请求参数是ServletRequest类型的,若继承HttpServlet抽象类时,请

    2024年02月02日
    浏览(36)
  • [SpringBoot] 8. aop 获取 request response

    最近开发有一个需求需要在 aop 中获取request response ,搜索许久没有答案,故此记录📝~

    2024年02月07日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包