JavaWeb每日学习记录(第4天):JSP内置对象与标准动作标签的深入应用
2024年X月X日 星期X 晴
今天是JavaWeb学习的第四天,我主要深入学习了JSP的内置对象和标准动作标签。这些内容让我能够更高效地开发动态页面,并进一步优化了页面与Servlet之间的交互逻辑。
一、JSP内置对象的使用
JSP提供了多个内置对象,这些对象无需显式声明即可直接使用。它们为页面开发提供了极大的便利,尤其是request
、response
、session
和application
对象。我通过几个示例来巩固这些内置对象的使用。
示例1:使用request
和session
对象实现用户登录状态管理
我编写了一个简单的登录功能,用户登录后,将用户名存储到session
中,后续页面可以通过session
获取用户信息以判断用户是否已登录。
登录页面(login.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><title>用户登录</title>
</head>
<body><h1>用户登录</h1><form action="login" method="post">用户名:<input type="text" name="username"><br>密码:<input type="password" name="password"><br><input type="submit" value="登录"></form>
</body>
</html>
登录Servlet(LoginServlet.java)
@WebServlet("/login")
public class LoginServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");String username = request.getParameter("username");String password = request.getParameter("password");// 模拟用户登录逻辑if ("admin".equals(username) && "123".equals(password)) {HttpSession session = request.getSession();session.setAttribute("username", username); // 将用户名存入sessionresponse.sendRedirect("welcome.jsp");} else {response.sendRedirect("login.jsp?error=true");}}
}
欢迎页面(welcome.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><title>欢迎页面</title>
</head>
<body><%// 从session中获取用户名String username = (String) session.getAttribute("username");if (username == null) {response.sendRedirect("login.jsp");}%><h1>欢迎你,<%= username %>!</h1><a href="logout">退出登录</a>
</body>
</html>
退出登录Servlet(LogoutServlet.java)
@WebServlet("/logout")
public class LogoutServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {HttpSession session = request.getSession(false);if (session != null) {session.invalidate(); // 销毁session}response.sendRedirect("login.jsp");}
}
通过这个示例,我掌握了session
对象的使用,以及如何通过session
实现用户登录状态的管理。
二、JSP标准动作标签的使用
JSP标准动作标签提供了更简洁的方式来实现一些常见的操作,如页面跳转、数据传递等。我重点学习了<jsp:forward>
、<jsp:param>
和<jsp:include>
等标签。
示例2:使用<jsp:forward>
和<jsp:param>
实现页面跳转与参数传递
我编写了一个简单的表单提交示例,通过<jsp:forward>
标签将请求转发到另一个JSP页面,并传递参数。
表单页面(form.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><title>表单提交</title>
</head>
<body><h1>表单提交</h1><form action="process.jsp" method="post">用户名:<input type="text" name="username"><br>年龄:<input type="number" name="age"><br><input type="submit" value="提交"></form>
</body>
</html>
处理页面(process.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><title>处理结果</title>
</head>
<body><%String username = request.getParameter("username");int age = Integer.parseInt(request.getParameter("age"));%><jsp:forward page="result.jsp"><jsp:param name="username" value="<%= username %>"/><jsp:param name="age" value="<%= age %>"/></jsp:forward>
</body>
</html>
结果页面(result.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><title>结果页面</title>
</head>
<body><h1>提交结果</h1><p>用户名:<%= request.getParameter("username") %></p><p>年龄:<%= request.getParameter("age") %></p>
</body>
</html>
通过这个示例,我学会了如何使用<jsp:forward>
标签进行页面跳转,并通过<jsp:param>
传递参数。这种方式比直接使用RequestDispatcher
更加简洁。
三、使用<jsp:include>
实现页面复用
<jsp:include>
标签可以动态包含其他JSP页面的内容,非常适合实现页面的复用。例如,我编写了一个简单的页面,通过<jsp:include>
动态包含头部和尾部内容。
主页面(index.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><title>主页</title>
</head>
<body><jsp:include page="header.jsp"/><h1>欢迎访问主页</h1><jsp:include page="footer.jsp"/>
</body>
</html>
头部页面(header.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<header><h1>网站标题</h1><nav><a href="index.jsp">主页</a><a href="about.jsp">关于我们</a></nav>
</header>
尾部页面(footer.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<footer><p>© 2024 版权所有</p>
</footer>
通过<jsp:include>
标签,我实现了页面的复用,减少了代码冗余。
四、总结
今天我深入学习了JSP的内置对象和标准动作标签,并通过多个示例巩固了这些知识点。通过session
和request
对象,我实现了用户登录状态的管理;通过<jsp:forward>
、<jsp:param>
和<jsp:include>
标签,我掌握了页面跳转、参数传递和页面复用的方法。
这些内容让我对JSP的开发模式有了更深刻的理解,也让我能够更高效地开发动态页面。明天,我计划学习JSP的EL表达式和JSTL标签库,进一步提升页面开发的效率和可读性。