比较疑惑的一点是当前页面(资源的url)与请求的url?
请求的url由webService接收,servelt当中也可以发送出这个url
进行页面跳转,是跳转到某个Jsp页面,这个页面的url是在哪里定义的?
在Jsp打印信息,这个报错?
报错原因: out 对象在 JSP 页面中默认是 JspWriter 类型,而不是 PrintWriter。JspWriter 没有 println 方法,只有 print 方法。
报错原因是 out 对象没有正确解析为 JspWriter 类型,导致 print 方法无法被识别。
提供修复建议: 确保 out 对象是 JspWriter 类型,并且在 JSP 页面中正确使用。可以通过显式声明 out 对象来解决这个问题。
JspWriter 类未导入,导致编译器无法识别该类型。
out 变量已经在 JSP 页面中隐式定义,再次声明会导致重复定义错误。
pageContext.getOut() 方法调用正确,但 out 变量已经存在,不需要重新获取
和解决log4j一样的方法,在头部导入import
根本原因就是pom.xml当中少导了一个包,jsp和servlet-api不在同一个包里
导入后就完全可以了,即使不用显示地声明
request.getRequestDispatcher("home.jsp").forward(request, response);什么意思?
forward有什么用
数据库连接问题
太抽象了,
太抽象了,拼错了
原因是init并没有被调用
不是这个原因,既然是对框架进行覆写,那么在调用的时候就会进行init的调用
'tomcat当中并没有mySql-connect的包,
但这很抽象,因为在java文件当中是可以连接上数据库的
这很合理,因为在doPost中是由tomcat服务器去连接数据库的,普通java文件的Main并不直接经过服务器,而是直接对数据库进行操作的,所以与Tomcat的lib无关,用的是Maven当中的mySql-connection包
而要经过Tomcat服务器就必须要在lib当中包含mySql的connect包
这里没有,所以会报错
解决
PRO2
PRO3
maven管理第三方库,但是tomcat启动时,用不到maven管理的Jar包,需要手动将由Maven管理的项目中第三方jar包逐个导入tomcat的lib目录下,服务器才可以调用这些第三方库的方法,有没有什么好的解决方法,可以不用一个一个调?
从Maven构建的WAR文件中提取Jar包并部署到Tomcat的lib目录下
maven的jar包与tomcat共享
java - 【曹工杂谈】Maven和Tomcat能有啥联系呢,都穿打补丁的衣服吗 - 个人文章 - SegmentFault 思否
Java -jar启动服务与Tomcat服务器上部署JAR之间的区别_jar运行和tomcat部署区别-CSDN博客
[BYD史前大坑]MAVEN与Tomcat的关系
通过这种方式启动的tomcat和maven可以说是一点关系都没有
构建过程中生成的输出文件,通常是Jar、War、Ear等格式的文件。这些文件包含了项目的代码、资源以及依赖的Jar包,它们是项目构建的结果,可以被部署到服务器或应用到其他项目中
工件是Maven项目构建的最终产物,它包含了项目的代码、资源文件以及所有传递性依赖(即项目直接依赖的库以及这些库所依赖的其他库)
每个Maven项目可以有一个或多个工件,这取决于项目的打包方式(Packaging)。例如,一个Web应用项目可能会有一个War类型的工件,而一个Java库项目可能会有一个Jar类型的工件
IDEA项目发布中,Web Application:Exploded和Web Application:Archive的详细解释_web application archive-CSDN博客
exploded
意味着项目的资源和类文件被展开放置在一个目录结构中,而不是被打包成一个Jar或War文件。这样做的好处是可以方便地进行调试和测试,因为可以直接修改资源文件而不需要重新打包整个应用
能否更改工件的方式?即不是exploded,而是每次必须打包,使其内部自带所依赖的jar包?
不,是如何在服务器部署时进行指定?因为那里是连接maven打出的jar包和Tomcat的,那里指定的是构建 'tomcatTest:Web exploded' 工件
-
JAR:
- JAR(Java Archive)是一种打包Java类文件和相关资源文件的压缩包格式。在Maven中,JAR通常用于打包Java库或应用程序。
-
Web 应用程序:展开型(Web Application: Exploded):
- 这是一个展开的Web应用程序,其中包含所有必要的文件和资源,但没有被打包成一个WAR文件。这种形式的部署允许在开发过程中进行快速迭代和测试,因为不需要重新打包应用程序。
-
Web 应用程序:归档型(Web Application: Archive):
- 这是一个打包好的Web应用程序,通常以WAR(Web Application Archive)格式存在。WAR文件是一个压缩包,包含了Web应用程序的所有文件和资源,以及所有必要的依赖库。
-
归档(Archive):
- 归档通常指的是WAR或EAR文件,它们是打包好的应用程序,包含了运行应用程序所需的所有文件和资源。归档文件中是否包含第三方Jar包取决于项目的依赖管理和打包配置。如果Maven配置正确,归档文件应该包含所有必要的依赖。
终于!!!!
使用 HS512 算法时,密钥的大小必须至少为 512 位(即 64 字节)。当前使用的密钥长度为 32 位(4 字节),这不符合 RFC 7518 的要求。
这四种方式有什么区别?
这里能否从cookie中取得用户名?cookie和token,和session什么关系?
Cookie 中存储的是 Token,而不是用户名。Token 是一个加密字符串,用于验证用户的身份。
如果你需要从 Cookie 中获取用户名,可以先从 Cookie 中获取 Token,然后通过 Token 解析出用户名
Cookie:客户端存储的小型数据片段,通常用于保存会话标识符(如 Token)。
Token:一种加密字符串,用于验证用户的身份。通常存储在 Cookie 或本地存储中。
Session:服务器端存储的用户会话数据。Session 通常与 Cookie 结合使用,Cookie 中存储的 Token 用于标识用户的会话。
就是说cookie是客户端存储的,里面包含着各种信息,其中一种关键的标识用户信息的就是token
Cookie cookie = new Cookie("sso-token",token);
对于token来说,相关信息是由加密算法进行加密后存储的,而处理完后的token等是以键值对,json格式存储在cookie当中的,如这里就是把token以名称sso-token进行对应
然后Session就是服务端存储的
客户端发来的请求当中自动包含cookie
Token当中能否存储多个字段的数据?如果能,那么最后解析时如何进行区分?
JWT(JSON Web Token)可以存储多个字段的数据。每个字段称为一个声明(claim),可以是标准声明(如 sub、exp、iat 等)或自定义声明
如果是自定义的,就直接用get的方法,以键值对的形式获取即可
如何在界面显示用户的cookie在当前所剩的有效时间
logger.info("匹配到了用户名且密码正确,生成token"); String token = jwtUtil.generateToken(username); logger.info("生成的token为: "+token); Cookie cookie = new Cookie("sso-token",token); cookie.setPath("/"); cookie.setMaxAge(3600); response.addCookie(cookie);
能否在前端实时更新这个时间?
为什么在loginServlet当中设置了request的maxAge,但是到home.jsp时,从request当中获取的maxAge为null?
这通常是因为 request 对象的生命周期较短,仅在一次请求-响应周期内有效。当用户从 LoginServlet 跳转到 home.jsp 时,request 对象已经重新创建,之前的属性不再存在。
解决方案:
使用 session 对象来存储 maxAge,因为 session 对象的生命周期较长,可以在多次请求之间共享数据。
在 LoginServlet 中将 maxAge 存储到 session 中。
在 home.jsp 中从 session 中获取 maxAge。
这个cookie是保存多久?保存到哪?保存到什么时候?在这个home.jsp页面的时候,点击web1.jsp时,request是否还会附带cookie?为什么会直接返回到index.jsp重新登录?
当点击web1.jsp会发生什么?发送的request是什么,有什么信息?如何进行调试查看?