web应用技术02-个人网站 主要练习JSP的request对象和session对象1. 项目简介本项目是一个基于 JSP 的 Web 练习项目采用 Maven 构建并以 WAR 包形式部署。项目实现了注册、登录、会话管理、权限页面访问控制以及九九乘法表展示等基础功能。2. 技术与环境开发语言JavaJSP/Servlet 运行环境构建工具Maven打包方式war编码UTF-8登录校验方式固定账号密码admin/admin不连接数据库3. 功能模块注册模块填写姓名、密码、性别、年龄、爱好并提交展示登录模块输入用户名和密码正确后写入 Session 并跳转首页权限控制模块page1-page4 页面按是否登录显示内容退出登录模块使 Session 失效乘法表模块首页和授权页面展示三角形九九乘法表4. 目录说明核心页面src/main/webapp/index.jsp项目首页显示欢迎语与三角形乘法表src/main/webapp/login.jsp登录表单页src/main/webapp/loginCheck.jsp登录校验处理页src/main/webapp/zhuce.jsp注册表单页src/main/webapp/zhuceCkeck.jsp注册结果展示页src/main/webapp/page1.jsp登录授权示例页src/main/webapp/page2.jsp / page3.jsp / page4.jsp与 page1.jsp 同类权限页面src/main/webapp/logout.jsp退出登录页src/main/webapp/chengfabiao.jsp早期乘法表示例页1首页2没有登录的情况下点击page1page2page3page4则提示没有登录3注册信息提交以后显示所提交的信息4登录如果所输入的用户名和密码都是admin则跳转到首页。5登录成功以后再访问page1page2page3page4则提示欢迎您。6可以退出登录。5. 源码整理含注释5.1 index.jsp首页!--// 生成一个带边框、UTF-8编码的JSP九九乘法表页面样式简洁-- % page contentTypetext/html; charsetUTF-8 pageEncodingUTF-8 % !DOCTYPE html html head title首页/title style body { text-align: center; } .links { margin: 12px 0; } .links a { margin: 0 8px; } table { border-collapse: collapse; width: auto; margin: 20px auto; } td { border: 1px solid #000; padding: 8px 12px; text-align: center; white-space: nowrap; } /style /head body % // 从 Session 中读取登录用户用于首页欢迎语展示 String loginUser (String) session.getAttribute(loginUser); if (loginUser ! null) { % h2欢迎你% loginUser %/h2 % } % div classlinks a hreflogin.jsp去登录/a a hrefzhuce.jsp去注册/a a hrefpage1.jsppage1/a a hrefpage2.jsppage2/a a hrefpage3.jsppage3/a a hrefpage4.jsppage4/a a hreflogout.jsp退出登录/a /div h2 styletext-align: center;九九乘法表三角形/h2 table % // 外层控制行数1~9内层控制每行列数1~i for (int i 1; i 9; i) { % tr % for (int j 1; j i; j) { % td% j %×% i %% j * i %/td % } % /tr % } % /table /body /html5.2 login.jsp登录页% page contentTypetext/html;charsetUTF-8 languagejava % !DOCTYPE html html head title用户登录/title style form { width: 320px; margin: 60px auto; padding: 20px; border: 1px solid #ddd; border-radius: 8px; background: #fafafa; } .item { margin: 12px 0; } label { display: inline-block; width: 90px; } input { width: 190px; padding: 6px; } button { margin-left: 90px; padding: 6px 18px; } /style /head body h2 styletext-align: center登录页面/h2 form actionloginCheck.jsp methodpost div classitem label用户名/label input typetext nameusername required / /div div classitem label密码/label input typepassword namepassword required / /div button typesubmit登录/button /form /body /html5.3 loginCheck.jsp登录校验页% page contentTypetext/html;charsetUTF-8 languagejava % % // 统一请求编码避免中文参数乱码 request.setCharacterEncoding(UTF-8); String username request.getParameter(username); String password request.getParameter(password); // 固定账号密码校验本项目不连接数据库 if (admin.equals(username) admin.equals(password)) { // 登录成功后把用户名写入 Session供其他页面做权限判断 session.setAttribute(loginUser, username); response.sendRedirect(index.jsp); return; } % !DOCTYPE html html head title登录结果/title /head body styletext-align: center; margin-top: 60px h2登录不成功用户名或者密码不正确。/h2 a hreflogin.jsp返回登录/a /body /html5.4 zhuce.jsp注册页% page contentTypetext/html;charsetUTF-8 languagejava % html head title用户注册/title style form { width: 380px; margin: 50px auto; padding: 20px; border: 1px solid #ddd; border-radius: 8px; background: #fafafa; } .item { margin: 10px 0; } label { display: inline-block; width: 80px; } input[typetext], input[typepassword], input[typenumber] { padding: 5px; width: 200px; } button { padding: 6px 20px; margin-left: 80px; } .options { display: inline-block; } .options label { width: auto; margin-right: 10px; } /style /head body h1 styletext-align: center用户注册表单/h1 %-- 表单提交到zhuceCkeck.jsp提交方式为post --% form actionzhuceCkeck.jsp methodpost div classitem label姓名/label input typetext namename required / %-- required表示必填 --% /div div classitem label密码/label input typepassword namepassword required / /div div classitem label性别/label span classoptions label input typeradio namegender value男 required / 男/label labelinput typeradio namegender value女 / 女/label /span /div div classitem label年龄/label input typenumber nameage min1 max120 required / /div div classitem label爱好/label span classoptions label input typecheckbox namehobby value篮球 / 篮球/label label input typecheckbox namehobby value音乐 / 音乐/label label input typecheckbox namehobby value阅读 / 阅读/label label input typecheckbox namehobby value旅行 / 旅行/label /span /div button typesubmit提交/button /form /body /html5.5 zhuceCkeck.jsp注册结果页% page contentTypetext/html;charsetUTF-8 languagejava % % page importjava.util.Arrays % html head title注册结果/title style body { text-align: center; margin-top: 50px; } .result { display: inline-block; text-align: left; } /style /head body h1注册信息提交成功/h1 div classresult %-- 解决post提交中文乱码问题 --% % request.setCharacterEncoding(UTF-8); String name request.getParameter(name); String password request.getParameter(password); String gender request.getParameter(gender); String age request.getParameter(age); String[] hobbies request.getParameterValues(hobby); String hobbyText (hobbies ! null hobbies.length 0) ? Arrays.toString(hobbies).replace([, ).replace(], ) : 未选择; % %-- 获取表单提交的数据 --% p姓名% name %/p p密码% password %/p p性别% gender %/p p年龄% age % 岁/p p爱好% hobbyText %/p %-- 跳转回表单页面 --% a hrefzhuce.jsp返回重新提交/a /div /body /html5.6 page1.jsp权限页示例% page contentTypetext/html;charsetUTF-8 languagejava % !DOCTYPE html html head titlepage1/title style body { text-align: center; } .links { margin: 12px 0; } .links a { margin: 0 8px; } table { border-collapse: collapse; width: auto; margin: 20px auto; } td { border: 1px solid #000; padding: 8px 12px; white-space: nowrap; } .no-auth { margin-top: 60px; font-size: 20px; color: #c00; } /style /head body % // 仅当登录用户为 admin 时允许查看页面内容 String loginUser (String) session.getAttribute(loginUser); boolean loggedIn admin.equals(loginUser); if (loggedIn) { % h2欢迎您% loginUser %/h2 div classlinks a hrefindex.jsp首页/a a hrefpage2.jsppage2/a a hrefpage3.jsppage3/a a hrefpage4.jsppage4/a a hreflogout.jsp退出登录/a /div h3page1 - 九九乘法表/h3 table % for (int i 1; i 9; i) { % tr % for (int j 1; j i; j) { % td% j %×% i %% j * i %/td % } % /tr % } % /table % } else { % div classno-auth您还没有登录没有权限看到页面的内容。/div div classlinks a hreflogin.jsp去登录/a a hrefindex.jsp返回首页/a /div % } % /body /html5.7 logout.jsp退出登录页% page contentTypetext/html;charsetUTF-8 languagejava % % // 让当前会话失效实现退出登录 session.invalidate(); % !DOCTYPE html html head title退出登录/title /head body styletext-align: center; margin-top: 60px h2您已成功退出登录。/h2 a hreflogin.jsp重新登录/a a hrefindex.jsp stylemargin-left: 12px返回首页/a /body /html5.8 chengfabiao.jsp早期示例页% page contentTypetext/html; charsetUTF-8 pageEncodingUTF-8 % !DOCTYPE html html head titleJSP - Hello World/title /head body 输出九九乘法表 br % for (int i 1; i 9; i) { for (int j 1; j i; j) { String str j * i j * i; out.print(str nbsp); } out.println(br); } % /body /html6. 补充说明项目的目录结构如下page2.jsp、page3.jsp、page4.jsp 与 page1.jsp 的核心逻辑一致已登录admin显示欢迎语和乘法表未登录显示无权限提示由于本项目用于 JSP 基础练习登录与注册数据仅在请求/会话中使用不进行数据库持久化。后续如果要升级为完整系统可增加 Servlet 分层、DAO 持久层和数据库表结构。