2022-08-29 第五组 张明敏 学习笔记

4 篇文章 0 订阅

Vue

1.键盘事件

回车=>enter
删除=>delete (捕获“删除”和“退格”键)
退出=>esc
空格=>space
换行=>tab (必须配合keydown使用)

2.组件

  • 模块 向外提供特定功能的js程序,一般就是一个js文件;复用js,简化js的编写,提高js运行效率
  • 组件 用来实现局部(特定)功能效果的代码集合(html/css/js/image…) ;复用编码,简化项目编码,提高运行效率

Vue中使用组件的三大步骤:

定义组件(创建组件)
注册组件
使用组件(写组件标签 )

如何定义一个组件?

使用Vue.extend(options)创建,其中options和new Vue(options )时传入的那个options几乎一样,但也有点区别:
1.e1不要写,最终所有的组件都要经过一个vm的管理,由vm中的e1决定服务哪个容器。
2. data必须写成函数,避免组件被复用时,数据存在引用关系。
3. 使用template 可以配置组件结构。
 

Servlet

一种生成动态网页的方法,那就是 Java Servlet

Servlet 是在支持 Java 的 Web 服务器或应用程序服务器上运行的 Java 程序。

用于处理从网络服务器获得的请求,处理请求,产生响应,然后将响应发送回网络服务器。

1、Servlet 属性:

  • Servlet 在服务器端工作。

  • Servlet 能够处理从网络服务器获得的复杂请求。

可以从图像本身描述 Servlet 架构,如下所示:

2、Servlet有三种创建方式

1、实现Servlet接口,就要实现里面的方法

//一次创建,到处服务,一个Servlet只会有一个对象,服务所有的请求
/*
 * 1.实例化(使用构造方法创建对象)
 * 2.初始化  执行init方法
 * 3.服务     执行service方法
 * 4.销毁    执行destroy方法
 */
​

2、继承 GenericServlet 类 (不常用)

3、继承 HttpServlet 方法(最常用)

继承HttpServlet方法,然后重写doGet或者 doGet() 方法处理请求即可。

它们的关系:

3、Servlet执行的基本步骤

执行基本上涉及六个基本步骤:

  1. 客户端将请求发送到 Web 服务器。

  2. Web 服务器接收请求。

  3. Web 服务器将请求传递给相应的 servlet。

  4. servlet 处理请求并以输出的形式生成响应。

  5. servlet 将响应发送回网络服务器。

  6. Web 服务器将响应发送回客户端,客户端浏览器将其显示在屏幕上。

4、Java Servlet 的优点

  • Servlet比 CGI更快,因为它不涉及为收到的每个新请求创建新进程。

  • 用 Java 编写的 Servlet 与平台无关。

  • 多线程单实例,由于 Servlet 不在单独的进程中运行,因此消除了为每个请求创建新进程的开销。只有一个实例同时处理所有请求。这也节省了内存并允许 Servlet 轻松管理客户端状态。

  • 它是一个服务器端组件,因此 Servlet 继承了 Web 服务器提供的安全性。

  • 为Java Servlet 设计的API自动获得了Java 平台的优势,如平台无关和可移植性。此外,它显然可以使用在 Java 平台(如JDBC )上创建的各种 API来访问数据库。

Servlet 容器提供的服务:

  • 网络服务:加载一个 Servlet 类。加载可能来自本地文件系统、远程文件系统或其他网络服务。Servlet 容器提供发送请求和响应的网络服务。

  • 基于 MIME 的消息解码和编码:提供基于 MIME 的消息的解码和编码服务。

  • 管理 Servlet 容器:管理 Servlet 的生命周期。

  • 资源管理管理静态和动态资源,例如 HTML 文件、Servlet 和 JSP 页面。

  • 安全服务:处理资源访问的授权和认证。

  • 会话管理:通过将会话**ID**附加到 URL 路径来维护会话。

5、Servlet 生命周期

从创建直到毁灭的整个过程

以下是 Servlet 遵循的过程:

  • Servlet 初始化后调用 init () 方法,只初始化一次。

  • Servlet 调用 service() 方法来处理客户端的请求。

  • Servlet 销毁前调用 destroy() 方法,只会被调用一次。

  • 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

servlet 实例

// 导入必需的 java 库
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
​
// 扩展 HttpServlet 类
public class HelloWorld extends HttpServlet {
 
  private String message;
​
  public void init() throws ServletException
  {
      // 执行必需的初始化
      message = "Hello World";
  }
​
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // 设置响应内容类型
      response.setContentType("text/html");
​
      // 实际的逻辑是在这里
      PrintWriter out = response.getWriter();
      out.println("<h1>" + message + "</h1>");
  }
  
  public void destroy()
  {
      // 什么也不做
  }
}

6、使用 Servlet 读取表单数据

request.getParameter() (重要)

  • 返回值是字符串

  • 根据key获取对应值value

a标签是可以传参数的,用字符串拼接

a标签和我们直接在地址栏输入的地址没区别,都是get请求

注解里有loadOnStartu=1,写完要去web.xml配置


常见的客户端传参方式:

get,post

浏览器地址栏输入一定是get请求

超级连接:一定是get

表单:get或post

request

request.getParameterValues()

  • 返回值是String型数组

前台是 checkbox 复选框

String[] hobbies = request.getParameterValues("hobby")

request.getParameterNames()

拿键

Enumeration<String> parameterNames = request.getParameterNames();
// 获取请求中传过来参数的key值,可根据它获取value
while(parameterNames.hasmoreElements()){
    parameterNames.hasmoreElements()
}

getParameterMap()

键值对全拿

Map<String String[]> map = request.getParameterMap();
for(map.Entry<String String[]> name:map.entrySet()){
    String key = name.getKey();
    String[] value = name.getValue();
    System.out.println(key + "--->" + Arrays.toString(value));
}

请求转发

多个servlet处理一个请求,得用同样的request或response对象

请求转发是在服务器完成的,与客户端无关

request.getRequestDispatcher().forward()

第一个括号参数:转发的servlet地址(目标servlet)(注解里写的)

第二个括号参数:request和response对象

作用域

// 往request作用域添加一个name属性:“小红”
request.setAttribute("name","小红")
// 取name属性
request.getAttribute("name")

只要请求转发,作用域里面的东西永远都在,

response

getWriter()

addHeader()

重定向

response.sendRedirect()

请求转发和重定向的区别

1、重定向是两次请求,转发是一次请求

2、转发浏览器地址栏不变,重定向地址栏会发生变化

3、重定向是客户端行为,请求转发是服务器行为

4、重定向可以定向到任意地址,转发只能发生在项目内

    /*
        匹配数据库
            通过JDBC连接数据库,并且查询记录,返回结果
            操作步骤:
            1、加载驱动,驱动包放在哪?数据库连接池。
            2、JDBC,工具类。
            3、处理结果
        注册--新增
        登录--查询
     */

和MySQL建立连接

先决条件: ServletJDBC 连接

1、从 Java Servlet 程序与 JDBC 连接的接口开始:

  1. 适当的 JDBC 环境应与数据库创建一起设置。

  2. 为此,请从 Internet 下载 mysql-connector.jar 文件,

  3. 下载后,将 jar 文件移动到 apache-tomcat 服务器文件夹,

  4. 将文件放在apache-tomcat 目录中的lib文件夹中。

</head>
<body>
<form action="InsertData" method="post">
    <p>ID:</p>
    <input type="text" name="id">
    <br>
    <p>UserName:</p>
    <input type="text" name="username">
    <br>
    <p>Password:</p>
    <input type="password" name="password">
    <br>
    <br>
    <input type="submit">
</form>
</body>
</html>

2、使用 JDBC 连接创建 Java Servlet 程序

3、使用这个类方法,在 Java Servlet 程序中创建一个对象

4、从 HTML 文件中获取数据:要从 HTML 文件中获取数据,使用 request 对象,该对象调用getParameter()方法从通道中获取数据。成功插入后,将创建 writer 对象以显示成功消息。

从 Servlet 进行插入操作后,数据将反映在 MySQL 数据库中

@WebServlet("/InsertData")   // 映射路径 唯一
public class DbServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
       // 设置编码集
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.addHeader("content-type","text/html;charset=utf-8");
        // 连上数据库,从输入框获取数据 (SQL语句来插入)
        String sql = "insert into my_servlet values(null,?,?)";  // 我的表中有三列
        PrintWriter out = response.getWriter(); // 写出提示
        // 如何设置这两个参数?----> 输入框获取
        UserDao user = new UserDao();
        try {
            // 获取请求
            int i = user.update(sql, request.getParameter("username"), request.getParameter("password"));
            // 响应 
            if (i != 1) {
                out.write("出错啦!");
            }else {
                out.write("已加入啦!");
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }finally {
            out.close();
        }
    }
}

一些需要细心的地方

  • Servlet以线程方式处理请求

request

转发:一次请求,request响应后即毁

response

  • 重定向:两次请求,地址栏变

  • response.getWriter();

PrintWriter out = response.getWriter();  // 文本打印输出流
// out.write(name);  // 写字符
out.println(name);// 写字节
  • response 对象定义格式:响应行、响应头、响应空行、响应体

出现405

没有在doPost() 里调用this.doGet(request,response)方法

保险起见,写一个,然后在另一个方法里也调用一下~

name为servlet服务,id 为脚本服务

/ 和 /* 区别:

1、/* 是路径匹配,可以匹配所有请求,路径匹配优先级仅次于精确匹配,它会覆盖所有的扩展名匹配(恶劣)

2、/ 是servlet中的特殊匹配模式,优先级最低,不会覆盖任何url-pattern 匹配所有请求

get/post区别:

get请求参数会在浏览器地址栏中显示,不安全,请求长度有限制(1kb以内),没有请求体,无法分通过request对象设置一些参数

post请求参数会被封装成数据报文(请求体),不会显示在浏览器地址栏,相对安全,请求参数长度无限制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值