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执行的基本步骤
执行基本上涉及六个基本步骤:
-
客户端将请求发送到 Web 服务器。
-
Web 服务器接收请求。
-
Web 服务器将请求传递给相应的 servlet。
-
servlet 处理请求并以输出的形式生成响应。
-
servlet 将响应发送回网络服务器。
-
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建立连接
1、从 Java Servlet 程序与 JDBC 连接的接口开始:
-
适当的 JDBC 环境应与数据库创建一起设置。
-
为此,请从 Internet 下载 mysql-connector.jar 文件,
-
下载后,将 jar 文件移动到 apache-tomcat 服务器文件夹,
-
将文件放在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请求参数会被封装成数据报文(请求体),不会显示在浏览器地址栏,相对安全,请求参数长度无限制