*/
RequestDispatcher requestDispatcher = request.getRequestDispatcher(“/servlet2”);
//走向Servlet2(柜台2)
requestDispatcher.forward(request, response);
}
}
servlet2类下:
public class Servlet2 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取请求的参数(办事的材料)查看
String username=request.getParameter(“username”);
System.out.println(“在Servlet2(柜台2)查看参数(材料)”+username);
//查看柜台1是否有盖章
Object key1 = request.getAttribute(“key1”);
System.out.println(“柜台1是否有章:”+key1);
//处理自己的业务
System.out.println(“Servlet2处理自己的业务”);
}
}
运行访问http://localhost:8080/03_servlet/servlet1
运行结果:
在访问栏中加入参数 ?后面都是参数
回车得:
请求转发的特点
1、浏览器地址栏没有变化(一直都是工程名/servlet1)
2、他们试一次请求
3、可以共享Request域中的数据(域数据在整个工程都能访问)
4、可以转发到WEB-INF目录下(WEB-INF受服务器保护,不能通过客户端(浏览器)直接访问可以通过服务器中的资源间接访问)
5、不能访问工程以外的资源(因为他是从工程下找的,工程下没有的一律访问不了)
在类Servlet1中
地址访问:
RequestDispatcher requestDispatcher = request.getRequestDispatcher(“/WEB-INF/form.html”);
base标签
======
演示程序不能跳回来的情况
创建一个类ForwardC继承HttpServlet类
public class ForwardC extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println(“经过了Forward程序”);
req.getRequestDispatcher(“/a/b/c.html”).forward(req, resp);
}
}
在web.xml中配置
ForwardC
com.servlet.ForwardC
ForwardC
/forwardC
在web目录下创建如图所示
在c目录下写
在index.html下写
这是web下的index.html
运行之后:
我们前面也说过,只写到工程名默认访问index页面
我们发现点击上下两个都可以成功跳转
虽然都成功跳转了,但是地址明显不同,因为我们在c.html下写的是…/…/index.html,
运行结果:
到位分析:
前者(第一个),localhost:8080/03_servlet/a/b/c.html,经过…/…/跳转可以到web工程下,正好web下有index.html,所以会跳转成功。
**后者(第二个 ),**localhost:8080/03_servlet/forwardC,经过…/…/跳转就会跳到src目录下,而src目录下显然没有index.html页面,故会失败。(结构是:src/com/servlet/Forward)
图示:
当我们加入base标签后,浏览器就会以这个base标签的为最终地址。
base标签一般加在title之下
这样就解决了后者不能调到首页的问题。
Web中的相对路径和绝对路径
==============
在javaWeb中,路径分为相对路径和绝对路径两种:
相对路径:
. 表示当前目录
… 表示上一级目录
资源名 表示当前目录/资源名
绝对路径:
http://ip:port/工程路径/资源路径
web中/ 斜杆的不同意义
=============
在web中/ 斜杆是一种绝对路径。
/ 斜杆如果被浏览器解析,得到的地址是:http://ip:port/
/ 斜杆如果被服务器解析,得到的地址是:http://ip:port/工程路径
1、/servlet1
2、servletContext.getRealPath(“/”);
3、request.getRequestDispatcher(“/”)
特殊情况:response.sendRediect(“/”);把斜杆发送给浏览器解析,得到http://ip:port/
HttpServletResponse类
====================
HttpServletResponse类的作用
HttpServletResponse类和HttpServRequest类一样。每次请求进来,Tomcat服务器都会创建一个Response对象传递给Servlet程序去使用,HttpServletRequest表示过来的信息,HttpServletResponse表示所有响应的信息,我们如果需要设置返回给客户端的信息,都可以通过HttpServletResponse对象进行设置
两个输出流的说明
字节流 getOutputStream(); 常用于下载(传递二进制数据)
字符流 getWriter(); 常用于回传字符串(常用)
两个流同时只能使用一个。否则报错
往客户端回传数据
========
创建一个类ResponIOServlet:
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 {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter writer=response.getWriter();
writer.write(“AiQingShuiXingL”);
}
}
web.xml配置,运行之后:
中文乱码问题
设置 response.setCharacterEncoding(“GBK”);就可以解决中文在浏览器显示乱码问题
第一种方式:
public class ResponseIOServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(response.getCharacterEncoding());//默认是字符集是ISO-8859-1,不支持中文
//设置字符集为GBK
response.setCharacterEncoding(“GBK”);
PrintWriter writer=response.getWriter();
writer.write(“爱情睡醒了”);
}
第二种方式:
public class ResponseIOServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(response.getCharacterEncoding());//默认是字符集是ISO-8859-1,不支持中文
//设置字符集为UTF—8
response.setCharacterEncoding(“UTF-8”);
//告诉浏览器也设置UTF-8即可
response.setHeader(“Content-Type”, “text/html;charset=UTF-8”);
PrintWriter writer=response.getWriter();
writer.write(“爱情睡醒了”);
}
}
第三种方式:
public class ResponseIOServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(response.getCharacterEncoding());//默认是字符集是ISO-8859-1,不支持中文
//一定得在获取流对象前使用,否则无效
response.setContentType(“text/html;charset=UTF-8”);
PrintWriter writer=response.getWriter();
writer.write(“爱情睡醒了”);
}
}
请求重定向
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
最后
基础知识是前端一面必问的,如果你在基础知识这一块翻车了,就算你框架玩的再6,webpack、git、node学习的再好也无济于事,因为对方就不会再给你展示的机会,千万不要因为基础错过了自己心怡的公司。前端的基础知识杂且多,并不是理解就ok了,有些是真的要去记。当然了我们是牛x的前端工程师,每天像背英语单词一样去背知识点就没必要了,只要平时工作中多注意总结,面试前端刷下题目就可以了。
什么?你问面试题资料在哪里,这不是就在你眼前吗(滑稽
份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
[外链图片转存中…(img-70LjzsV5-1713614091614)]
[外链图片转存中…(img-P9IU7J6y-1713614091615)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
[外链图片转存中…(img-q3lmtjQx-1713614091616)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
[外链图片转存中…(img-H0Xvcusd-1713614091616)]
最后
基础知识是前端一面必问的,如果你在基础知识这一块翻车了,就算你框架玩的再6,webpack、git、node学习的再好也无济于事,因为对方就不会再给你展示的机会,千万不要因为基础错过了自己心怡的公司。前端的基础知识杂且多,并不是理解就ok了,有些是真的要去记。当然了我们是牛x的前端工程师,每天像背英语单词一样去背知识点就没必要了,只要平时工作中多注意总结,面试前端刷下题目就可以了。
什么?你问面试题资料在哪里,这不是就在你眼前吗(滑稽