Javaweb的学习

Javaweb(了解原理,底层)

javaweb

1.1javaweb的概念
  • web开发

    • 静态web
      • html,css
      • 提供给所有人看的数据始终不会发生变化!
    • 动态web
      • 提供给所有人看的数据始终会发生变化,因人而异
      • 技术栈:Servlet/jsp/ASP/php

    在java中,动态web资源开发的技术统称为JAVAWEB

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

复习

事务

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值