首页 > 其他分享 >Tomcat&Servlet

Tomcat&Servlet

时间:2023-05-19 15:11:57浏览次数:31  
标签:请求 Tomcat Servlet println import servlet out

Tomcat

1、JavaWeb的概念

1、什么是JavaWeb?

1、JavaWeb是指,所有通过Java语言编写可以通过浏览器访问的程序的总称,叫JavaWeb。
2、JavaWeb是基于请求和响应来开发的。

2、什么是请求?

1、请求是指客户端给服务器发送数据,叫请求Request

3、什么是响应?

响应是指服务器给客户端回传数据,叫响应Response

4、请求和响应的关系

请求和响应是承兑出现的,有请求就有响应。

image-20220524222725474

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配置文件打开。

image-20220525092141148

平时上百度: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:端口号/工程名/访问的区别:

image-20220525094120595

11、ROOT的工程的访问,以及默认index.html页面的访问

当我们在浏览器地址栏输入的访问地址如下:
http://ip:port/   没有工程名的时候默认访问的是Tomcat目录下的ROOT工程
当我们在浏览器地址栏中输入的访问地址如下:
http://ip:port/工程名/  没有资源名的时候,默认访问index.html页面

6、IDEA整合Tomcat服务器

image-20220525095550094

7、IDEA中动态web工程的操作

1、IDEA中如何创建动态web工程

1、创建一个新模块
2、选择你要创建什么类型的功能模块
3、输入模块名,点击finish

2、web工程的目录介绍

image-20220525131433244

3、如何给动态web工程添加额外的jar包

在WEB-INF目录下新建一个lib目录

将依赖jar包复制到目录下

在项目模块的库中新建一个库

image-20220525133507959

在工件中修正依赖

4、如何在IDEA中部署工程到Tomcat上运行

1、建议修改每个web工程对应的tomcat运行实例名称
2、确认你的tomcat实例中有你要部署运行的web工程模块

image-20220525144102567

3、修改运行时的地址,端口号...

image-20220525144528082

4、在idea中如何运行和停止tomcat实例
与普通程序一样。

5、配置资源热部署

image-20220525145542189

选择:更新类和资源

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程序

image-20220525224409834

2、配置Servlet信息

image-20220525224544954

9、Servlet类的继承体系

image-20220525230145561

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 组成,不同的键值对,表示不同的含义

image-20220528111428952

2、POST请求
(1)请求行
*请求的方式 POST
*请求的资源路径[+?+请求参数]
*请求的协议的版本号
(2)请求头
*key:value  不同的请求头,有不同的含义
空行
(3)请求体
就是发送给服务器的数据

image-20220528132851841

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、响应体
*就是回传给客户端的数据

image-20220528134835543

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协议?

image-20220528200132366

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

相关文章

  • tomcat自启动
    1、安装配置java+tomcat(其他略)/etc/profile配置环境变量exportJAVA_HOME=/usr/local/jdk-17.0.7exportCLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jarexportPATH=$JAVA_HOME/bin:$PATH2、/etc/rc.d/rc.local增加执行权限chmod+x/etc/rc.d/rc.loca......
  • 2、TOMCAT实现在一个服务器上搭建多个网站、8080改80端口、TOMCAT默认页面三个选项
    在一个服务器上搭建多个网站如何实现三种方案:IP来区分、端口号来区分、host来区分如nginx中IP来区分:server{listen1.1.1.1:80;}server{listen2.2.2.2:80;}端口号来区分:server{listen1.1.1.1:80;}server{listen1.1.1.1:81;}host(主机头)来区分:ser......
  • Linux中jdk11、tomcat10、防火墙的设置、MySQL、的安装步骤
    一般在Linux系统上安装软件步骤:1.上传  2.解压 3.配置环境 4.刷新配置 5.检查       jdk11    tomcat10 设置防火墙mysql ......
  • Apache、Tomcat、IIS(PHP、JSP、ASP)共存及安装Tomcat
    1.安装Tomcatapt-getinstalltomcat7apt-getinstalltomcat7-adminapt-getinstalltomcat7-docsapt-getinstalltomcat7-examples 2.开启,中止和重启/etc/init.d/tomcat7start/etc/init.d/tomcat7stop/etc/init.d/tomcat7restart 3.根目录链接cd/var/l......
  • 又踩坑了!SpringMVC+ant+tomcat实现自动化打包,原来这么多坑
    背景是项目使用的是tomcat进行打包,没有使用Maven,需要构建一个ant执行的文件,用于后期可以在实际中使用,运行的平台是Windows。在使用中遇到了不少的坑点,一一记录下来,方便后期或者和我遇到相同问题的朋友们查看和借鉴。错误:打包报错[2023-05-16 10:35:23,164] Artifact meta......
  • 手把手教你Tomcat配置环境变量以及验证方法
    场景现在要将Tomcat配置进环境变量。实现以win7为例,找到桌面计算机图表,右键属性。或者打开计算机,找到系统属性。然后找到高级系统设置找到环境变量点击系统变量下的新建找到Tomcat所在目录变量名为:CATALINA_BASE内容为Tomcat所在路径,这里是上面的路径如图:点击确定同理再新建系统变......
  • tomcat-1
    Tomcat9.0.24下载与安装最新版教程Tomcat9.0.24下载与安装最新版教程1、下载路径百度云地址:https://pan.baidu.com/s/1x-KCgjJywsFjVcTUc6s6pw提取码:otlr。直接下载得到“TomcatV9.0.rar”压缩包,解压之后从文件夹中找到“apache-tomcat-9.0.24.exe”应用安装程序。以下步......
  • apache整合tomcat
    为什么要用apache来整合tomcat呢?首先,是因为apache是静态服务器,tomcat是动态服务器,二者相辅相成,才能完美构建一个web服务器;其次,用apache作为中心服务器器,将请求分发到多个tomcat,解决负载均衡,实现服务器的稳定性。那么,也有人会说,ngnix整合tomcat不就可以了,而且也很流行。我想说,实现......
  • idea配置Tomcat出现Warning: No artifacts configured 解决方法
    报错的截图解决方法 完成后启动 成功!!!!!!!!!!!!!......
  • tomcat 启用Gzip 压缩进行优化
    <Connector...compression="1400"noCompressionUserAgents="gozilla,traviata"compressableMimeType="text/html,text/xml,text/plain,text/css,text/javascript"/>[url]http://stackoverflow.com/questions/11486745/referencing-......