cgb2110-day18

2024-08-22 06:48
文章标签 cgb2110 day18

本文主要是介绍cgb2110-day18,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 一,response响应不同的数据
      • --1,响应JSON串
    • 二,重定向
      • --1,概述
      • --2,测试
      • --3,总结
    • 三,综合练习
      • --1,创建前端网页html
      • --2,创建Servlet
      • --3,测试
    • 四,过滤器Filter
      • --1,概述
      • --2,入门案例
      • --3,总结
      • --4,生命周期
      • --5,过滤器的匹配规则
      • --6,使用Filter的场景
    • 五,扩展:Vue的钩子函数
    • 六,复习
      • --1,数据库重点
      • --2,前端重点!!!

一,response响应不同的数据

–1,响应JSON串

package cn.tedu.cgb2110boot03.response;import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;//Servlet充当服务器:接受请求Request + 做出响应Response
// http://localhost:8080/resp/servlet01?id=10&name=张三
@WebServlet("/resp/servlet01")
public class ResponseServlet01 extends HttpServlet {//如果是get请求,Servlet会自动调用doGet()protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//TODO 解析请求参数String id = request.getParameter("id");String name = request.getParameter("name");//响应时使用的默认的字符集iso-8859-1,为了防止响应时的中文乱码问题,加以下代码response.setContentType("text/html;charset=utf8");//响应解析到的数据//2.获取字节流--写出数据????
//        ServletOutputStream out = response.getOutputStream();
//        //字节流只能写出字节int.byte[].如果想要写出字符串,必须把字符串变成byte[]---getBytes()
//        out.write(id.getBytes());
//        out.write(name.getBytes());//1.获取字符流--写出数据PrintWriter out = response.getWriter(); out.write(id);out.write(name);//String json= {"id":"10","name":"张三"} ;//使用转义符号\把"转义成一个普通字符,因为JSON串的key和value必须被"包裹//String json= "{\"id\":\"10\",\"name\":\"张三\"}" ;//动态拼接字符串--- "+id+"String json= "{\"id\":\""+id+"\",\"name\":\""+name+"\"}" ;out.println(json);//提供了一个换行写出的功能}
}

二,重定向

–1,概述

和请求转发的过程有点相似.
过程: 浏览器访问A,A告诉浏览器继续访问B,由B返回结果
特点: 两次请求两次响应, 浏览器的地址栏会变 ,两个request/response , 可以重定向到任何资源
实现: response.sendRedirect(“目标资源的访问规则”)

–2,测试

RedirectServlet

package cn.tedu.cgb2110boot03.response;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/redirect/servlet01")
public class RedirectServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("RedirectServlet...doGet()");//特点: 地址栏会变  +  两次请求两次响应两个request/response ???request.setAttribute("name","jack");//重定向--参数是目标的访问规则(目标资源没有任何要求)response.sendRedirect("/redirect/servlet02");
//        response.sendRedirect("http://www.baidu.com/");}
}

RedirectServlet02

package cn.tedu.cgb2110boot03.response;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/redirect/servlet02")
public class RedirectServlet02 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("RedirectServlet02...doGet");System.out.println( request.getAttribute("name") );//null}
}

–3,总结

请求转发和重定向有什么区别???
请求转发: 是request对象的功能, 一次请求一次响应 , 地址栏不变, 同一个request,目的资源必须是同一个项目里的
重定向: 是response对象的功能, 两次请求两次响应 , 地址栏改变, 不同的request,目的资源没有要求

三,综合练习

–1,创建前端网页html

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>测试前后端整合</title><!-- 1.导入vue.js:离线或者在线两种导入方式 <script src="vue.js"></script>--><script src="http://unpkg.com/vue/dist/vue.js"></script><script src="http://unpkg.com/axios/dist/axios.min.js"></script></head><body><!-- 2.准备数据渲染区 --><div id="app"><button @click="get()">点我获取数据</button><h1>姓名: {{name}}</h1><h1>年龄: {{age}}</h1></div><!-- 3.创建Vue对象 --><script>new Vue({el:"#app", //挂载点data(){ //数据return {name:"",age:0}}   ,methods:{//ajax访问Servletget(){//get方式传递参数的两种写法:直接拼在地址栏里或者用params描述// let url = "http://localhost:8080/test/servlet01?name=tony&age=18";// axios.get(url).then(let url = "http://localhost:8080/test/servlet01";axios.get(url,{ params:{name:'tony',age:18 } }).then(//axios.post(url, {name:'tony',age:18 } ).then(a => {//a保存着servlet程序返回的结果console.log(a);console.log(a.data);//tony18 ->{name: 'tony', age: '18'}//把从Servlet中获取的数据,利用起来this.name = a.data.name;this.age = a.data.age;})}}})</script></body>
</html>

–2,创建Servlet

接受请求,解析请求参数,做出响应

package cn.tedu.cgb2110boot03.axios;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;//接受请求,解析请求参数,做出响应
@WebServlet("/test/servlet01")
public class ServletDemo extends HttpServlet {//处理get请求protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//放行 js访问后端Servlet程序 的请求response.setHeader("Access-Control-Allow-Origin","*");//1,解析请求参数String name = request.getParameter("name");String age = request.getParameter("age");//2,给浏览器做出响应PrintWriter out = response.getWriter();
//        out.write(name+age); //这种格式不对,前后端交互数据的格式必须组织成json串才行!!//3,把name和age拼接成json串给前端返回
//        name=tony&age=18
//        {"name":"tony","age":"18"}
//        "{\"name\":\"tony\",\"age\":\"18\"}"//在把name和age的值,动态拼接字符串String json= "{\"name\":\""+name+"\",\"age\":\""+age+"\"}" ;out.write(json);}
}

–3,测试

在这里插入图片描述

四,过滤器Filter

–1,概述

对资源访问时可以添加拦截的条件. 如果满足条件 才能访问 目标资源.如果不满足条件,目标资源将不允许被访问.
开发步骤:
1, 实现Filter接口,并用注解开发
2, 重写三个抽象方法,init() / destroy() / doFilter()核心方法
3, 配置过滤器的条件

–2,入门案例

package cn.tedu.cgb2110boot03.filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;@WebFilter("/*")
public class Filter1 implements Filter {public void destroy() {}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {System.out.println("Filter1...doFilter");chain.doFilter(req, resp);//放行请求,有这行代码就可以访问目标资源}public void init(FilterConfig config) throws ServletException {}}

–3,总结

在这里插入图片描述

–4,生命周期

package cn.tedu.cgb2110boot03.filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;@WebFilter("/*") //所有请求,都会触发过滤器
public class Filter1 implements Filter {//生命周期三大阶段:初始化  服务   销毁//关闭服务器时,会自动触发, 只调用一次public void destroy() {System.out.println("Filter1...destroy");}//核心方法,主要用来配置过滤器的过滤规则,可以判断是否放行public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {System.out.println("Filter1...doFilter");chain.doFilter(req, resp);//放行请求,有这行代码就可以访问目标资源}//启动项目时,就被主动加载了所有的过滤器, 只调用一次public void init(FilterConfig config) throws ServletException {System.out.println("Filter1...init");}
}

–5,过滤器的匹配规则

package cn.tedu.cgb2110boot03.filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;//@WebFilter("/a/*")//按照指定的前缀来匹配
//@WebFilter("*.html")//按照指定的后缀来匹配
//@WebFilter("/1.html")//必须访问指定文件
@WebFilter("/*")//访问啥资源,都会触发过滤器
public class Filter2 implements Filter {public void destroy() {}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {System.out.println("过滤器2已经生效~");chain.doFilter(req, resp);}public void init(FilterConfig config) throws ServletException {}}

–6,使用Filter的场景

//核心方法,主要用来配置过滤器的过滤规则,可以判断是否放行public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {System.out.println("Filter1...doFilter");//Filter用处: 解决了所有Servlet的共性需求---处理中文乱码!!!(权限.缓存.日志..)//在访问所有Servlet前,先来把中文乱码问题解决一下resp.setContentType("text/html;charset=utf8");chain.doFilter(req, resp);//放行请求,有这行代码就可以访问目标资源}

五,扩展:Vue的钩子函数

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>测试 Vue的生命周期</title><script src="http://unpkg.com/vue/dist/vue.js"></script></head><body><div id="app"><h1>{{msg}}</h1></div><script>let vm = new Vue({el:"#app",data(){return{msg:'hello vue!'}},//vue生命周期的初始化阶段的钩子函数:beforeCreate(){//还没new Vue时触发的console.log('beforeCreate..');},created(){//刚new完Vue时触发的console.log('created..');} ,//vue生命周期的服务阶段的钩子函数:(挂载,更新beforeUpdate/updated)beforeMount(){//还没有解析插值表达式console.log('beforeMount..');console.log(this.$el);//获取el对应的dom节点的内容} ,mounted(){//刚解析插值表达式console.log('mounted..');console.log(this.$el);} ,//vue生命周期的销毁阶段的钩子函数:(销毁)//需要在浏览器的控制台输入vm.$destroy()才会执行销毁阶段beforeDestroy(){console.log('beforeDestroy..');},destroyed(){console.log('destroyed..');}})</script></body>
</html>

六,复习

–1,数据库重点

事务 : 概念 / 四大特性
外键约束
多表联查( 笛卡尔积 / 连接查询!!! / 子查询!!! )
索引/视图(概念,分类,语法,执行计划/执行性能explain,优缺点)
SQL优化的方案

–2,前端重点!!!

Vue框架(概念, 特点, 指令, 组件化 , axios的语法/优缺点 , vue-cli , vue项目)
json串 / js对象 / js函数(传参,有返回值,调用)

这篇关于cgb2110-day18的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1095543

相关文章

Day18_0.1基础学习MATLAB学习小技巧总结(18)——MATLAB绘图篇(1)

利用空闲时间把碎片化的MATLAB知识重新系统的学习一遍,为了在这个过程中加深印象,也为了能够有所足迹,我会把自己的学习总结发在专栏中,以便学习交流。 参考书目:《MATLAB基础教程 (第三版) (薛山)》 之前的章节都是基础的数据运算用法,对于功课来说更加重要的内容是建模、绘图、观察数据趋势,接下来我会结合自己的使用经验,来为大家分享绘图、建模使用的小技巧。 二维图形绘制 在本章开

Lesson_for_java_day18--java中的IO流(序列化、ByteArrayStream、DataStream、RandowAccessFile)

一、序列化: package sonyi;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java

LeetCode_sql_day18(1841.联赛信息统计)

描述 表: Teams +----------------+---------+| Column Name | Type |+----------------+---------+| team_id | int || team_name | varchar |+----------------+---------+team_id 是该表主

Leetcode Day18 股票买卖专题

买卖股票重要的部分就是状态转移, 通常是二维i,0/1代表第i天持有/不持有股票时的最大利润 Part 1: 不限制交易次数 122 每天都可买入卖出 class Solution:def maxProfit(self, prices: List[int]) -> int:# on day i, we have stockdp1 = [0] * len(prices)# on day i,

LeetCode面试题Day18|LC61 旋转链表

题目1: 指路: . - 力扣(LeetCode)61 旋转链表 思路与分析: 如果我没记错的话这个题应该在一次周赛上出现过,但我做题的网站太杂忘记哪一次了。对于旋转链表我的第一思路是将其做成环形链表,返回原链表中最右边的节点,剩下的依次返回,那么第一次旋转也就是原链表中倒数第一个节点旋转后的位置应该是新链表的第一个,原链表中倒数第二个节点旋转后的位置应该是倒数第二个……以此类推我们得到旋

Day18_Netty

文章目录 NettyIO 模型Java有哪些数据类型零拷贝深拷贝和浅拷贝的区别是什么?BIO、NIO、AIO的区别是什么?Netty 是什么?Netty 基于 NIO,那为啥不直接用 NIO 呢? / 为什么要用 Netty?Netty 应用场景了解么?那些开源项目用到了 Netty?Netty的核心组件是什么?请解释Netty的事件模型是什么样的。什么是Channel和ChannelPip

cgb2107-day18

文章目录 一,Spring AOP--1,概述--2,使用步骤--3,创建切面--4,测试创建启动类创建HelloController 类测试 二,两个框架的整合--1,需求--2,开发步骤0,项目结构1,RunApp启动类2,application.yml改端口3,Car类,封装数据4,CarService接口,定义抽象方法5,CarServiceImpl实现类,重写抽象方法6,CarC

cgb2110-day15

文章目录 一,ElementUI的使用--1,修改Person.vue--2,重启服务器,测试 二,Vue项目中定义路由功能--1,自定义组件--2,创建router.js文件--3,修改App.vue文件--4,总结--5,调用流程 三,Tomcat服务器--1,概述--2,使用步骤--3,目录结构--4,修改Tomcat端口号 四,在Tomcat服务器中添加自定义资源--1,新建资源(在

cgb2110-day14

文章目录 一,Vue项目--1,前提--2,下载--3,测试也可以直接把压缩包,解压到你的vue的工作空间(E:\workspace\vue)启动项目打开浏览器测试 二,自定义Vue组件--1,创建Person.vue组件(在src/components里)--2,注册组件(修改App.vue)--3,测试 三,练习Vue项目里的自定义组件--1, 创建Car.vue--2,修改App.v

cgb2110-day13

文章目录 一,路由的练习--1,测试 二,Vue的Ajax--1,概述--2,测试 三,使用axios--1,需求--2,创建1.json文件--3,创建网页,发起Ajax的请求,请求数据并处理数据--4,总结 四,Vue脚手架--1,Vue生命周期--2, 一些概念--3,安装nodejs--4,修改npm网址--5,安装脚手架 五,Vue项目--1,创建工作空间--2,下载项目-----