22-IDEA项目创建打包&反编译
1、使用IDEA创建一个servlet web项目,并打包成war文件
-
在主菜单中选择【文件】> 【新建】>【项目】
- 在新建项目对话框中,选择Jakarta EE。
- 输入项目名称:
hello-jakartaee - 选择Web 应用程序模板,使用 Maven作为构建工具,并使用 Oracle OpenJDK 11 作为项目SDK;不要选择或添加应用程序服务器,我们稍后会进行操作。
单击“下一步”继续。

-
在版本字段中,选择 Jakarta EE 10,因为和后续使用的 Tomcat 10 兼容;依赖项中选择Servlet框架即可。点击创建

-
创建完成,目录结构如下:

-
打包为war文件
-
右击”m“,打开maven视窗
-
双击package生成打包文件
hello-jakartaee-1.0-SNAPAHOT.war
-
2、安装tomcat 10并成功启动,部署上一步中生成的war文件
-
下载 Tomcat ,这里选择
apache-tomcat-10.1.30版本,下载解压后目录结构如下
-
启动tomcat10,在 bin 目录下运行
startup.bat(注意:tomcat10 兼容版本为 java11+ )

-
访问
localhost:8080出现下面页面,说明启动成功
-
-
部署war文件
-
方法一:将war文件复制到
apache-tomcat-10.1.30\webapps目录下,并将文件重命名为test.war(方便后续访问);启动tomcat之后会新生成一个test目录即部署完成。访问如下
-
方法二:在IDEA里配置应用程序服务器,完成在IDEA里对war文件的部署
-
在主菜单栏 >【在运行/调试配置】>【编辑配置】,单击
+,选择添加【Tomcat 服务器】>【本地】 -
配置选择tomcat10所在的目录之后,底部会弹出警告,点击修复,需要修复下面问题:
在“部署”选项卡上,添加要部署的工件:
hello_Jakartaee:war exploded;URL会自动指向http://localhost:8080/hello jakartaee_war_exploded/
-
确定,保存
运行配置;运行tomcat,成功实现

-
-
3、参考课件,完善第一步的web项目,实现基于Session的认证功能
-
项目结构
- 需要一个登入页面(IndexServlet)
- 登入验证页面(SignInServlet)
- 登入成功后用户页面(AdminServlet)
- 用户退出登入功能(SignOutServlet)
-
实现
-
IndexServlet


-
SignInServlet
@WebServlet(urlPatterns = "/signin") public class SignInServlet extends HttpServlet { // 模拟一个数据库: private Map<String, String> users = Map.of("bob", "bob123", "alice", "alice123", "tom", "tomcat"); // GET请求时显示登录页: protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html"); PrintWriter pw = resp.getWriter(); pw.write("<h1>Sign In</h1>"); pw.write("<form action=\"/signin\" method=\"post\">"); pw.write("<p>Username: <input name=\"username\"></p>"); pw.write("<p>Password: <input name=\"password\" type=\"password\"></p>"); pw.write("<p><button type=\"submit\">Sign In</button> <a href=\"/\">Cancel</a></p>"); pw.write("</form>"); pw.flush(); } // POST请求时处理用户登录: protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String name = req.getParameter("username"); String password = req.getParameter("password"); String expectedPassword = users.get(name.toLowerCase()); if (expectedPassword != null && expectedPassword.equals(password)) { // 登录成功: req.getSession().setAttribute("user", name); resp.sendRedirect("/admin"); } else { resp.sendError(HttpServletResponse.SC_FORBIDDEN); } } }上述代码可知
SignInServlet在判断用户登录成功后,立刻将用户名放入当前HttpSession中且服务器会自动创建⼀个Session ID名为JSESSIONID然后通响应头Set-Cookie发送给浏览器
-
AdminServlet(
HttpSession取出用户名)

-
SignOutServlet(登出逻辑就是从
HttpSession中移除用户相关信息)
-
4、使用Filter组件,优化第一步的web项目,添加认证功能。
-
在没有使用
filter组件时,发现无需登入就可以直接访问用户界面,这是不合理的需要进一步的优化
-
添加 AuthFilter 类,使用
Filter组件对能直接访问 admin 页面的行为进行过滤
-
添加完成后,开启运行和调试,再次访问
http://localhost:8080/admin发现进入到了 AuthFilter 模块里,证明Filter组件生效
-
放行后跳转到了登入页面,说明过滤成功

5、使用IDEA创建一个SpringBoot项目,并打包成jar包
-
在主菜单中选择【文件】> 【新建】>【项目】
- 在新建项目对话框中,选择Spring Boot
- 输入项目名称:
hello-springboot - Maven作为构建工具,JDK选择对应 Oracle OpenJDK 17
单击“下一步”继续。

-
选择依赖项【web】>
Spring Web
-
创建完成,目录结构如下:

-
完善 Spring Boot 代码
-
编辑
HelloSpringbootApplication.java,添加Comments和Imports的方法
-
创建的 Spring Boot 应用程序端点位于 /hello,直接访问
http://localhost:8080会报错,需要添加一个静态 HTML 页面(在 /src/main/resources/static/ 下创建index.html文件)<!DOCTYPE HTML> <html> <head> <title>Your first Spring application</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <p><a href="/hello">Greet the world!</a></p> <form action="/hello" method="GET" id="nameForm"> <div> <label for="nameField">How should the app call you?</label> <input name="myName" id="nameField"> <button>Greet me!</button> </div> </form> </body> </html>运行程序,访问
http://localhost:8080/,出现如下画面证明 Spring Boot 项目完善成功

-
-
-
打包成jar包
-
右击”m“,打开maven视窗 > 【生命周期】
-
双击package生成打包文件
hello-springboot-0.0.1-SNAPSHOT.jar
-
6、通过jd-gui,对第5步生成的jar包进行反编译。
-
下载 jd-gui 完成后点击运行 jd-gui.exe 来准备对jar包进行反编译

-
点击左上角的 file > openfile 打开第5步生成的
hello-springboot-0.0.1-SNAPSHOT.jar可以看到反编译的内容
-
实现反编译:继续点击左上角的 file > save all sources ,将其保存到相应的目录,保存的文件为⼀个压缩文件,将其解压即可
-

浙公网安备 33010602011771号