把实现了Servlet接口的Java程序叫做,Servlet
web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象,它代表了当前的web应用;
我在这个Servlet中保存的数据,可以在另外一个servlet中拿到;
Properties
发现: 都被打包到了同一个路径下: classes,我们俗称这个路径为classpath:
思路: 需要一个文件流;
web服务器接收到客户端的http请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象,代表响应的一个HttpServletResponse;
负责向浏览器发送数据的方法
负责向浏览器发送响应头的方法
响应的状态码
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
// 如何让浏览器3s自动刷新
resp.setHeader("refresh", "3");
// 再内存中创建一个图片
BufferedImage image = new BufferedImage(80, 20, BufferedImage.TYPE_INT_RGB);
// 得到图片
Graphics2D graphics = (Graphics2D) image.getGraphics();
// 设置图片背景颜色
graphics.setColor(Color.white);
graphics.fillRect(0, 0, 80, 20);
// 给图片写数据
graphics.setColor(Color.BLUE);
graphics.setFont(new Font(null, Font.BOLD, 20));
graphics.drawString(makeNum(), 0, 20);
// 告诉浏览器,请求用图片的打开方式
resp.setContentType("image/jpeg");
// 不让浏览器缓存
resp.setDateHeader("expires", -1);
resp.setHeader("Cache-Control", "no-cache");
resp.setHeader("Pragma", "no-cache");
// 把图片写给浏览器
ImageIO.write(image, "jpg", resp.getOutputStream());
}
// 生成7位随机字符串
private static String makeNum() {
Random random = new Random();
String nextInt = random.nextInt(9999999) + "";
StringBuilder captcha = new StringBuilder();
captcha.append(nextInt);
for (int i = 0; i < 7 - nextInt.length(); i++) {
captcha.append("0");
}
System.out.println(captcha);
return nextInt;
}
B一个web资源收到客户端A请求后,B他会通知A客户端去访问另外一个web资源C,这个过程叫重定向 常见场景:
测试
面试题: 请你聊聊重定向和转发的区别?
相同点
不同点
HttpServletRequest代表客户端的请求,用户通过Http协议访问服务器,HTTP请求中的所有信息会被封装到HttpServletRequest,通过这个HttpServletRequest的方法,获得客户端的所有信息。
获取参数
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
String username = req.getParameter("username");
String password = req.getParameter("password");
String[] hobbys = req.getParameterValues("hobbys");
System.out.println("===================================");
System.out.println(username);
System.out.println(password);
System.out.println(Arrays.toString(hobbys));
System.out.println("===================================");
//通过请求转发
req.getRequestDispatcher("/success.jsp").forward(req, resp);
}
会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话
有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学,曾经来过,称之为有状态会话
你能怎么证明你是西开的学生?
你 西开
一个网站,怎么证明你来过?
客户端 服务端
cookie
session
常见:网站登录之后,你下次不用再登录了,第二次访问直接就上去了!
从请求中拿到cookie信息
服务器响应给客户端cookie
cookie:一般会保存在本地的 用户目录下 appdata;
一个网站cookie是否存在上限! 聊聊细节问题
删除Cookie;
不设置有效期,关闭浏览器,自动失效;
设置有效期时间为 0;
编码解码:
什么是Session:
Session和Cookie的区别:
Cookie是把用户的数据写给用户的浏览器,浏览器保存 (可以保存多个)
Session把用户的数据写到用户独占Session中,服务器端保存 (保存重要的信息,减少服务器资源的浪费)
Session对象由服务创建:
使用场景:
保存一个登录用户的信息:
购物车信息;
在整个网站中经常会使用的数据,我们将它保存在Session中;
会话自动过期: web.xml配置
java Server Pages: Java服务器端页面,也和Servlet一样,用于动态Web技术!最大的特点:
思路: JSP到底怎么执行的!
我电脑的地址:
发现页面转变成了Java程序!
浏览器向服务器发送请求,不管访问什么资源,其实都是在访问Servlet!
JSP最终也会被转换成为一个ava类!
JSP 本质上就是一个Servlet
1.判断请求
2.内置一些对象
3.输出页面前增加的代码
4.以上的这些个对象我们可以在]SP页面中直接使用!
在JSP页面中;
只要是JAVA代码就会原封不动的输出;
如果是HTML代码,就会被转换为:
out.write("<htm1> r n");
这样的格式,输出到前端!
任何语言都有自己的语法,JAVA中有。JSP 作为ava技术的一种应用,它拥有一些自己扩充的语法 (了解,知道即可!),Java所有语法都支持!
JSP表达式
<%--JSP表达
作用:用来将程序的输出,输出到客户端
<%= 变量或者表达%>
--%>
<%= new java.util.Date()%>
jsp脚本片段
<%--jsp脚本片段--%>
<%
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
out.println("<h1>Sum=" + sum + "</h1>");
%>
脚本片段的再实现
JSP声明
JSP声明:会被编译到JSP生成]ava的类中! 其他的,就会被生成到 jspService方法中!
在JSP,嵌入Java代码即可!
JSP的注释,不会在客户端显示,HTML就会!
JSP指令
<error-page>
<error-code>404</error-code>
<location>/error/404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/500.jsp</location>
</error-page>
<%-- 定制错误页面 --%>
<%@ page errorPage="error/500.jsp"%>
<%-- 显示的声明这是一个错误页面 --%>
<%@ page isErrorPage="true"%>
<%@ page pageEncoding="UTF-8"%>
request: 客户端向服务器发送请求,产生的数据,用户看完就没用了,比如: 新闻,用户看完没用的!
session: 客户端向服务器发送请求,产生的数据,用户用完一会还有用,比如: 购物车
application: 客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还可能使用,比如: 聊天数据;
<!-- JS表达式的依赖 -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!-- standard标签库 -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
EL表达式:${}
JSP标签
JSTL表达式
JSTL标签库的使用就是为了弥补HTML标签的不足;它自定义许多标签,可以供我们使用,标签的功能和Java代码样!
核心标签 (掌握部分)
格式化标签
SQL标签
XML 标签
JSTL标签库使用步骤
实体类
JavaBean有特定的写法
一般用来和数据库的字段做映射 ORM;
ORM: 对象关系映射
什么是MVC: Model viewController 模型、视图、控制器
用户直接访问控制层,控制层就可以直接操作数据库
Model
View
Controller (Servlet)
Filter:过滤器,用来过滤网站的数据
Filter开发步骤
导包
编写过滤器
导包不要错
2.实现filter接口
3.web.xml中配置filter
实现一个监听器的接口;(有N种
编写一个监听器
实现监听器的接口
web.xml中注册监听器
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。