JavaEE总结

​JavaEE概述-环境配置

  • 把写好的程序配属到服务器上

  • 用户通过浏览器去远程访问服务器

  • Java程序去处理用户发送的请求

如何搭建后端服务器 如何开发后端服务器程序 实现前后的交互

什么是服务器

  • 广义:计算机硬件+软件 狭义:计算机软件(把文件部署到服务器上,通过地址访问,服务器就会做出响应) 中间件

  • 现在需要运行Java程序 需要安装一个支持Java程序的服务器(apache的tomcat)

  • Apache软件基金会 非盈利的开源软件项目

如何安装服务器

  • tomcat是支持Java程序运行的 所以它的运行需要jdk的支持

  • JAVA_HOME(变量)配置jdk的根就行

目录介绍:

  1. bin 放的是命令

  2. conf 配置文件

  3. lib 架包

  4. webapps 程序

把项目部署到服务器

访问服务器: 输入IP+端口号

  1. 创建project

  2. framework

  3. 集成(configtion)

  4. 部署deploy

tips:文件路径要看好-然后就是tomcat是根目录

🎄servlet概述(Server Applet)

它运行在web服务器中

服务器分开(减小服务器压力)

所以就只放Java代码

😭Servlet是运行在服务器中的,服务器负责Servlet和客户端的通信以及调用Servlet方法

Servlet的作用

  1. 接受用户发送的请求数据

  2. 调用其他的Java程序来处理请求

  3. 根据处理结果,响应给客户端

继承HttpServlet

重写方法

配置servlet

xml是可扩展标记语言,主要是存储数据,用于特定的格式存储,且配置信息

项目编译问题

  • 改写了源代码 但是out文件没有编译(build -> artifact -> clean)

  • 端口已经占用了 改端口HTTP port

🐛HTTP协议

  • 超文本传输协议

  • HyperText Transfer Protocol

  • 应用层协议

  • 基于TCP/IP通信协议来传输数据

HTTP请求

请求行 请求头 请求体

  • 请求行:包括请求方式 请求资源名称 http版本

  • 请求头:包含服务器信息,主机地址,客户端一些环境信息,以键值对的形式传递

  • 请求体:存放的是post请求方式向服务器端发送数据

在HTTP请求中两种方式区别

get:没有请求体 点击超链接 表单"method = "get" 地址栏输入地址

post:表单"method = "post"

区别

get 可以发数据但不能过多 但是主要从服务器获取数据

  1. 为什么不能过多? 因为直接是在地址栏发送键值对信息 有限制

  2. 不能传递敏感信息(密码之类)

  3. 在地址后加?以及相应的V=K&&V2=K2

post 主要用于向后端发送请求 将发送的信息放在请求体中 不会在外显示(地址) 相对安全 传输数据量大 没有限制 所以可以提交文件

由于前端有两个方法 我们后端有相应的两个方法doGet()doPost()

为什么继承HttpServlet

由于前段有get和post请求方法

后端有doGet和doPost

为什么有service 这两个doGet和doPost就不显示呢

虽然调用的是doget和dopost

但是 构造 init destroy 和 service一样会执行

父类有这些方法

当我们没有需要初始化内容时可以不重写init但是服务器依然会调用(调父类的)

父类中重写了service() 根据请求方式 判断 调doget或者是dopost

先找service后确定是doget或者是dopost

Service和doGet和doPost方法的区别

Service方法: 不管是get方式还是post方式的请求,如果Servlet类中有service方法,则优先调用Service方法。

doGet方法: 在没有service方法的情况下如果是get方式的请求所调用的处理请求的方法

doPost方法: 在没有service方法的情况下如果是post方式的请求所调用的处理请求的方法

类加载方法实例

子类重写了doget和dopost没有重写service

父类有doget和dopost和service

那么首先根据顺序 先调service(因为子类重写 所以调的是父类的)后调(子类的doget和dopost 因为重写了)

想说的是尽管先调的是父类方法 但是如果调子类重写的方法那么还是调子类的重写方法

点击也发送了数据 请求行 请求头(没有请求自己的数据)

接受请求数据_响应

  • 当一次http请求发送到服务器时,tomcat会将请求中所有的数据,都封装到一个实现HttpServletRequest类的对象中

req.getParameter()//post 都接到的是String

req.getParameterValues()

  • resp.getWriter();

🐾响应

HttpServletRequest是接口

 System.out.println(req.getMethod());
        System.out.println(req.getRemoteAddr());
        System.out.println(req.getRequestURL());
        System.out.println(req.getRemotePort());
        System.out.println(req.getProtocol());
        System.out.println(req.getServletPath());

resp.getWriter打印 也要设置码

resp.setHeader()

"text/html;charset=utf-8"

也可以用Print(重写了write()方法)

有相应的req的文档**

中文问题?

get方式用的utf-8 不会乱码

post 在请求体里 所有会乱码

req.setCharacterEnconde

getparameter 返回的都是String

🥊​多选框比较特殊

getparametervalues

编译文件把class文件部署到服务器 所以每次都要重启

为什么jar包一定放在lib文件夹下面,我换个地方就不行。这个其实如果你不是用服务器是没有任何问题的,但是当你使用了web服务器类似于tomcat这种,那么你就要小心了。jar包导入工作空间这个是由我们人为控制的,我导哪个空间就有哪个,我不导行不行,可以,编译器会自动去寻找他所需要的jar包,但是服务器就不会他只会去寻找lib文件夹下的jar包并将他们拷贝到服务器上(就是在你服务器的当前项目的lib文件夹)

过滤器

作用:对服务器web资源进行拦截(权限控制)

Java8之后接口的方法可以defalut 可以让类选择不实现

  1. 先在filter文件夹中创建一个filter类 实现 filter接口(可以有多个过滤器)

  2. 在xml配置过滤器

  3. 配置哪一些请求地址进入过滤器

  4. filterchain.doFilter 过滤链 过滤完了继续执行

📴异步交互

同步请求:后端响应的内容,会把整个页面内容覆盖掉,打断了客户端的其他操作

➡️异步(不同步)请求:通过Js对象 发送 异步请求 后端响应的内容会被浏览器的js对象接收到 再从js对象更新到某一个标签⬅️

前端发送异步请求:js提供了一个XMLHttpRequest对象,代理网页向后端发送一个请求(异步的),最终在js中将接收到数据更新到网页的某个标签上

前后端交互时 不会影响网页其他操作

Ajax Asynchronous JavaScript and XML

以前后端给前端响应时,是将数据封装到一个XML文件中的,前端接受到后解析XML

json(利用了XMLHttpRequest)现在用的是这个 替换了xml

异步好处就是 页面无刷新,不打断用户的操作

操作:就是new 一个XMLhttpRequest对象 对象方法:open() send() setRequestHeader()

就绪状态码说明
0XMLHttpRequest对象没有完成初始化
1开始发送请求
2发送完成
3读取响应 还没结束
4响应结束

根据题例得知虽然发送请求结束 但是并没有得到后端返回的数据引出后面的内容 跨域

跨域

前端问题,请求发送到了后端,是在前后端分离的架构中出现.浏览器默认不允许接受别的网页发送数据

出现的原因:前后端分离 使用ajax发送请求

是由于同源策略造成的影响,是浏览器对JavaScript施加的安全限制.

跨域严格定义:协议 域名 端口 有一个不同就是跨域

http是默认的80端口 https默认是443端口

为什么要限制跨域访问?

安全问题

那为什么又要跨?同公司子域想互相访问 就需要跨域

解决跨域问题

前端解决

后端解决在响应头里添加

?什么是跨域

?为什么要跨域

?跨域访问有什么问题

?如何解决

Axios框架

  • 是一个ajax框架

Json数据格式

JavaScript Object Notation

轻量级的数据交换格式

JS -- 请求 --> Java中将数据封装在对象中

不能直接把对象打印到网页中

不同语言间数据交换 早期是使用XML文件

json是为了不同语言间传输数据方便的一种标准数据格式

{k:v,k:v}标准json字符串格式

登录前后端交互

  1. 安装axios组件

  2. 配置导入

  3. 发送axios的post请求

vue-cli版

  • 静态界面写好

  • 把axios加入进来(npm install axios) 变成异步交互

  • 在main.js配置(模仿vue-cil的pdf)

    后端需要的:

    与数据库交互 返回一个用户对象

    在servlet中判断返回出来的对象

    如果不是空(在定义一个CommonResult)

    返回什么

    是空返回什么

还要注意前端传到后端的数据是:类型的 后端收不到 所以还要加一个js方法改成=类型的

接下来目标

  1. 登录成功后,在前端保存用户信息,并且在main界面中显示用户账号

    1. sessionStorage浏览器提供的会话级别的存储空间,浏览器关闭立刻关闭

    2. localStorage 本地存储 一直存在 需要手动清除

  2. 来到main组件时,需要判断用户是否登录

    1. 直接来到main界面 需要判断 如果没有登录的话 需要转到login界面(可以直接在main页面中的mounted中加一个判断 但是后面很多页面都需要判断账号是否登录 麻烦)

    2. 所以需要路由导航守卫(vue的pdf中) 每次发生路由时,都会触发这个方法 (在router的index.js里加)

  3. web会话跟踪技术(session)

    1. 已经进入到管理界面的话 后端是怎么知道是该账号进行的操作呢? 为什么后端不知道?

      • 因为http的请求是无状态的(请求-->响应模式 每次请求是独立的)

web会话跟踪技术

在交互过程中,后端如何知道是哪个用户在此进行操作?

因为http请求是无状态的(请求-->响应模式 每次请求是独立的)

解决:需要让后端知道哪个用户发送的

在登录成功后 后端生成一个token(字符串 令牌 携带了用户信息 并且加密) 将此字符串响应到前端 每一次交互时 将token都放在请求头中 后端接收到token后 进行验证是否符合规则,不符合直接响应验证失败

token三部分(头部,载荷,签证)

(基于token的会话跟踪)

JWT(Json Web Token) 不需要在服务器端存储

  1. 导入jwt组件的jar

  2. 导入jwtutil类 包含生成token 验证token 解析token

  3. 三部分 header payload signature(base64转码)

增删改查

1.点击学生管理 让学生管理显示在Main中

  • 点击学生管理

  • src新建目录:views/student/List.vue(跟标签)

  • 每建一个vue都要配路由(index.js)

  • 把vue放在 学生管理的 index中 (/地址)

  • 没反应? 给el-menu 加 router

  • 应该在main中打开 不是创建一个新的页面

  • 路由嵌套::vue应该是main的子集路由 children:

  • 在Main中显示 <router-view></router-view> 让子集显示

2.功能分析

  • 学生管理 (对学生信息进行增删改查) 学生表(id学号姓名性别专业手机地址) ---> 专业表

  • 数据库设计 两张表

  • 给表加测试数据--

3.编码

  1. 查询学生信息 展示所有学生信息 在main中

  2. 在list中发一个请求 查询学生列表

  3. 后端接受到 与数据库连接

  4. 响应一个list的学生列表

  5. 前端页面动态的显示出(JsonFormat 后端解决时间转换问题)

学习api

4.新增

  1. 点击新增按钮 弹出一个学生信息表格 输入内容 点击保存 和 后端交互 存入数据库 前端页面刷新

  2. 弹出的表格学生信息 浮在 list上 分开写 vue 💛在一个组件中 导入另一个组件三部曲::1在script中 import 2components 注册组件 3 在template中放置组件(ref引用 名字) this.$ref.add.

  3. 补充组件信息(专业要mounted....)

专业表:名字 操作人 操作时间

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值