文章目录
Javaweb(了解原理,底层)
javaweb
1.1javaweb的概念
-
web开发
- 静态web
- html,css
- 提供给所有人看的数据始终不会发生变化!
- 动态web
- 提供给所有人看的数据始终会发生变化,因人而异
- 技术栈:Servlet/jsp/ASP/php
在java中,动态web资源开发的技术统称为JAVAWEB
- 静态web
1.2 web应用程序
作用:提供给浏览器访问
- URL统一资源定位符
- 这个统一的web资源会被放在同一个文件夹,web应用程序—>Tomcat:服务器
- 一个web应用由多部分组成(静态web,动态web)
- html,css,js
- jsp,servlet
- Java程序
- jar包
- 配置文件(Properties)
1.3静态web
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q5rLPrlf-1624601753284)(C:\Users\LCJ\AppData\Roaming\Typora\typora-user-images\image-20210518215218017.png)]
缺点:
- 展示的页面不变化
- 无法与数据库交互
1.4动态web
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IyD2E4ZK-1624601753286)(C:\Users\LCJ\AppData\Roaming\Typora\typora-user-images\image-20210518215758589.png)]
缺点:
- 假如服务器的动态web资源出现了错误,需要重新编写后台程序,重新发布;
- 停机维护
优点:
- web页面可以更新动态,所有用户看到都不是同一个页面
- 它可以与数据库交互(数据持久化)
1.5web服务器
处理用户请求,给用户返回响应
tomcat
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。目前Tomcat最新版本为10.0.5**。**
1.6HTTP
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PrCXAM5G-1624601753287)(C:\Users\LCJ\AppData\Roaming\Typora\typora-user-images\image-20210519212708515.png)]
Tomcat
下载tomcat:
-
安装,解压
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HGFvOUS0-1624601753288)(C:\Users\LCJ\AppData\Roaming\Typora\typora-user-images\image-20210518221243411.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9APvbO9g-1624601753290)(C:\Users\LCJ\AppData\Roaming\Typora\typora-user-images\image-20210518221735737.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-97fwsXGB-1624601753291)(C:\Users\LCJ\AppData\Roaming\Typora\typora-user-images\image-20210518225647012.png)]
配置我们启动tomcat的页面:
配置端口号
配置localhost
打开tomcat服务器,启动我们创建的网页
模仿(默认访问ROOT,新建一个文件在里面存放我们的页面–让他访问)
-
配置文件和目录结构
-
作用
-
异常解决:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I0HBIYZy-1624601753292)(C:\Users\LCJ\AppData\Roaming\Typora\typora-user-images\image-20210518225451876.png)]
netstat -p tcp -ano | findstr :8080查看这个端口号谁在使用
tasklist | findstr 8080 查看这个进程名字
taskkill -PID 8080 -F 强制结束这个进程
我们如何访问一个网站
Maven(工具)
1.为什么要学这个?
- 在javaweb开发中需要导入大量的jar包,手动导入
- 自动导入—maven(自动帮我们导入和配置jar包)
- maven:方便我们导入jar包
2.Maven的下载
mavan的核心思想:约定大于配置
按照MAVEN给我们的约束,规则去编写
-
安装,解压
官网下载
-
配置文件和目录结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ti8soLnx-1624601753293)(C:\Users\LCJ\AppData\Roaming\Typora\typora-user-images\image-20210519231358930.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LqFu0lAF-1624601753294)(C:\Users\LCJ\AppData\Roaming\Typora\typora-user-images\image-20210519231513817.png)]
配置文件(配置镜像,maven-repo本地仓库)
-
添加环境变量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pPKAu9Op-1624601753294)(C:\Users\LCJ\AppData\Roaming\Typora\typora-user-images\image-20210519231724582.png)]
-
命令行输入maven-version测试是否成功
-
-
作用
- 方便我们导入jar包
3.IDEA中使用maven
1.创建mavae项目
- 模板创建
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xEeaf5UN-1624601753296)(C:\Users\LCJ\AppData\Roaming\Typora\typora-user-images\image-20210519221309658.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6hZMangW-1624601753297)(C:\Users\LCJ\AppData\Roaming\Typora\typora-user-images\image-20210519221702808.png)]
自动配置,测试成功
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QORi5f8S-1624601753298)(C:\Users\LCJ\AppData\Roaming\Typora\typora-user-images\image-20210519222131058.png)]
maven进行相关配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-loG8eMTc-1624601753299)(C:\Users\LCJ\AppData\Roaming\Typora\typora-user-images\image-20210519222717004.png)]
- 自己配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xDdZ8FfL-1624601753300)(C:\Users\LCJ\AppData\Roaming\Typora\typora-user-images\image-20210519223337045.png)]
mark(标记目录)
2.创建tomcat
点击创建
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yBckRV5c-1624601753300)(C:\Users\LCJ\AppData\Roaming\Typora\typora-user-images\image-20210519232108159.png)]
进行相关设置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZInG7iGd-1624601753301)(C:\Users\LCJ\AppData\Roaming\Typora\typora-user-images\image-20210519224708934.png)]
error:传入我们tomcat路径
waring:没有项目—创建项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v1eFh0If-1624601753302)(C:\Users\LCJ\AppData\Roaming\Typora\typora-user-images\image-20210519225019636.png)]
- 创建成功,启动tomcat(默认访问webapp下的网页,通过设置context指定访问)
- 手动启动tomcat(web服务器–我们网页就存放在这个服务器下的文件里)
3.maven配置
- 在资源导出时需要注意去配置
Servlet
1.什么是Servlet
-
Servlet是指任何实现了这个Servlet接口的类
-
主要功能在于交互式地浏览和生成数据,生成动态Web内容
2.怎样使用
- 实现了这个Servlet接口
- 编写一个类实现这个接口
- 把开发好的JAVA类部署到服务器上
- Servlet可以响应任何类型的请求
3.HelloServlet
- 修改web.xml为最新的,配置maven相应结构
- 创建一个servlet类,继承HttpServlet
- 编写Servlet配置映射:通过浏览器访问,需要web服务器(tomcat),因此需要我们在web服务器中注册Servlet,提供一个映射访问我们的JAVA程序,响应给我们
- 配置comcat
4.Servlet原理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7gwg9WWG-1624601753303)(C:\Users\LCJ\AppData\Roaming\Typora\typora-user-images\image-20210521001143903.png)]
5.Servlet和Servlt_mapping
-
一个Servlet对应一个请求映射
<servlet> <servlet-name>helloServlet</servlet-name> <servlet-class>com.lcj.servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>helloServlet</servlet-name> <!--请求路劲--> <url-pattern>/lcj</url-pattern>
-
一个Servlet对应多个请求映射()
<servlet-mapping> <servlet-name>helloServlet</servlet-name> <!--请求路劲--> <url-pattern>*.lcj</url-pattern>
-
默认映射
/*
-
映射优先级
固定设置的映射优先级高,找不到访问通配符
6.ServletContext
代表当前web应用
WEB容器在启动时,它会为每个WEB应用**程序都创建一个对应的ServletContext对象,它代表当前web应用。
ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过ServletConfig.getServletContext方法获得ServletContext对象。
由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯
1.共享数据
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = getServletContext();
String name = "hanhantt";
servletContext.setAttribute("username",name);//设置属性,void setAttribute(String var1, Object var2);
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = getServletContext();
String url = servletContext.getInitParameter("url");
String username = (String)servletContext.getAttribute("username");//得到这个对应的值
resp.setContentType("text.html");//设置相应内容类型
resp.getWriter().println(username);
resp.getWriter().println(url);
}
}
2.获取初始化配置参数
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = getServletContext();
String url = servletContext.getInitParameter("url");
String username = (String)servletContext.getAttribute("username");//得到这个对应的值
resp.setContentType("text.html");//设置相应内容类型
resp.getWriter().println(username);
resp.getWriter().println(url);
}
}
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306//users</param-value>
</context-param>
3.请求转发–转发都另外一个页面
A-(发送请求,获取资源)------B(拿C的资源,返回给A)-------C url不变
ServletContext servletContext = getServletContext();
servletContext.getRequestDispatcher("/read").forward(req,resp);
Properties properties = new Properties();
4.读取资源文件
注意读取JAVA下的资源文件需要去配置可读取配置文件
5.多余配置文件
<finalName>javaweb-maven</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugi </plugins>
</pluginManagement>
HTTP 响应代码
- 成功响应200
- 重定向(302)
- 请求转发(307)
- 客户端响应400
-
请求失败404,请求所希望得到的资源未被在服务器上发现
-
服务端响应(500)
- 服务端出错
-
HttpServletRequest req
请求对象
用户通过HTTP协议访问服务器,Http请求的所有信息都被封装到HttpServletRequest,我们可以去获取
-
请求转发:url不变
重定向:url变
-
获取前端传递来的参数
req.setCharacterEncoding("utf-8"); String username = req.getParameter("username"); String password = req.getParameter("password"); String[] parameterValues = req.getParameterValues("hobbys"); System.out.println(username); System.out.println(password); System.out.println(Arrays.toString(parameterValues)); resp.setCharacterEncoding("utf-8"); //req.getRequestDispatcher("/success.jsp").forward(req,resp); resp.sendRedirect("/success.jsp");
HttpServletResponse resq
响应对象
-
向浏览器发送消息
-
下载文件(输入流读取文件,输出流输出文件,浏览器以下载的方式打开文件)
//1.设置在浏览器下载,设置响应头控制浏览器以下载的形式打开文件,文件名可以为中文resp.setHeader("content-disposition","attachment;filename="+ URLEncoder.encode("055.jpg","UTF-8"));//2.创建输入流读取文件InputStream ras = getServletContext().getResourceAsStream("/WEB-INF/classes/055.jpg");byte[] buffer = new byte[1024];int len = 0;//3.创建输出流,输出文件到浏览器ServletOutputStream os = resp.getOutputStream();while ((len = ras.read(buffer))>0){ os.write(buffer);}//关闭资源ras.close();os.close();
-
响应头–设置浏览器
"content-disposition","attachment;filename="+ URLEncoder.encode("055.jpg","UTF-8")content-disposition: attachment;filename=055.jpg 响应头:HTTP/1.1 200 refresh: 3expires: Wed, 31 Dec 1969 23:59:59 GMTCache-Control: no-cacheContent-Type: image/jpegTransfer-Encoding: chunkedDate: Mon, 24 May 2021 16:02:58 GMTKeep-Alive: timeout=20Connection: keep-alive
-
验证码(生成指定长度随机数字符串)
public class Vcode extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //设置响应头 //设置浏览器3秒自动刷新 resp.setHeader("refresh","3"); //设置浏览器以图片的形式打开 resp.setContentType("image/jpeg"); resp.setDateHeader("expires",-1); resp.setHeader("Cache-Control","no-cache"); BufferedImage image = new BufferedImage(80,20,BufferedImage.TYPE_INT_RGB); Graphics2D graphics = (Graphics2D)image.getGraphics(); graphics.drawString(range(),0,20); //把图片写给浏览器 ImageIO.write(image, "jpg", resp.getOutputStream()); } public String range(){ //返回一个指定长度的随机数字 Random random = new Random(); String s = random.nextInt(9999999) + ""; StringBuffer sb = new StringBuffer(); for (int i = 0; i < 7-s.length(); i++) { sb.append("0"); } //保证我们得到一个7位随机数 String num = sb.toString()+s; return num; }
Cooike
服务器给了一个Cooike,证明你来过,你下次来的时候带着这个Cooike,我就知道你来过
客户端 服务器
第一次请求(无Cooike) 响应给你一个Cooike(可以设置信息)
得到这个信息,第二次请求 根据你请求的Cooike响应对应东西给你
-
避免重复登录
-
public void setMaxAge(int expiry) {maxAge = expiry; } public Cookie(String name, String value) {} public String getName() { return name; } public String getValue() { return value; }//获取Cooike,响应Cooike
-
URLEncoder.encode("055.jpg","UTF-8")//可对中文进行编码URLEncoder.decode("055.jpg","UTF-8")//可对中文进行解码
Session
Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项、信息。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。
- 一个Session独占一个浏览器,浏览器没有关闭就一直存在,存储在Session中的信息就可以作用整个应用程序
1.Session的使用
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //解决乱码问题 req.setCharacterEncoding("utf-8"); resp.setCharacterEncoding("utf-8"); //得到Session HttpSession session = req.getSession(); session.setAttribute("name","刘成军"); session.setAttribute("date",new Person("刘成军",18)); //获取SessionId String id = session.getId(); //判断这个Session是否新创建 if(session.isNew()){ resp.getWriter().println("这是新创建的Session"); }else { resp.getWriter().println("已经创建了Session,id为:"+id); } //}protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //解决乱码问题 req.setCharacterEncoding("utf-8"); resp.setCharacterEncoding("utf-8"); resp.setContentType("text.html;charset=utf-8"); //得到Session HttpSession session = req.getSession(); String name = (String)session.getAttribute("name"); Person p = (Person)session.getAttribute("date"); resp.getWriter().println(name); resp.getWriter().println(p.toString()); // }
2.Session的注销
-
手动
-
代码
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //解决乱码问题 req.setCharacterEncoding("utf-8"); resp.setCharacterEncoding("utf-8"); resp.setContentType("text.html;charset=utf-8"); //得到Session HttpSession session = req.getSession(); session.removeAttribute("date"); session.removeAttribute("name"); session.invalidate();
-
web.xml中配置
<session-config> <session-timeout>10</session-timeout></session-config>
3.Session和Cooike的区别
- Session服务器保存(保存重要信息),Cooike浏览器保存(保存多个)
4.使用场景
Session 对象最常见的一个用法就是存储用户的首选项、信息。
- 例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。
- 登录一个访问多个页面.
- 存储在Session中的信息就可以作用整个应用程序—重要的信息,经常使用的信息
5.图示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yHOnwXzv-1624601753305)(C:\Users\LCJ\AppData\Roaming\Typora\typora-user-images\image-20210528161853934.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VxzbNzul-1624601753306)(C:\Users\LCJ\AppData\Roaming\Typora\typora-user-images\image-20210528162524137.png)]
Jsp
JSP全名为Java Server Pages,java服务器页面,简化的[Servlet]。在传统的网页HTML(标准通用标记语言的子集)文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
它实现了Html语法中的java扩张(以 <%, %>形式)
jsp的存放位置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BmiwobIJ-1624601753306)(C:\Users\LCJ\AppData\Roaming\Typora\typora-user-images\image-20210528164205832.png)]
jsp源码分析
public void _jspInit() {//初始化}public void _jspDestroy() {//毁灭}public void _jspService(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException //jsp服务函数(类似于Servlet) 内置对象pageContext pagecontext//页面上下文 session servletContext servletconfig page=this //当前页面JspWriter out = null;JspWriter _jspx_out = null;PageContext _jspx_page_context = null;请求响应//将我们写的JSP转换成JAVA代码前准备工作,通过创建好的对象直接在JSP中使用response.setContentType("text/html;charset=UTF-8");//设置响应类型PageContext pageContext = _jspxFactory.getPageContext(this, request, response, (String)null, true, 8192, true); _jspx_page_context = pageContext;pageContext.getServletContext();//获得ServletContext pageContext.getServletConfig();//获得Servlet配置pageContext.getSession();//获得sessionout = pageContext.getOut();//输出JSP
实现原理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oqxGrlmV-1624601753306)(C:\Users\LCJ\AppData\Roaming\Typora\typora-user-images\image-20210529231412462.png)]
- 在idea中使用Tomcat会在tomcat中生成一个work目录(存放jsp.class文件)
JSP基础语法
JSP表达式
<%--JSP表达式作用:用来将程序的输出,输出到客户端<%= 变量或者表达式%>--%><%= new java.util.Date()%>#### JSP脚本片段```jsp<%--jsp脚本片段--%><% int sum = 0; for (int i = 0; i <= 100; i++) { sum += i; } out.println("<h1>Sum=" +sum+ "<h1>" );%>
脚本片段的再实现
<% int x = 10; out.println(x);%><p>这是一个JSP文档</p><% int y = 20; out.println(y);%><%--在代码中嵌入HTML元素--%><% for (int i = 0; i < 5; i++) {%> <h1>Hello world <%=i%></h1><% }%>
JSP声明
<%! static{ System.out.println("Loading Servelet!"); } private int globalVar = 0; public void oi(){ System.out.println("进入了方法oi"); }%>
JSP声明:会被编译到JSP生成Java的类中!其他的,就会被生成到_jspService方法中!
在JSP中嵌入Java代码即可!
<%%><%=%><%!%><%--注释--%>
JSP的注释不会在客户端显示,HTML就会
8.4、JSP指令
定制错误页面
使用JSP指令
<%--定制错误页面--%><%@ page errorPage="error/500.jsp" %>
另一种办法:在web.xml文件中配置
<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><%--@include:会将两个页面合二为一--%><%@include file="common/header.jsp"%><hr><h1>网页主体</h1><hr><%@include file="common/footer.jsp"%><%--jsp:include:拼接页面,本质还是三个页面--%><jsp:include page="/common/header.jsp" /><hr><h1>网页主体</h1><hr><jsp:include page="/common/footer.jsp" />
- 配置错误页面404,500
- 使用include拼接页面,对于通用的页面我们可以将他放入到指定包下,include导入
8.5、9大内置对象
- PageContext 存东西
- Request 存东西
- Response
- Session 存东西
- Application【ServletContext】 存东西
- Config【ServletConfig】
- Out
- Page
- Exception
<%pageContext.setAttribute("name1","oi1号");//保存的数据只在一个页面中有效request.setAttribute("name2","oi2号");//保存的数据只在一次请求中有效,请求转发会携带这个数据session.setAttribute("name3","oi3号");//保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器application.setAttribute("name4","oi4号");//保存的数据只在服务器中有效,从打开服务器到关闭服务器%>
request:客户端向服务器发送请求,产生的数据,用户看完就没用了,比如:新闻,用户看完没用的!
session:客户端向服务器发送请求,产生的数据,用户用完一会还有用,比如:购物车;
application:客户端向服务器发送请求,产生的数据,一个用户用完了,其他用户还可能使用,比如:聊天数据;
-
设置数据,并取出数据(根据需求将数据存在在相应的对象)
<% pageContext.setAttribute("name1","oi1号");//保存的数据只在一个页面中有效 request.setAttribute("name2","oi2号");//保存的数据只在一次请求中有效,请求转发会携带这个数据 session.setAttribute("name3","oi3号");//保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器 application.setAttribute("name4","oi4号");//保存的数据只在服务器中有效,从打开服务器到关闭服务器%><% String name1 = (String)pageContext.findAttribute("name1"); String name2 = (String)pageContext.findAttribute("name2"); String name3 = (String)pageContext.findAttribute("name3"); String name4 = (String)pageContext.findAttribute("name4");%><h>${name1}</h><h>${name2}</h><h>${name3}</h><h>${name4}</h></body></html>
<body><% String name3 = (String)session.getAttribute("name3"); String name4 = (String)application.getAttribute("name4");%><h1>登录成功</h1><h2>${name3}</h2><h2>${name4}</h2>
8.6、JSP标签、JSTL标签、EL表达式
<!-- JSTL表达式的依赖 --><!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl-api --><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表达式:${ }
- 获取数据
- 执行运算
- 获取web开发的常用对象
调用java方法
JSP标签
<%--jsp:include--%><jsp:forward page="jsptag2.jsp"> <jsp:param name="name" value="oi"/> <jsp:param name="age" value="2+"/></jsp:forward>
JavaBean
MVC三层架构
Filter
对请求进行过滤
-
根据设置的Session属性,做相应判断(对于多次使用的属性可设为常用变量,避免重复修改)
-
vip练习–根据用户登录设置的Session值做相应判断
-
相应编码
监听器
JDBC
复习