• JavaWeb学习(1)概念、原理、代码实现


    JavaWeb学习

    1.基本概念

    动态web资源开发的技术统称为JavaWeb
    web应用程序:可以提供浏览器访问的程序
    统一的web资源会被放在同一个文件夹下
    web应用程序 -->Tomcat:服务器

    一个web应用由多部分组成:

    • html css js
    • jsp servlet
    • java程序
    • jar包
    • 配置文件

    静态web的缺点:无法动态更新,无法和数据库交互,数据无法持久化

    web应用程序编写完毕后,若想提供给外界访问:需要一个服务器来统一管理

    2.web服务器

    2.1技术讲解

    ASP,JSP,php

    JSP/Servlet

    B/S:浏览器和服务器 C/S:客户端和服务器

    • sun公司主推的B/S架构
    • 基于Java语言
    • Servlet 是在服务器上运行的小程序

    2.2 web服务器

    服务器是一种被动的操作,用来处理用户的请求和给用户一些响应信息

    IIS:微软的;ASP,windows中自带的

    Tomcat:

    Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目.

    Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选

    Tomcat 实际上运行JSP 页面和Servlet

    3.Tomcat

    tomcat是啥?

    web容器

    tomcat更多用来做做一个应用容器,让java web app跑在里面的东西,对应同级别的有jboss,jetty等东西。

    一个支持Servlet API的Web服务器

    什么是容器?

    容器是一种为某种特定组件的运行提供必要支持的一个软件环境。例如,Tomcat就是一个Servlet容器,它可以为Servlet的运行提供运行环境。类似Docker这样的软件也是一个容器,它提供了必要的Linux环境以便运行一个特定的Linux进程。

    为什么需要tomcat?

    普通的Java程序是通过启动JVM,然后执行main()方法开始运行。但是Web应用程序有所不同,我们无法直接运行war文件,必须先启动Web服务器,再由Web服务器加载我们编写的HelloServlet,这样就可以让HelloServlet处理浏览器发送的请求。

    编写Web应用程序就是编写Servlet处理HTTP请求;

    tomcat的启动和配置

    可启动的端口

    tomcat默认端口:8080

    mysql:3306

    http:80

    https:443

    可配置的主机名称

    默认的主机名为:localhost -- 127.0.0.1

    默认网站应用存放的位置:webapps

    面试题:网站是如何访问的

    1.输入一个域名

    2.检查本机的hosts配置文件有没有这个域名映射;

    ​ 有:直接返回对应的ip地址,这个地址中,有我们需要访问的web程序,可以直接访问

    ​ 没有:去DNS服务器

    发布一个web网站

    网站应该有的架构

    --webspps: Tomcat服务器的web目录
    	-ROOT
    	-kuangstudy:网站的目录名
    		-WEB-INF
    			-classes:java程序
    			-lib:web应用所依赖的jar包
    			-web.xml
    		-index.html
    		-static
    			-css
    			-js
    			-img
    

    4.http

    4.1 什么是http

    http(超文本传输协议)是一个简单的请求-相应协议,通常运行在TCP之上

    -文本:html 字符串

    -超文本:图片、音乐、视频、定位、地图

    -80(默认端口)

    https:安全的

    -443

    5.Maven

    项目的打包方式:

    jar:java应用

    war:JavaWeb应用

    properties:配置

    dependencies:项目依赖

    问题:

    可能遇到写的配置文件无法被导出,或者生效的问题

    解决方案:

    在build中配置resources,防止资源导出失败

    6.Servlet

    6.1servlet简介

    Servlet是sun公司开发动态web的一门技术

    sun在这些API中提供的一个接口叫servlet

    如果开发一个servlet程序 两个步骤

    1.编写一个类 实现servlet接口

    2.把开发好的Java类部署到web服务器中

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

    6.2 HelloServlet

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

    编写一个Servlet程序:1.编写一个普通类2.继承HttpServlet

    编写Servlet映射:我们写的是Java 程序,但是要通过浏览器访问,而浏览器需要连接web服务器,所以需要在web服务器中注册我们写的servlet,还需要提供一个浏览器能够访问的路径

    6.3 servlet原理

    (我们编写的Servlet并不是直接运行,而是由Web服务器加载后创建实例运行,所以,类似Tomcat这样的Web服务器也称为Servlet容器。)

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

    request会从servixe(请求)拿到请求,并且把请求之后的响应交给response

    6.4 mapping

    <!-- 可以自定义后缀实现请求映射 *前不能加项目映射的路径-->
      <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.kuang.servlet.HelloServlet</servlet-class>
        
      </servlet>
      <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
      </servlet-mapping>
    

    一个Servlet可以执行一个、多个、通用映射路径

    优先级问题:指定了固有的映射路径优先级最高,如果找不到就会走默认的

    6.5 ServletContext

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

    1.共享数据

    建一个放置数据的类

    public class HelloServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            ServletContext context = this.getServletContext();
    
            String username = "zzj";
            context.setAttribute("username",username);
            
        }
    }
    

    一个读取数据的类

    public class GetServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            ServletContext context = this.getServletContext();
            String username = (String) context.getAttribute("username");
            resp.setCharacterEncoding("UTF-8");
            resp.getWriter().print(username);
        }
    
    
    }
    

    配置web.xml文件

        <servlet>
            <servlet-name>getc</servlet-name>
            <servlet-class>com.learning.servlet.GetServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>getc</servlet-name>
            <url-pattern>/getc</url-pattern>
        </servlet-mapping>
    
    2.获取初始化参数

    在web.xml中配置

        <servlet>
            <servlet-name>gp</servlet-name>
            <servlet-class>com.learning.servlet.ServletDemo3</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>gp</servlet-name>
            <url-pattern>/gp</url-pattern>
        </servlet-mapping>
    

    在类中获取

    public class ServletDemo3 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            ServletContext context = this.getServletContext();
            String url = context.getInitParameter("url");
            resp.getWriter().print(url);
    
        }
    }
    
    3.请求转发
       protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("进入了Sd4");
            ServletContext context = this.getServletContext();
           context.getRequestDispatcher("/gp").forward(req,resp);
        }
    
    4.读取资源文件

    Properties

    • 在java目录下新建properties

    • 在resources目录下新建properties

      发现:都被打包到了同一个路径下:classes 俗称类路径classpath
      思路:需要一个文件流

      public class ServletDemo05 extends HttpServlet {
          @Override
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              InputStream is = this.getServletContext().getResourceAsStream("WEB-INF/classes/com/learning/servlet/aa.properties");
              Properties prop = new Properties();
              prop.load(is);
              String username =  prop.getProperty("username");
              String password =  prop.getProperty("password");
      
              resp.getWriter().print(username + ":" + password);
          }
      }
      

    6.6 HttpServletResponse

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

    常见应用:

    1.向浏览器输出消息

    2.下载文件

    1. 获取下载文件的路径

    2. 下载的文件名

    3. 设置浏览器能够支持我们需要的东西

    4. 获取下载文件的输入流

    5. 创建缓冲区

    6. 获取OutputStream对象

    7. 将FileOutPutStream流写入到buffer缓冲区

    8. 使用OutPutStream将缓冲区中的数据输出到客户端

       protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              String realPath = "E:\\code\\test\\response\\src\\main\\resources\\1.png";
              System.out.println("下载文件的路径"+realPath);
      
              String fileName = realPath.substring(realPath.lastIndexOf("\\")+1);
              resp.setHeader("Content-Disposition","attachement;filename="+fileName);
              FileInputStream in = new FileInputStream(realPath);
              int len = 0;
              byte[] buffer = new byte[1024];
      
              ServletOutputStream out = resp.getOutputStream();
              while((len = in.read(buffer)) > 0){
                  out.write(buffer,0,len);
              }
              in.close();
              out.close();
          }
      

    6.7 HttpServletRequest

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

    **获取前端参数,请求转发 **

      protected void doGet(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");
    
         
          //resp.sendRedirect();重定向
          //this.getServletContext();转发
          //请求转发
    
          req.getRequestDispatcher("/success.jsp").forward(req,resp);
    
      }
    
    重定向和转发的区别

    相同点

    --页面都会实现跳转

    不同点

    --请求转发的时候 url不会发生变化;307

    -- 重定向的时候 url地址栏会发生变化;302

  • 相关阅读:
    57.大数据线性处理csdn数据(fread,fwrite) 百万数据秒读数据
    56.fread fwrite
    ZOJ 2724 Windows Message Queue (二叉堆,优先队列)
    priority_queue用法(转载)
    Runtime Error(ACCESS_VIOLATION)
    POJ 2309 BST(二叉搜索树)
    POJ 2255 Tree Recovery
    [转载]C++Assert()函数
    POJ 2499 Binary Tree
    POJ 3437 Tree Grafting
  • 原文地址:https://www.cnblogs.com/alwayszzj/p/15936407.html
Copyright © 2020-2023  润新知