怎样做网站跳转,墨刀网站开发原型图教程,网站后台制作用的软件,杭州19楼官网目录
Response响应对象
1.基本功能
2.重定向
3.路径
4.服务器输出数据到浏览器 Response响应对象
1.基本功能
设置响应行#xff1a;格式为 HTTP/1.1 200 OK#xff0c;可以使用 setStatus(int sc) 方法设置状态码为 200 表示成功。
方法名称描述setStatus(int sc)设…
目录
Response响应对象
1.基本功能
2.重定向
3.路径
4.服务器输出数据到浏览器 Response响应对象
1.基本功能
设置响应行格式为 HTTP/1.1 200 OK可以使用 setStatus(int sc) 方法设置状态码为 200 表示成功。
方法名称描述setStatus(int sc)设置状态码为给定的整数值。
设置响应头使用 setHeader(String name, String value) 方法来设置响应头信息比如 setHeader(Content-Type, text/html) 设置响应内容类型为 HTML。
方法名称描述setHeader(String name, String value)设置指定名称的请求头为给定的值。
设置响应体获取输出流
方法名称描述getWriter()获取字符输出流用于向客户端发送字符数据。getOutputStream()获取字节输出流用于向客户端发送字节数据。
使用输出流将数据输出到客户端浏览器。 2.重定向 重定向通过response对象的sendRedirect(目标地址)进行跳转
方法名称描述sendRedirect(String location)通过指定目标地址进行重定向跳转。设置响应的 Location 头使客户端重新向指定的目标地址发送请求。
package com.company;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.concurrent.TimeUnit;WebServlet(/Demo9)
public class Demo9 extends HttpServlet{Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {try {
// 等待三秒后跳转回到主页面TimeUnit.SECONDS.sleep(3);}catch (Exception e){e.printStackTrace();}
// 本站资源进行跳转
// resp.sendRedirect(/com_alphamilk_war_exploded/Demo8);
// 外部站点资源进行跳转resp.sendRedirect(https://blog.csdn.net/dogxixi?spm1000.2115.3001.5343);}
}访问后就自动跳转到CSDN中· response对象重定向的特点(sendRedirect) 地址栏会发生变化重定向可以访问其他站点服务器的资源重定向是二次请求但是重定向后不能使用request的共享变量 request对象的请求转发特定(Forward) 地址栏不会发生变化转发只能访问当前服务器下的资源转发是一次请求 3.路径
相对路径通过访问当前的资源和目标的资源之间的相对位置关系 同级目录. /资源名称 后退一个目录: . . /资源名称
特点无法确定唯一的资源
绝对路径根据请求对象分类
如果是客户端浏览器访问的就需要加上虚拟目录如果是服务器自行使用则不需要加虚拟目录
特点通过绝对路径可以确定唯一的资源. 注意但是在重定向时为了保证跳转的准确性需要将虚拟目录包含在重定向的路径中。例如resp.sendRedirect(/context_path/Demo8)。 问题引出 由于为了重定向的准确性一般会在重定向的路径中加入虚拟目录但是如果虚拟目录经常发生变化就需要相应的所有有关的路径全部修改会造成大量的时间浪费所以引入了动态路径的概念。具体原理是通过request对象的方法的获取路径getContextPath/资源名。 案例代码:
package com.company;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.concurrent.TimeUnit;WebServlet(/Demo9)
public class Demo9 extends HttpServlet{Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {try {
// 等待三秒后跳转回到主页面TimeUnit.SECONDS.sleep(3);}catch (Exception e){e.printStackTrace();}
// 本站资源进行跳转(动态路径)resp.sendRedirect(req.getContextPath()/Demo5);}
}4.服务器输出数据到浏览器 通过流输出内容具体方法如下
1.通过字符流实现数据发送
package com.company;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;WebServlet(/Demo10)
public class writer extends HttpServlet{Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 创建字符流输出对象PrintWriter writer resp.getWriter();
// 输出数据writer.write(h1Hello World/h1 h1你好 世界/h1);writer.close();}
// 统一方法操作Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req, resp);}
}可以发现用了字符流输出中文的时候出现了乱码原因在于使用编码的字符集不一致字符集使用的是GBK 而流使用的是ISO - 8859-1,只需要告诉浏览器服务器用的编码方式浏览器就会自动进行相应编码转换 修改后代码
package com.company;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;WebServlet(/Demo10)
public class writer extends HttpServlet{Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 告诉浏览器服务器使用编码方式是utf-8resp.setHeader(content-type,text/html;charsetutf-8);// 创建字符流输出对象PrintWriter writer resp.getWriter();
// 输出数据writer.write(h1Hello World/h1 h1你好 世界/h1);writer.close();}
// 统一方法操作Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req, resp);}
}2.字节流发送数据 原理同上
案例
package com.company;import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.StandardCharsets;WebServlet(/Demo11)
public class writeByte extends HttpServlet{Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 告诉浏览器编码格式为utf-8resp.setHeader(content-type,text/html;charsetutf-8);
// 创建字节流ServletOutputStream sos resp.getOutputStream();
// 使用字节流输出sos.write(你好啊.getBytes(StandardCharsets.UTF_8));}Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req, resp);}
}如果不了解字符流和字节流和打印流的知识可以在下面的章节中了解更多内容Java IOFile、字节输入输出流、字符输入输出流、打印流附带相关面试题_Alphamilk的博客-CSDN博客