Servlet2(2)

简介: Servlet2(2)

f) base 标签的作用

演示

在web下创建a/b/c.html

c.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--  base标签设置页面相对路径工作时参照的地址
      href  属性就是参照的地址值
-->
    <base href="http://localhost:8080/07_servlet/a/b/">
</head>
<body>
  这是a下的b下的c.html页面<br/>
  <a href="../../index.html">跳回首页</a><br/>
</body>
</html>

在web下创建index.html

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
  这是web下的index.html<br/>
  <a href="a/b/c.html">a/b/c.html</a><br/>
  <a href="http://localhost:8080/07_servlet/forwardC">请求转发:a/b/c.html</a><br/>
</body>
</html>

在src/com.servlet下创建类ForwardC

ForwardC

package com.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("经过了ForwardC程序");
        req.getRequestDispatcher("/a/b/c.html").forward(req,resp);
    }
}

在web.xml配置

<servlet>
        <servlet-name>ForwardC</servlet-name>
        <servlet-class>com.servlet.ForwardC</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ForwardC</servlet-name>
        <url-pattern>/forwardC</url-pattern>
    </servlet-mapping>


g) Web中的相对路径和绝对路径

在javaWeb中,路径分为相对路径和绝对路径两种:

相对路径是:

.      表示当前目录

. .    表示上一级目录

资源名 表示当前目录/资源名

绝对路径:

htp://ip:port/工程路径/资源路径

h) web 中 / 斜杠的不同意义

在web中 / 斜杠是一种绝对路径。

/斜杠如果被浏览器解析,得到的地址是http://ip:port

<a> href="/">斜杠</a>

/斜杠如果被服务器解析,得到的地址是:http://ip:port/工程路径

1、<url-pattern>/servlet1</url-pattern>  
2、 servletContext.getRealPath("/");
3、 request.getRequestDispatcher("/");

特殊情况:

response. sendRedict("/");

把斜杠发送给浏览器解析。得到http://ip:port/

2. HttpServletResponse类

a)HttpServletResponse类的作用

HttpServetResponse类和HtpServletRequest类一样。每次请求进来,Tomcat服务器都会创建一个Response对象传 递给Servlet程序去使用。HttpServletRequest表示请求过来的信息,HttpServletResponse表示所有响应的信息,

我们如果需要设置返回给客户端的信息,都可以通过HttpServletResponse对象来进行设置

b)两个输出流的说明。

字节流 getOutputstream(); 常用于下载(传递二进制数据)

字符流 getWriter(); 常用于回传字符串(常用)
两个流同时只能使用一个。

使用了字节流,就不能再使用字符流,反之亦然,否则就会报错。



c) 如何往客户端回传数据

d)响应的乱码解决

要求:往客户端回传数据

package com.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 {
//      要求:往客户端回传 字符串 数据。
//        resp.getWriter();
//        resp.getOutputStream();
      //响应的乱码解决方案一(不推荐)
//        System.out.println(resp.getCharacterEncoding());//默认ISO-8859-1
//        //设置服务器字符集UTF-8
//        resp.setCharacterEncoding("UTF-8");
//        //通过响应头,设置浏览器也使用UTF-8字符集//默认GBK
//        resp.setHeader("Content-Type","test/html;charset=UTf-8");
    //响应的乱码解决方案二(推荐)
        //它会同时设置服务器和客户端都使用UTF-8字符集,还设置了响应头
        //此方法一定要在获取流对象之前才有效
        resp.setContentType("test/html;charset=UTF-8");
        System.out.println(resp.getCharacterEncoding());
        PrintWriter writer = resp.getWriter();
//        writer.write("response's context");
        writer.write("我很帅");
    }
}

e) 请求重定向

请求重定向,是指客户端给服务器放请求,然后服务器告诉客户端说。我给你一个新地址。你去新地址访问。叫请求重定向(因为之前的地址可能已经被废弃)。

代码演示

Response1

package com.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 Response1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("曾到此一游 Response1");
        //请求重定向实现方案一
//        //设置响应状态码302,表示重定向,(已搬迁)
//        resp.setStatus(302);
//        //设置响应头,说明新地址在哪里
//        resp.setHeader("Location","http://localhost:8080/07_servlet/response2");
        //请求重定向实现方案二(推荐)
        resp.sendRedirect("http://localhost:8080/07_servlet/response2");
    }
}

Response2

package com.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 Response2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       resp.getWriter().write("response2'result");
    }
}

web.xml

 <servlet>
        <servlet-name>Response1</servlet-name>
        <servlet-class>com.servlet.Response1</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Response1</servlet-name>
        <url-pattern>/response1</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>Response2</servlet-name>
        <servlet-class>com.servlet.Response2</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Response2</servlet-name>
        <url-pattern>/response2</url-pattern>
    </servlet-mapping>
相关文章
|
7月前
|
Java 应用服务中间件 数据库连接
Servlet是什么?
Servlet(Server Applet)是Java Servlet的简称,通常被称为小服务程序或服务连接器。它是一个用Java编写的服务器端程序,具有独立于平台和协议的特性。Servlet的主要功能在于交互式地浏览和生成数据,进而生成动态Web内容。
65 3
|
7月前
|
XML 前端开发 Java
servlet使用
servlet使用
|
小程序 Java 应用服务中间件
Servlet这些你可能还不知道
Servlet这些你可能还不知道
70 0
|
7月前
|
Oracle Java 关系型数据库
浅谈Servlet
浅谈Servlet
35 0
|
Java 应用服务中间件
Servlet2(1)
Servlet2(1)
69 0
|
JSON 前端开发 Java
Servlet详解(下)
Servlet详解
84 0
|
前端开发 JavaScript 应用服务中间件
Servlet1(2)
Servlet1(2)
73 0
|
XML JavaScript 前端开发
servlet详解
servlet详解
|
应用服务中间件
Servlet的详细使用(上)
Servlet的详细使用(上)
105 0
Servlet的详细使用(下)
Servlet的详细使用(下)
58 0

相关课程

更多