全球球精选!狂神说 javaweb

2022-12-14 11:11:24 来源:51CTO博客

javaweb

1、基本概念

web开发:


【资料图】

web静态web动态web淘宝,不断变化技术栈:Servlet/JSP ASP PHP

1.2、web应用程序

web应用程序:可以提供浏览器访问的程序

能访问的任何页面都存在于世界的某个角落URL这些同意的web资源会被放到同一个文件夹 Tomcat一个web 组成html css jsjsp servletjava程序jar包配置文件(Properties)

外部访问需要服务器统一管理

1.3、静态web

2、web服务器

ASP:

微软:HTML中嵌入VB脚本

PHP

PHP开发速度快,功能强大,跨平台,代码简单无法承载大访问量的情况

JSP/Servlet

B/S

C/S

sun公司主推的B/S基于Java承载三高带来的影响语法像ASP

2.2、web服务器

一种被动的操作 处理用户强求和信息

IIS

微软的 ASP window自带

Tomcat

百度百科

手写Tomcat

3、Tomcat

启动关闭

Tomcat:8080

mysql:3306

hTTP:80

HTTPS:443

可以配置主机的名称

默认主机名为:默认网站

高难度面试题

请你谈谈网站是如何进行访问的!

输入域名,回车检查本机C:\Windows\System32\deivews\ect\hosts配置文件下有没有这个映射有:直接返回对应的IP地址,在这个地址中,有我们需要访问的web程序 直接访问
127.0.0.1   www.mink.com
没有:去DNS服务器上找,找到的话就返回,找不到返回找不到

3.4、发布一个web网站

先模仿

将自己写的网站,放到Tomcat的webapps(应用的文件夹)下

网站应该有的结构

--webapps:Tomcat服务器的web目录    -ROOT    -kuangstudy:网站的目录名        -WEB-INF            -calsses:Java程序            -lib.xml :网站配置文件        -index.html  默认的首页        -static            -css                -style.css            -js            -img        -.......

4、HTTP

4.1、什么是HTTP

HTTP 简单的请求响应协议,通常运行在TCP之上

文本超文本

https:安全的

443

4.2、两个时代

http1.0HTTP/1.0 :客户端与服务器连接后,只能获得一个web资源,断开连接http2.0HTTP/1.1:客户端与服务器连接后,能获得多个web资源

4.3、HTTP请求

客户端--发请求(request)--服务器

百度:

Request URL: https://www.baidu.com/  请求地址Request Method: GET 请求方式/POSTStatus Code: 200 OK 状态码:200Remote(远程) Address: 110.242.68.3:443Referrer Policy: strict-origin-when-cross-origin
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Accept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9Cache-Control: max-age=0Connection: keep-aliveCookie: PSTM=1642766731; BAIDUID=FF1EA490E8F8F1CE6C7FA5385721FEFE:FG=1; BD_UPN=12314753; BIDUPSID=09E509314F3EB3812F3612BCD6996E78; __yjs_duid=1_87aeb27da8e0a5310018c003dc9c8a141642819771266; BDSFRCVID_BFESS=vM4OJexroG0RE6oHNZuLhC45X-mPxN5TDYLEOwXPsp3LGJLVgaSTEG0PtfppquI-2ZlgogKKBeOTHn0F_2uxOjjg8UtVJeC6EG0Ptf8g0M5; H_BDCLCKID_SF_BFESS=JJkO_D_atKvDqTrP-trf5DCShUFsKnolB2Q-XPoO3KJCsDQvyMTEbfAJLN8tXIrLLTbw_xbgylRp8P3y0bb2DUA1y4vpK-ogQgTxoUJ25tJ2qt5Vqj5Ah--ebPRi3tQ9QgbXopQ7tt5W8ncFbT7l5hKpbt-q0x-jLTnhVn0MBCK0MC09j6KhDTPVKgTa54cbb4o2WbCQQ-Jd8pcN2b5oQT8wQHjyBU605G635K-ayT6VV-n8jqOUWfAkXpJvQnJjt2JxaqRC5bj6Sh5jDh3MbR8QKqoAe6jzaIvy0hvc0J5cShnkDMjrDRLbXU6BK5vPbNcZ0l8K3l02V-bIe-t2XjQhjGtOtjDttb32WnTJ25rHDbTw5tI_-P4DeUTWBxRZ56bHWh0MLqK-Dpn8MtoBMMJ3jJAL2lOOBJTnKUT1366OMCblK-RGQj-d3xJKQh343bRTLnQM-PjhOjC4W4vJhP-UyP5-Wh37aJRlMKoaMp78jR093JO4y4Ldj4oxJpOJ5JbMopCafDDbbD0xj6LBePtjMfbWetoQ265tWjrJabC3EfTJXU6qLT5X5tn8bxQqWgo0aPcS0K-hoKoOjTOTyl0njxQyWt7EtTRlanvy2DQGDbOCjMonDh8n3H7MJUntKHcAoj6O5hvvER5O3M7_DMKmDloOW-TB5bbPLUQF5l8-sq0x0bOte-bQXH_Etj-OJJutoKvt-5rDHJTg5DTjhPrM54FJWMT-MTryKKJ43CQoOhrL5fvsLT30W2cLQnvwJGnRhlRNB-3iV-OxDUvnyxAZbUQgLUQxtNRJ0tJM-45zKDoLh-JobUPULxo9LUvXtgcdot5yBbc8eIna5hjkbfJBQttjQn3hfIkj2CKLK-oj-DK6DTu53q; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BAIDUID_BFESS=FF1EA490E8F8F1CE6C7FA5385721FEFE:FG=1; BD_HOME=1; H_PS_PSSID=35839_35104_31254_34584_35491_35872_35541_35796_35315_26350_35743; BA_HECTOR=018h01808lala5855p1h0m9ok0qHost: www.baidu.comsec-ch-ua: " Not A;Brand";v="99", "Chromium";v="98", "Google Chrome";v="98"sec-ch-ua-mobile: ?0sec-ch-ua-platform: "Windows"Sec-Fetch-Dest: documentSec-Fetch-Mode: navigateSec-Fetch-Site: noneSec-Fetch-User: ?1Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36
1、请求行
请求行中的请求方式:GET请求方式:GETPOST,HEAD,DELETE,PUT,TRACT...get:请求能够携带的参数比较少,大小有限制,会在浏览器的URL显示内容,不安全,但高效post:相反
2、消息头
Accept:告诉浏览器,他所支持的数据类型Cache-Control:缓存控制    Connection:告诉浏览器断开还是连接

4.4、HTTP响应

服务器--响应--客户端

百度

Bdqid: 0xe82971940005867b  缓存控制Connection: keep-alive    连接:保持连接Content-Encoding: gzip    编码Content-Type: text/html;charset=utf-8 类型
1.响应体
Accept:告诉浏览器,它所支持的数据类型Accept-Encoding:支持哪种编码格式 GBK UTF-8 GB2312 IS08859-1Accept-Language:告诉浏览器,它的语言环境Cache-Control:缓存控制Connection:告诉浏览器,请求完成是断开还是保持连接HOST: 主机..../.Refresh:告诉客户端,多久刷新1次;Location:让网页重新定位;
2、响应状态码(重点)

200:成功 200

3**:请求重定向

重定向:重新到新位置去302

4**:找不到资源404

资源不存在

5**:服务器代码错误 500 502:网关错误

常见面试:

当你的浏览器中地址栏输入地址并回车的一瞬间到页面展示出来,经历了什么

5、Maven

我为什么要学习这个技术?
在Javaweb中需要导入大量jar包,需要手动导入如何能让一个东西自动帮我导入和配置jar包所以有了maven

5.1、Maven项目架构管理工具

就是方便导入jar包的

Maven的核心思想:约定大于配置

有约束,不要去违反

Maven会规定好应该如何写Java

5.2、下载安装Maven

官网

下载完解压即可:

狂神建议:电脑上的所有环境都放在哟个文件夹下

5.3、环境变量配置

在我们的系统环境变量配置中配置如下配置:

M2_HOME maven目录下的bin目录MAVEN_HOME maven的目录在系统的path中配置%MAVEN_HOME%\bin

5.4、阿里云镜像

镜像:mirrors作用加速在setttins.xml文件中找到标签对,进行修改:
             nexus-aliyun        *,!jeecg,!jeecg-snapshots        Nexus aliyun        http://maven.aliyun.com/nexus/content/groups/public      

5.5、本地仓库

在本地的仓库,远程仓库;

建立一个本地仓库:

D:\Java_IDE\apache-maven-3.8.4\maven-repo

5.6、在IDEA中使用Maven

启动idea‘创建一个Maven项目等待初始化完毕观察仓库的变化,多了什么东西?IDEA中的maven设置注意更改默认位置over

5.7、创建一个普通的maven项目

这个只有在web下才有

5.8、在idea中标记

配置Tomcat

解决警告问题为什么会有这个问题:我们访问一一个网站,需要指定一个文件夹名字;****

5.10、POM文件

maven由于约定大于配置,我们之后的可能遇到我们写的配置文件无法导出

                                        src/main/resources                                    **/*.properties                    **/*.xml                                false                                        src/main/java                                    **/*.properties                    **/*.xml                                false                        

5.12、IDEA操作

目录树

5.13、解决遇到的问题

Maven 3.6.2解决方法:退Tomcat闪退Idea中每次都要重复配置Maven在IDEA的全局默认配置去配Maven项目中Tomcat中不能配置.乱码:
resp.setContentType("text/html");        resp.setCharacterEncoding("utf-8");
.
Maven仓库的使用

官网:​​https://mvnrepository.com/​​

6、什么是servlet

6.1、servlet简介

sun开发动态web的一门技术sun在这些api中提供了一个接口叫servlet,开发的两个步骤编写一个类,实现servlet接口把开发好的java类部署到web服务器中

把实现了servlet接口的Java程序叫做 servlet

6.2、HelloServlet

servlet接口在sun公司有两个默认的的实现类:

HttpServlet,GenericServlet

构建一个普通的maven项目,删掉里面的里面的scr目录,以后就在这里面建立model,这个空的工程就是文件的主工程关于maven父子工程的理解:父项目中会有
        servlet-01    
子项目中会有
没了  javaweb-02-servlet  com.mink  1.0-SNAPSHOT

继承差不多

Maven环境优化
修改web.xml为最新 (与tomcat匹配)
  
将整个maven的架构搭建完整
编写一个servlet程序
编写一个普通类实现servlet接口,这里我们直接继承HttpServlet
public class HelloServlet extends HttpServlet {    //由于get或者post知识请求的实现的不同方式,可以相互调用    public HelloServlet() {    }    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        PrintWriter writer = resp.getWriter();        writer.println("你好,mink");    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        super.doPost(req, resp);    }}
编写servlet的映射为何什么要映射?我写的是Java,但是要通过浏览器访问,浏览器需要连接web服务器,所以我们需要在web服务器中注册我写的servlet,还需要给他一个浏览器访问的路径
    hello    com.mink.servlet.HelloServlet            hello        /hello    
配置tomcat启动测试 ok

6.3、servlet原理

servlet是由web服务器调用,web服务器在收到浏览器请求之后会:

6.4、mapping问题

一个servlet可以指定一个映射路径一个servlet可以指定多个映射路径
            hello        com.mink.servlet.HelloServlet                hello        /hello                hello        /hello/1                hello        /hello/2                hello        /hello/3    
一个servlet可以指定通用映射路径
        hello        /hello/*    
请求默认路径
            hello        /*    
指定后缀或前缀等
            hello        /*    
优先级问题指定了固有的映射路径优先级最高,如果找不到就会走默认的处理请求;
        error        com.mink.servlet.ErrorServlet                error        /*    

6.5、ServletContext

web容器在启动的时候,它会为每个web程序都创建一个对应的ServletContext对象, 它代表了当前的web应用;

1、共享数据
在这个servlet保存的数据可以在另一个拿到
public class HelloServlet extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        //this. getInitParameter()        初始化参数        //this. getServletConfig()                Servlet配置        //this. getServLetContext()        Servlet上下文        ServletContext context = this.getServletContext();        String name="韩明";        context.setAttribute("name",name);//将一个数据保存在context中        resp.getWriter().print("hello");        System.out.println("hello");    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        doGet(req, resp);    }}
public class GetServlet extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        resp.setContentType("text/html");        resp.setCharacterEncoding("utf-8");        ServletContext context = this.getServletContext();        String name = (String) context.getAttribute("name");        resp.getWriter().print(("名字"+name));    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        doGet(req, resp);    }}
Archetype Created Web Application      hello    com.mink.servlet.HelloServlet        hello    /hello        getc    com.mink.servlet.GetServlet        getc    /getc  
2、获取初始化参数
      url    jdbc:mysql//localhost:3306/mybatis  
public class ServletDemo03 extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        resp.setContentType("text/html");        resp.setCharacterEncoding("utf-8");        ServletContext context = this.getServletContext();        String url = context.getInitParameter("url");        resp.getWriter().print(url);    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        doGet(req, resp);    }}
3、请求转发
public class ServletDemo04 extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        resp.setContentType("text/html");        resp.setCharacterEncoding("utf-8");        System.out.println("进去了04");        ServletContext context = this.getServletContext();        context.getRequestDispatcher("/gp").forward(req,resp);//        RequestDispatcher gp = context.getRequestDispatcher("gp");//        gp.forward(req,resp);    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        doGet(req, resp);    }}
    sd3    com.mink.servlet.ServletDemo03        sd3    /gp        sd4    com.mink.servlet.ServletDemo04        sd4    /sd4  
4、读取资源文件

Properties

在java目录下新建properties在resources下新建properties

两个都被打包到理同意路径下:classes,我们俗称这个路径为classpath

思路:需要一个文件流

public class ServletDemo05 extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        resp.setContentType("text/html");        resp.setCharacterEncoding("utf-8");        InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");        Properties prop = new Properties();        prop.load(is);        String uname = prop.getProperty("username");        String pwd = prop.getProperty("password");        resp.getWriter().print(uname+":"+pwd);    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        doGet(req, resp);    }}

访问测试即可ok!!!

6.6、HttpResponse

web服务器接收到客户端的http请求,针对这个请求分别创建一个代表请求的request对象,代表响应的一个HttpServletResponse;

我们如果要获取客户端亲求过来的参数,找如果IP要给客户端响应一些信息:找HttpServletResponse
1、简单分类

负责向浏览器发送数据的方法

ServletOutputStream getOutputStream() throws IOException;    PrintWriter getWriter() throws IOException;

负责向浏览器发送一些响应头的信息

//interface ServletResponsevoid setCharacterEncoding(String var1);    void setContentLength(int var1);    void setContentType(String var1);    void setBufferSize(int var1);//interface HttpServletResponse  void setIntHeader(String var1, int var2);    void addIntHeader(String var1, int var2);    void setStatus(int var1);

http状态码

public interface HttpServletResponse extends ServletResponse {    int SC_CONTINUE = 100;    int SC_SWITCHING_PROTOCOLS = 101;    int SC_OK = 200;    int SC_CREATED = 201;    int SC_ACCEPTED = 202;    int SC_NON_AUTHORITATIVE_INFORMATION = 203;    int SC_NO_CONTENT = 204;    int SC_RESET_CONTENT = 205;    int SC_PARTIAL_CONTENT = 206;    int SC_MULTIPLE_CHOICES = 300;    int SC_MOVED_PERMANENTLY = 301;    int SC_MOVED_TEMPORARILY = 302;    int SC_FOUND = 302;    int SC_SEE_OTHER = 303;    int SC_NOT_MODIFIED = 304;    int SC_USE_PROXY = 305;    int SC_TEMPORARY_REDIRECT = 307;    int SC_BAD_REQUEST = 400;    int SC_UNAUTHORIZED = 401;    int SC_PAYMENT_REQUIRED = 402;    int SC_FORBIDDEN = 403;    int SC_NOT_FOUND = 404;    int SC_METHOD_NOT_ALLOWED = 405;    int SC_NOT_ACCEPTABLE = 406;    int SC_PROXY_AUTHENTICATION_REQUIRED = 407;    int SC_REQUEST_TIMEOUT = 408;    int SC_CONFLICT = 409;    int SC_GONE = 410;    int SC_LENGTH_REQUIRED = 411;    int SC_PRECONDITION_FAILED = 412;    int SC_REQUEST_ENTITY_TOO_LARGE = 413;    int SC_REQUEST_URI_TOO_LONG = 414;    int SC_UNSUPPORTED_MEDIA_TYPE = 415;    int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416;    int SC_EXPECTATION_FAILED = 417;    int SC_INTERNAL_SERVER_ERROR = 500;    int SC_NOT_IMPLEMENTED = 501;    int SC_BAD_GATEWAY = 502;    int SC_SERVICE_UNAVAILABLE = 503;    int SC_GATEWAY_TIMEOUT = 504;    int SC_HTTP_VERSION_NOT_SUPPORTED = 505;    void addCookie(Cookie var1);    boolean containsHeader(String var1);    String encodeURL(String var1);    String encodeRedirectURL(String var1);    /** @deprecated */    @Deprecated    String encodeUrl(String var1);    /** @deprecated */    @Deprecated    String encodeRedirectUrl(String var1);    void sendError(int var1, String var2) throws IOException;    void sendError(int var1) throws IOException;    void sendRedirect(String var1) throws IOException;    void setDateHeader(String var1, long var2);    void addDateHeader(String var1, long var2);    void setHeader(String var1, String var2);    void addHeader(String var1, String var2);    void setIntHeader(String var1, int var2);    void addIntHeader(String var1, int var2);    void setStatus(int var1);    /** @deprecated */    @Deprecated    void setStatus(int var1, String var2);    int getStatus();    String getHeader(String var1);    Collection getHeaders(String var1);    Collection getHeaderNames();    default void setTrailerFields(Supplier> supplier) {    }    default Supplier> getTrailerFields() {        return null;    }}
2、常见应用
向浏览器输出消息下载文件要获取下载文件的路径文件名让浏览器支持我们下载的东西获取下载文件的输入流创建缓冲区获取OutputStream对象将FileOutputStream流写入到buffer缓冲区使用OutputStream将缓冲区中的数据输出到客户端
下载文件
public class FileServlet extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//        1. 要获取下载文件的路径        String realPath = "D:\\git\\gitcode\\kuangstudy\\javaweb\\javaweb-02-servlet\\response\\target\\classes\\bmw.jpg";        System.out.println("下载路径为:"+realPath);//        2. 文件名        String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);        System.out.println("文件名为:"+fileName);//        3. 让浏览器支持我们下载的东西        resp.setHeader("Content-Disposition","attachment;filename"+ URLEncoder.encode(fileName,"utf-8"));//        4. 获取下载文件的输入流        FileInputStream is = new FileInputStream(realPath);//        5. 创建缓冲区        int len;        byte[] buffer = new byte[1024];//        6. 获取OutputStream对象        ServletOutputStream os = resp.getOutputStream();//        7. 将FileOutputStream流写入到buffer缓冲区//        8. 使用OutputStream将缓冲区中的数据输出到客户端        while ((len= is.read(buffer))>0){            os.write(buffer,0,len);        }        is.close();        os.close();    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        doGet(req, resp);    }}
3、验证功能验证码

验证怎么来的

前端后端实现,需要java的图片类
4、实现重定向

一个web资源收到客户端请求后,通知客户端去访问另一个web资源,这就叫重定向

常见场景:

用户登录

response

void sendRedirect(String var1) throws IOException;    resp.sendRedirect();状态码:302
public class RedirectServlet extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//        resp.setHeader("Location","/respomse_war/image");//        resp.setStatus(302);        resp.sendRedirect("/response_war/image");    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        doGet(req, resp);    }}
面试题:请你聊聊请求转发和重定向的区别?
相同点都会跳转不同点请求转发url不变,307重定向地址栏变化为重定向地址 302
6.7、HttpServletResquest

HttpServletRequest代表客户端的请求,用户通过Http协议访问服务器,HTTP请求中的所有信息会被封装到HttpServletRequest,通过这个HttpServletRequest的方法,获得客户端的所有信息;

1、获取前端传递的参数
2、请求转发

重定向写 / 表示本项目; 转发不用写

转发是在服务器内部流转的

p16

7、Cookie、Session

7.1、会话

会话:用户打开浏览器,打开了很多超链接,逐个关闭这个过程就是会话

有状态会话:

你能怎么证明你是西开的学生?哈哈

你 西开

发票学校登记

一个网站,怎么证明你来过?

客户端 服务端

服务端给客户端一个信件,客户端下次访问服务端带上信件就可以了cookie服务器标记你来过了,下次来的时候匹配你 session

7.2、保存回家的两种技术

cookie

客户端技术(响应,请求)

session

服务器技术,利用这个技术,可以保存用户的会话信息?我们可以把信息或数据保存在session中

7.3、Cookie

从请求中拿到cookie信息服务器响应给客户端cookie
Cookie[] cookies = req.getCookies();//获得一个cookieCookie cookie = cookies[i];cookie.getName();//获取keycookie.getValue();//获得cookie的valueCookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis()+"");//resp.addCookie(cookie);//响应给客户端cookiecookie.setMaxAge(60*60*21);//设置cookie的有效期

一个网站cookie是否存在上限!

一个cookie只能保存一个信息一个web站点可以给浏览器发送多个cookie,最多20个cookie大小限制4kb300个cookie浏览器上限

删除Cookie

不设置有效期,关闭浏览器,自动失效设置有效期时间为0
中文编码解码:

7.4、Session(重点)

什么是session:

服务器会给每一个用户(浏览器)创建一个session对象一个session独占一个浏览器,只要浏览器没关,这个session就存在用户登陆之后,整个网站都可以访问---->保存购物车信息保存用户信息
Session和cookie的区别: .
Cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)Session把用户的数据写到用户独占Session中,服务器端保存(保存重要的信息, 减少服务器资源的浪费)Session对象由服务创建;

使用场景:

保存一个登录用户的信息;购物车信息;在整个网站中经常会使用的数据,我们将它保存在Session中; .

使用session

会话过期,在web.xml中配置

    1

8、JSP

8.1、 什么是jsp

java Server pages : Java服务器端页面,和servlet一样,用于动态web

最大特点:

写jsp就像在写html区别HTML只给用户静态jsp可以嵌入Java 为用户提供动态

8.2、jsp原理

思路:jsp如何执行

代码层面简单服务器内部工作tomcat中有一个work目录idea中使用tomcat的会在idea的tomcat中生产一个work

2018以后的IDEA在隐藏圓录AppData/ JetBrains里面

浏览器向服务器发送请求,不管访问什么资源,其实都是在访问servlet

jsp最终也会被转换成一个Java类

jsp本质上就是一个servlet
//初始化public void_  public void _jspInit() {  }//销毁  public void _jspDestroy() {  }// jsp Service  public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)      throws java.io.IOException, javax.servlet.ServletException {
判断对象内置一些对象
final javax.servlet.jsp.PageContext pageContext;//页面上下文    final javax.servlet.ServletContext application;//applicationContext    final javax.servlet.ServletConfig config;//config    javax.servlet.jsp.JspWriter out = null;//    final java.lang.Object page = this;//page当前页    javax.servlet.jsp.JspWriter _jspx_out = null;    javax.servlet.jsp.PageContext _jspx_page_context = null;
输出页面前增加的代码
response.setContentType("text/html; charset=UTF-8");      pageContext = _jspxFactory.getPageContext(this, request, response,            null, false, 8192, true);      _jspx_page_context = pageContext;      application = pageContext.getServletContext();      config = pageContext.getServletConfig();      out = pageContext.getOut();      _jspx_out = out;
以上的对象我们可以在jsp页面中直接使用

在jsp页面中,只要是Java代码就会原封不动的输出;

如果是HTML代码,就会被转换为

out.weite("\r\n")

8.3、jsp基础语法

任何语言都有自己的语法,

JSP作为Java技术的一种应用,它拥有一些自己扩充的语法(了解即可),Java所有语法都支持

jsp表达式
<%--  jsp表达式作用:用来将程序的输出,输出到客户端<%= 变量或表达式%>--%><%= new java.util.Date()%>
jsp脚本片段
<%--jsp脚本语言--%><%  int sum=0;  for (int i = 1; i <= 100; i++) {    sum+=i;  }  out.println("

sum="+sum+"

");%>
<%--  套娃--%>  <%    for (int i = 0; i < 5; i++) {  %>  

hello mink

<% } %>
jsp 声明
<%!    static {      System.out.println("loding servlet");    }    private int globalVar = 0;    private void mink(){      System.out.println("进入了方法MINK");    }  %>

JSP声明:会被编译到SP生成Java的类中!其他的,就会被生成到jspService方法中!

在jsp,嵌入java代码即可

几种格式

8.4、jsp指令

<%@page args.... %><%@include file=""%>    <%--将两个页面合二为一--%><%@ include file="common/header.jsp" %>

主题内容

<%@include file="common/footer.jsp"%>
<%--jsp标签拼接页面,本质还是三个--%>

hhhhhhh

8.5、九大内置对象

PageContext 存Request 存ResponseSession 存Application 【ServletContext】 存东西config 【ServletConfig】outpageexception
<%    pageContext.setAttribute("name1","mink001");//保存的数据只在一个界面中有效    request.setAttribute("name2","mink002");//保存的数据只在一次请求中有效,请求转发会携带    session.setAttribute("name3","mink003");//保存的数据只在一次会话中有效,从打开浏览器到关闭浏览器    application.setAttribute("name4","mink004");//只在服务器中有效,从打开服务器到关闭%>

request:客户端向服务器发送请求,产生的数据,用户看完就没用了,比如:新闻,用户看完没用的!session:客户端向服务器发送请求,产生的数据,用户用完一会还有用, 比如:购物车;

application:客户端向服务器发送请求,产生的数据,个用户用完了, 其他用户还可能使用,比如:聊天数据;

p20????????????????????????????

8.6、jsp标签,jstl标签,EL表达式

EL表达式:${}

获取数据执行运算获取web开发的常用对象
jsp标签
<%--jsp: include--%><%--http://localhost: 8080/jsptag. jsp?name-kuangshen&age=12--%>
JSTL表达式

弥补html的不足

核心标签(掌握部分)
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

使用步骤

引入队应的taglib
格式化标签
SQL标签
XML标签

9、JavaBean

实体类

实体类JavaBean有特定的写法:●必须要有一个无参构造●属性必须私有化●必须有对应的get/set方法;

一般用来和数据库的字段做映射 ORM;

ORM:对象关系映射

表-->类字段-->属性行记录-->对象

id

name

age

address

1

秦将1号

3

2

秦将2号

18

3

秦将3号

100

????????????????????????

10、MVC三层框架

Model

View

Controller

10.1、早些年

Servlet和Jsp都可以写ava代码;为了易于维护和使用;Servlet专注于处理请求,以及控制视图跳转JSP专注于显示数据

用户直接访问控制层,控制层就可以直接操作数据库;

servlet--CRUD-->数据库弊端:程序十分臃肿,不利于维护servlet的代码中:处理请求、响应、视图跳转、处理JDBC、处理业务代码、处理逻辑代码架构:没有什么是加一-层解决不了的!程序猿调用|JDBC|Mysq1 Oracle Sq1Server

10.2、MVC三层架构

Model

业务处理:业务逻辑(Service)数据持久层:CRUD(Dao)

View

展示数据提供连接发送Servlet请求

Controller

接受用户请求交给业务层处理响应的代码控制视图的跳转
登录--->接收用户的登录请求--->处理用户的请求(获取用户登录的参数,username, password) ---->交给业务层处理登录业务(判断用户名密码是否正确:事务) --->Dao层查询用户名和密码是否正确-->数据库

11、Filter

Filter:过滤器,过滤网站数据

处理中文乱码登录验证

servlet版本3.1.0

12、监听器

实现一个监听器的接口:(有N种)

13、过滤器、监听器常见应用

监听器:GUI种常用

用户登录后才能进入主页

标签: 配置文件 发送请求 初始化参数

上一篇:世界视讯!【算法实践】| 一步步带你实现寻找最大公约数
下一篇:每日热闻!C语言大一期末复习基础知识点