上一篇
html挑转jsp
- 行业动态
- 2025-05-01
- 3090
通过HTML表单提交至Servlet,由Servlet利用RequestDispatcher.forward()将请求转发至目标JSP,实现页面跳转并传递数据
HTML与JSP核心差异对比
特性 | HTML | JSP |
---|---|---|
动态能力 | 静态页面 | 支持Java代码嵌入(脚本片段<% %> ) |
标签库 | 基础HTML标签 | 支持JSP标签(如<jsp:include> )、JSTL标签 |
数据处理 | 无内置数据处理能力 | 可直接操作request 、session 等对象 |
文件扩展名 | .html | .jsp |
编译机制 | 直接解析 | 需编译为Servlet后执行 |
转换步骤与代码示例
基础结构转换
HTML示例:
<!DOCTYPE html> <html> <head>用户登录</title> </head> <body> <form action="login.jsp" method="post"> 用户名: <input type="text" name="username"/><br/> 密码: <input type="password" name="password"/><br/> <input type="submit" value="登录"/> </form> </body> </html>
JSP改进版:
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head>用户登录</title> </head> <body> <form action="loginProcess.jsp" method="post"> 用户名: <input type="text" name="username"/><br/> 密码: <input type="password" name="password"/><br/> <input type="submit" value="登录"/> </form> <% String error = (String)request.getAttribute("error"); if(error != null){ %> <font color="red"><%= error %></font><br/> <% } %> </body> </html>
生成
HTML静态内容:
<p>当前时间:12:00:00</p>
JSP动态实现:
<p>当前时间:<%= new java.util.Date() %></p>
或使用EL表达式:
<p>当前时间:${currentTime}</p> <% request.setAttribute("currentTime", new java.util.Date()); %>
数据库交互(MVC模式)
HTML+Servlet架构:
login.html
(表单页面)LoginServlet.java
(处理逻辑)success.html
(结果页面)
JSP整合方案:
<%@ page import="java.sql." %> <% String username = request.getParameter("username"); String password = request.getParameter("password"); Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123456"); String sql = "SELECT FROM users WHERE username=? AND password=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, username); pstmt.setString(2, password); rs = pstmt.executeQuery(); if(rs.next()){ %> <h2>登录成功!欢迎<%= rs.getString("username") %></h2> <% }else{ %> <h2>用户名或密码错误</h2> <% } }catch(Exception e){ e.printStackTrace(); }finally{ if(rs!=null) rs.close(); if(pstmt!=null) pstmt.close(); if(conn!=null) conn.close(); } %>
关键注意事项
- 编码设置:必须声明
<%@ page contentType="text/html;charset=UTF-8" %>
避免中文乱码 - 脚本位置:
<% %>
脚本片段不能放在<html>
标签外部 - 路径问题:JSP包含文件使用
<%@ include file="header.jsp" %>
,而非HTML的相对路径 - MVC推荐:复杂业务逻辑应放在Servlet,JSP仅负责视图层
常见问题与解答
问题1:JSP页面出现HTTP Status 500
错误怎么办?
解答:
- 检查Java代码语法(如缺少分号、括号不匹配)
- 查看服务器日志(如Tomcat的
catalina.out
) - 确认导入的类是否存在(如JDBC驱动)
- 移除敏感代码逐步调试
问题2:如何防止JSP页面被直接访问?
解答:
- 将核心逻辑放在Servlet中,JSP仅作跳转
- 使用
<security-constraint>
限制访问(在web.xml
中配置) - 在JSP顶部添加校验代码:
<% if(session.getAttribute("user") == null){ response.sendRedirect("login.jsp"); return; }