Tomcat
1、JavaWeb的概念
1、什么是JavaWeb?
1、JavaWeb是指,所有通过Java语言编写可以通过浏览器访问的程序的总称,叫JavaWeb。
2、JavaWeb是基于请求和响应来开发的。
2、什么是请求?
1、请求是指客户端给服务器发送数据,叫请求Request
3、什么是响应?
响应是指服务器给客户端回传数据,叫响应Response
4、请求和响应的关系
请求和响应是承兑出现的,有请求就有响应。
2、Web资源的分类
1、web资源按实现的技术和呈现的效果的不同,又分为静态资源和动态资源两种。
2、静态资源:html、css、js、txt、mp4视频、jpg图片
3、动态资源:jsp页面、Servlet程序
3、常用的Web服务器
1、Tomcat:由Apache组织提供的一种Web服务器,提供对jsp和Servlet的支持。它是一种轻量级的JavaWeb容器(服务器),也是当前应用最广的JavaWeb服务器(免费)
2、Jboss:是一个遵从JavaEE规范的、开源代码的、纯java的EJB服务器,它支持所有的JavaEE规范(免费)
3、GlassFlsh:由Oracle公司开发的一款JavaWeb服务器,是一款强健的商业服务器,达到产品级质量(应用很少)
4、Resin:是CAUCHO公司的产品,是一个非常流行的服务器,对Servlet和JSP提供了良好的支持,性能也比较优良,resin自身采用Java语言开发(收费、应用比较多)
5、WebLogic:是Oracle公司的产品,是目前应用最广泛的Web服务器,支持JavaEE规范,而且不断的完善以适应新的开发要求,适合大型项目(收费,用的不多,适合大公司)。
4、Tomcat服务器和Servlet版本的对应关系
1、当前企业常用的版本7.或8.
Tomcat版本 | Servlet/JSP版本 | JavaEE版本 | 运行环境 |
---|---|---|---|
4.1 | 2.3/1.2 | 1.3 | JDK1.3 |
5.0 | 2.4/2.0 | 1.4 | JDK1.4 |
5.5/6.0 | 2.5/2.1 | 5.0 | JDK5.0 |
7.0 | 3.0/2.2 | 6.0 | JDK6.0 |
8.0 | 3.1/2.3 | 7.0 | JDK7.0 |
2、Servlet程序从2.5版本是现在市面使用最多的版本(xml配置)
到了Servlet3.0之后,就是注解版本的Servlet使用。
5、Tomcat的使用
1、安装
找到需要用的Tomcat版本对应的zip压缩包,解压到需要安装的目录即可
2、目录介绍
1、bin:专门用来存放Tomcat服务器的可执行程序
2、conf:专门用来存放Tomcat服务器的配置文件
3、lib:专门用来存放Tomcat服务器的jar包
4、logs:专门用来存放Tomcat服务器运行时输出的日志信息
5、temp:专门用来存放Tomcat服务器运行时产生的临时数据
6、webapps:专门用来存放部署的Web工程。
7、work:是Tomcat工作时的目录,用来存放Tomcat运行时jsp翻译为Servlet的源码,和Session钝化的目录。
3、如何启动Tomcat服务器?
1、找到Tomcat目录下的bin目录下的start.bat文件,双击打开就可以启动服务器
2、如何测试成功?
*打开浏览器输入http://localhost:8080/
*如果出现Tomcat界面即启动成功
4、常见的启动失败的情况,双击start.bat文件,就会出现一个黑窗口一闪而退
1、原因:未配置好JAVA_HOME环境变量
5、常见的JAVA_HOME配置错误有以下几种情况:
1、JAVA_HOME必须全大写
2、JAVA_HOME中间必须是下划线,不是减号
3、JAVA_HOME配置的路径只需要配置到jdk的安装目录,不需要带上bin目录
6、另一种启动服务器的方式
1、打开命令行
2、cd到Tomcat的bin目录下
3、敲入启动命令:catalina run
7、Tomcat的停止
1、点击Tomcat服务器窗口的x关闭按钮
2、把Tomcat服务器窗口置为当前窗口,然后按快捷键Ctrl+C
3、找到Tomcat的bin目录下的shutdown.bat双击,就可以停止Tomcat服务器。
8、如何修改Tomcat的端口号?
1、MySQL默认的端口号是:3306
2、Tomcat默认的端口号是8080
3、修改:找到Tomcat目录下的conf目录,找到server.xml配置文件打开。
平时上百度:http://www.baidu.com:80
HTTP协议默认端口号是80.
9、如何部署web工程到Tomcat中
1、第一种方法:只需要web工程的目录拷贝到Tomcat的webapps目录下即可
*在webapps目录下创建一个新项目文件夹
*把web项目的内容拷贝到里面:
2、如何访问Tomcat下的web工程。
只需要在浏览器打开输入
http://localhost:8080/项目名/网页名
2、第二种部署方法:
找到Tomcat的conf目录\Catalina\localhost\下,创建配置文件.xml
<!--Context表示一个工程的上下文
path表示工程访问路径:/abc
docBase表示你的工程目录在哪里
-->
<context path="/abc" docBase="E:\book"/>
上面为文件内容,文件名称不能为中文
10、手拖html页面到浏览器和在浏览器中输入http://ip:端口号/工程名/访问的区别:
11、ROOT的工程的访问,以及默认index.html页面的访问
当我们在浏览器地址栏输入的访问地址如下:
http://ip:port/ 没有工程名的时候默认访问的是Tomcat目录下的ROOT工程
当我们在浏览器地址栏中输入的访问地址如下:
http://ip:port/工程名/ 没有资源名的时候,默认访问index.html页面
6、IDEA整合Tomcat服务器
7、IDEA中动态web工程的操作
1、IDEA中如何创建动态web工程
1、创建一个新模块
2、选择你要创建什么类型的功能模块
3、输入模块名,点击finish
2、web工程的目录介绍
3、如何给动态web工程添加额外的jar包
在WEB-INF目录下新建一个lib目录
将依赖jar包复制到目录下
在项目模块的库中新建一个库
在工件中修正依赖
4、如何在IDEA中部署工程到Tomcat上运行
1、建议修改每个web工程对应的tomcat运行实例名称
2、确认你的tomcat实例中有你要部署运行的web工程模块
3、修改运行时的地址,端口号...
4、在idea中如何运行和停止tomcat实例
与普通程序一样。
5、配置资源热部署
选择:更新类和资源
Servlet
1、Servlet技术
1、什么是Servlet?
1、Servlet是JavaEE规范之一,规范就是接口。
2、Servlet是JavaWeb三大组件之一,三大组件分别是:Servlet程序、Filter过滤器、Listener监听器
3、Servlet是运行在服务器上的一个java小程序,它可以接受客户端发送过来的请求,并响应数据给客户端。
2、手动实现Servlet程序
1、编写一个类去实现Servlet接口
2、实现service方法,处理请求,并响应数据
3、到web.xml中去配置Servlet程序的访问地址
<!--servlet标签给tomcat服务器配置Servl程序-->
<servlet>
<!--servlet-name标签是Servlet程序起的一个别名-->
<servlet-name>HelloServlet</servlet-name>
<!--全类名-->
<servlet-class>com.lxg.servlet.HelloServlet</servlet-class>
</servlet>
<!--servlet-mapping标签给程序配置访问地址-->
<servlet-mapping>
<!--servlet-name标签的作用是告诉服务器,我当前配置的地址给哪个Servlet程序使用-->
<servlet-name>HelloServlet</servlet-name>
<!--url-patten配置访问地址
/斜杠在服务器解析的时候,表示地址为:http://ip:port/工程路径
/hello 表示地址为http://ip:port/工程路径/hello-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
3、常见的错误:
1、url-pattern中配置路径没有以斜杠打头
2、servlet-name配置的值不存在
3、servlet-class标签的全类名配置错误
4、原理:
5、Servlet的生命周期
1、执行Servlet构造器方法
2、执行init初始化方法
第一和第二步是在第一次访问的时候创建Servlet程序时会调用,只调用一次
3、执行service方法
第三步,每次访问都会调用
4、执行destroy销毁方法
第四步,在web工程停止的时候调用
6、GET和POST请求的分发处理
package com.lxg.servlet;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
public class HelloServlet implements Servlet {
public HelloServlet() {
System.out.println("1 构造器");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("2 init初始化");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
/**
* service方法是专门来处理请求和响应的
* @param servletRequest
* @param servletResponse
* @throws ServletException
* @throws IOException
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("3 service==HelloServlet被访问了");
//类型转换(因为它有getMethod方法)
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
String method = httpServletRequest.getMethod();
if("GET".equals(method)){
doGet();
}else if("POST".equals(method)){
doPost();
}
}
/*
*处理post
*/
public void doPost(){
System.out.println("post请求1");
System.out.println("post请求2");
}
public void doGet(){
System.out.println("get请求1");
System.out.println("get请求2");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("4 销毁方法");
}
}
7、通过继承HttpServlet实现Servlet程序
一般在时机项目开发中,都是使用继承HttpServlet类的方式去实现Servlet程序。
1、编写一个类去继承HttpServlet类
2、根据业务需要重写doGet或doPost方法
3、到web.xml中的配置Servlet程序的访问地址。
类:
package com.lxg.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class HelloServlet2 extends HttpServlet {
/**
* doGet()在get请求的时候调用
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet2的doGet请求");
}
/**
* doPost()在post请求的时候调用
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet2的doPost请求");
}
}
配置文件:
<servlet>
<servlet-name>HelloServlet2</servlet-name>
<servlet-class>com.lxg.servlet.HelloServlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet2</servlet-name>
<url-pattern>/hello2</url-pattern>
</servlet-mapping>
8、使用IDEA创建Servlet程序
1、new->Servlet程序
2、配置Servlet信息
9、Servlet类的继承体系
2、ServletConfig类
ServletConfig类从类名上来看,就知道是Servlet程序的配置信息类。
Servlet程序和ServletConfig对象都是由Tomcat负责创建的,我们只负责使用。
Servlet程序默认是第一次访问的时候创建,ServletConfig是每个Servlet程序创建时,就创建一个对应的ServletConfig对象。
1、ServletConfig类的三大作用
1、可以获取Servlet程序的别名servlet-name的值
2、获取初始化参数init-param
3、获取ServletContext对象
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("2 init初始化");
// 1、可以获取Servlet程序的别名servlet-name的值
System.out.println("HelloServlet程序的别名是:"+servletConfig.getServletName());
// 2、获取初始化参数init-param
System.out.println("初始化参数username的值是:"+servletConfig.getInitParameter("username"));
System.out.println("初始化参数url的值是:"+servletConfig.getInitParameter("url"));
// 3、获取ServletContext对象
System.out.println("ServletContext对象是:"+servletConfig.getServletContext());
}
3、ServletContext类
1、什么是ServletContext?
1、ServletContext是一个接口,它表示Servlet上下文对象
2、一个Web工程,只有一个ServletContext对象实现。
3、ServletContext对象是一个域对象。
4、ServletContext是在web工程部署启动的时候创建,在web工程停止的时候销毁的。
什么是域对象?
1、域对象,是可以像Map一样存取数据的对象,叫做域对象
2、这里的域指的是存取数据的操作范围,整个web工程
存数据 | 取数据 | 删除数据 | |
---|---|---|---|
Map | put() | get() | remove() |
域对象 | setAttribute() | getAttribute() | removeAttribute() |
2、ServletContext类的四个作用
1、获取web.xml中配置的上下文参数context-param
2、获取当前的工作路径格式:/工程路径
3、获取工程部署后在服务器硬盘上的绝对路径
4、像Map一样存取数据
package com.lxg.servlet;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
public class ContextServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1、获取web.xml中配置的上下文参数context-param
ServletContext context = getServletConfig().getServletContext();
String username = context.getInitParameter("username");
System.out.println("context-param参数username的值是:"+username);
String password = context.getInitParameter("password");
System.out.println("context-param参数password的值是:"+password);
// 2、获取当前的工作路径格式:/工程路径
System.out.println("当前工程路径:"+context.getContextPath());
// 3、获取工程部署后在服务器硬盘上的绝对路径
/*
* / 斜杠被服务器解析地址为http://ip:port/工程名/ 映射到IDEA代码的web目录
*/
System.out.println("工程部署的路径是:"+context.getRealPath("/"));
System.out.println("工程下css目录的绝对路径是:"+context.getRealPath("/css"));
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
<!--context-param是上下文参数(它属于整个web工程)-->
<context-param>
<param-name>username</param-name>
<param-value>context</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>root</param-value>
</context-param>
4、Http协议
1、什么是Http协议
1、什么是协议?
协议就是指双方,或多方,相互约定好,大家都需要遵守的规则,叫协议
2、所谓Http协议就是指客户端和服务器之间通信时,发送的数据,需要遵守的规则,叫Http协议
3、Http协议中的数据又叫报文。
2、请求的Http协议格式
1、客户端给服务器发送数据叫请求
2、服务器给客户端回传数据叫响应
3、请求又分GET请求和POST请求两种。
1、GET请求
(1)请求行
*请求的方式 GET
*请求的资源路径[+?+请求参数]
*请求的协议的版本号 HTTP/1.1
(2)请求头
*key:value 组成,不同的键值对,表示不同的含义
2、POST请求
(1)请求行
*请求的方式 POST
*请求的资源路径[+?+请求参数]
*请求的协议的版本号
(2)请求头
*key:value 不同的请求头,有不同的含义
空行
(3)请求体
就是发送给服务器的数据
3、常用请求头的说明
Accept:表示客户端能够接受的数据类型
Accept—Language:表示客户端可以接收的语言类型
User-Agent:表示客户端浏览器的信息
Host:表示请求时的服务器ip和端口号
4、哪些是GET请求和POST请求?
GET请求有哪些?
1、form标签 method=get
2、a标签
3、link标签引入css
4、Script 标签引入js文件
5、img标签引入图片
6、iframe标签引入html页面
7、在浏览器地址栏中输入地址后回车
POST请求有哪些?
1、form标签 method=post
5、响应的HTTP协议格式
1、响应行
*响应的协议和版本号
*响应状态码
*响应状态描述符
2、响应头
*key:value 不同的响应头,有不同的含义
空行
3、响应体
*就是回传给客户端的数据
6、常用的响应码说明
200 表示请求成功
302 表示请求重定向
404 表示请求服务器已经收到了,但是你要的数据不存在(请求地址错误)
500 表示服务器已经收到请求,但是服务器内部错误(代码错误)
7、MIME类型说明
MIME是HTTP协议中的数据类型
MIME的英文全称是“Multipurpose Internet Mall Extensions”多功能Internet邮件扩充服务。MIME类型的格式是“大类型/小类型”,并与一种文件的扩展名相对应。
常见的MIME类型:
文件 | MIME类型 |
---|---|
超文本标记语言文本 | .html htm text/html |
普通文本 | .txt text/plain |
RTF文本 | .rtf application/trf |
GIF图形 | .gif image/gif |
JPEG图形 | .jpeg .jpg image/jpeg |
au声音文件 | .au audio/base |
MIDI音乐文件 | mid,.midi audio/midi,audio/x-midi |
RealAudio音乐文件 | .ra .ram audio/x-pn-realaudio |
MPEG文件 | .mpg .mpeg video/mpeg |
AVI文件 | .avi video/x-msvideo |
GZIP文件 | .gz application/x-gzip |
TAR文件 | .tar application/x-tar |
8、谷歌浏览器如何查看Http协议?
5、HttpServletRequest类
1、HttpServletRequest类有什么作用?
每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的Http协议信息解析好封装到Request对象中,然后传递到service方法(doGet和doPost)中给我们使用。我们可以通过HttpServletRequest对象,获取到所有请求的信息。
2、HttpServletRequest类的常用方法
1、getRequestURI()获取请求的资源路径
2、getRequestURL()获取请求的统一资源定位符(绝对路径)
3、getRemoteHost()获取客户端的ip地址
4、getHeader()获取请求头
5、getParameter()获取请求的参数
6、getParameterValues()获取请求的参数(多个值的时候使用)
7、getMethod()获取请求的方式(GET或POST请求)
8、setAttribute(key,value);设置域数据
9、getAttribute(key);获取域数据
10、getRequestDispatcher()获取请求转发对象
package com.lxg.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class RequestAPIServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1、getRequestURI()获取请求的资源路径
System.out.println("URI=>"+req.getRequestURI());
// 2、getRequestURL()获取请求的统一资源定位符(绝对路径)
System.out.println("URL=>"+req.getRequestURL());
//默认是127.0.0.1,浏览器输入真实ip就是真实ip地址
// 3、getRemoteHost()获取客户端的ip地址
System.out.println("客户端ip地址=>"+req.getRemoteHost());
// 4、getHeader()获取请求头
System.out.println("请求头user-Agent=>"+req.getHeader("user-Agent"));
// 7、getMethod()获取请求的方式(GET或POST请求)
System.out.println("请求的方式=>"+req.getMethod());
}
}
URI=>/07_servlet/requestAPIServlet
URL=>http://192.168.171.1:8080/07_servlet/requestAPIServlet
客户端ip地址=>192.168.171.1
请求头user-Agent=>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36
请求的方式=>GET
3、如何获取请求参数?
package com.lxg.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Array;
import java.util.Arrays;
public class ParameterServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求参数
System.out.println("======Get======");
String username = req.getParameter("username");
String password = req.getParameter("password");
String hobbies[] = req.getParameterValues("hobby");
System.out.println("用户名:"+username);
System.out.println("密码:"+password);
System.out.println("兴趣爱好:"+ Arrays.toString(hobbies));
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置请求体的字符集为utf-8,从而解决post请求的中文乱码问题
//要在全部获取请求参数之前用才会生效
req.setCharacterEncoding("UTF-8");
System.out.println("======doPost======");
//获取请求参数
String username = req.getParameter("username");
String password = req.getParameter("password");
String hobbies[] = req.getParameterValues("hobby");
System.out.println("用户名:"+username);
System.out.println("密码:"+password);
System.out.println("兴趣爱好:"+ Arrays.toString(hobbies));
}
}
4、请求的转发
1、什么是请求的转发?
请求转发是指,服务器收到请求后,从一次资源跳转到另一个资源的操作叫做请求转发。
package com.lxg.servlet;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class Servlet1 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求的参数(办事材料)查看
String username = req.getParameter("username");
System.out.println("在Servlet1(柜台1)查看参数(材料):"+username);
//给材料盖一个章,并传递到Servlet2(柜台2)去查看
req.setAttribute("key1","柜台1的章");
//问路:Servlet2(柜台2)怎么走
/**
* 请求转发必须以斜杠 / 打头,斜杠表示地址为http:ip:port/工程名/,映射到IDEA代码的web目录下
*/
RequestDispatcher requestDispatcher = req.getRequestDispatcher("/servlet2");
//走向servlet2(柜台2)
requestDispatcher.forward(req,resp);
}
}
package com.lxg.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class Servlet2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求的参数(办事材料)查看
String username = req.getParameter("username");
System.out.println("在Servlet2(柜台2)查看参数(材料):"+username);
//查看柜台1是否有盖章
Object key1 = req.getAttribute("key1");
System.out.println("柜台1是否有章:"+key1);
//处理自己的业务
System.out.println("Servlet处理自己的业务");
}
}
不能访问工程以外的资源
5、base标签的作用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--base标签设置页面相对路径工作时参照地址
href属性就是参数的地址值
-->
<base href="http://localhost:8080/07_servlet/a/b/c/c.html">
</head>
<body>
这是a下的b下的c.html页面<br/>
<a href="../../../index.html">跳回首页</a>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
这是web下的index.html<br/>
<a href="a/b/c/c.html">a/b/c/c.html</a><br/>
<a href="http://localhost:8080/07_servlet/forwardC">请求转发:a/b/c/c.html</a>
</body>
</html>
package com.lxg.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class ForwardC extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("经过了程序wardC");
req.getRequestDispatcher("/a/b/c/c.html").forward(req,resp);
}
}
6、web中的相对路径和绝对路径
在javaweb中,路径分为相对路径和绝对路径两种:
相对路径是:
. 表示当前目录
.. 表示上一级目录
资源名 表示当前目录/资源名
绝对路径:
http://ip:port/工程路径/资源路径
7、web中 / 斜杠 的不同意义
在web中斜杠是一种绝对路径
/ 斜杠 如果被浏览器解析,得到的地址是:http://ip:port/
<a href="/"斜杠</a>
/ 斜杠 如果被服务器解析,得到的地址是:http://ip:port/工程名
1、<url-pattern>/servlet1</url-pattern>
2、servletContext.getRealPath("/");
3、request.getRequestDispatcher("/");
特殊情况:
response.sendRediect("/");把斜杠发送给浏览器解析,得到http://ip:port/
6、HttpServletResponse类
1、HttpServletResponse类的作用
HttpServletResponse类和HttpServletResponse类一样,每次请求进来,Tomcat服务器都创建一个Response对象传递给Servlet程序去使用,HttpServletRequest表示请求过来的信息,HttpServletResponse表示所有响应的信息。
我们如果需要设置返回给客户端的信息,都可以通过HttpServletResponse对象来进行设置。
2、两个输出流的说明。
1、字节流 getOutputStream();常用于下载(传递二进制数据)
2、字符流 getWriter();常用于回传字符串(常用)
3、两个流同时只能使用一个,使用了字节流就不能再使用字符流,反之亦然,否则就会报错。
3、如何往客户端回传数据
要求:往客户端回传字符串数据
4、响应中文乱码的问题
package com.lxg.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class ResponseIOServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//System.out.println(resp.getCharacterEncoding());//默认ISO-8859-1
//设置服务器字符集为UTF-8
// resp.setCharacterEncoding("UTF-8");
//通过响应头,设置浏览器也使用UTF-8字符集
// resp.setHeader("Content-type","text/html;charset-UTF-8");
//它会同时设置服务器和客户端都使用UTF-8字符集,还设置了响应头
//此方法一定要在获取流对象之前调用才有效
resp.setContentType("text/html;charset=UTF-8");
System.out.println(resp.getCharacterEncoding());//默认ISO-8859-1
//要求:往客户端回传字符串数据
PrintWriter writer = resp.getWriter();
writer.write("小林加油!");
}
}
5、请求重定向
请求重定向是指客户端给服务器发请求,如何服务器告诉客户端说,我给你一些地址,你去新地址访问,叫请求重定向(因为之前的地址可能已经被废弃)
第一种方案
//设置响应状态码为302,表示重定向(已搬迁)
resp.setStatus(302);
resp.setHeader("Location","http://localhost:8080/07_servlet/response2");
第二种方案(推荐使用)
resp.sendRedirect("http://baidu.com");
标签:请求,Tomcat,Servlet,println,import,servlet,out
From: https://www.cnblogs.com/SilverStar/p/17415190.html