🗣 Wd提问: jsp动态网页编程
🤖 Ai回答: JSP(JavaServer Pages)动态网页编程 是一种基于 Java 的服务器端动态网页技术,用于开发具有动态内容的 Web 应用程序。它允许开发者将 Java 代码嵌入到 HTML 页面中,从而实现根据用户请求动态生成网页内容。
一、JSP 简介
全称:JavaServer Pages
本质:JSP 页面在运行时会被容器(如 Tomcat)自动编译成 Servlet。
文件扩展名:`.jsp`
运行环境:需要 Java EE 支持,通常部署在如 Apache Tomcat、Jetty、WebLogic 等 Web 容器中。
二、JSP 的工作原理
1、用户通过浏览器发送请求访问 `.jsp` 文件。
2、Web 容器检测 JSP 是否第一次被访问或已被修改。
3、若是,则将 JSP 编译为对应的 Java Servlet 源码(`.java`),再编译成字节码(`.class`)。
4、执行 Servlet,生成动态 HTML 内容。
5、将结果返回给客户端浏览器。
✅ JSP = HTML + Java 代码 + JSP 标签
三、JSP 基本语法
1、脚本元素
| 类型 | 语法 | 说明 |
|
| 脚本片段(Scriptlet) | `<% ..、%` | 插入 Java 代码 |
| 表达式(Expression) | `<%= ..、%` | 输出变量或表达式的值 |
| 声明(Declaration) | `<%! ..、%` | 声明变量或方法 |
示例:
jsp
<%@ page contentType=text/html;charset=UTF-8 language=java %
<html
<head<titleJSP 示例</title</head
<body
<h2欢迎使用 JSP!</h2
<% 脚本片段 %
<%
String name = 张三;
int age = 20;
out.println(你好, + name + ,你今年 + age + 岁。<br);
%
<% 表达式输出 %
当前时间:<%= new java.util.Date() %<br
<% 声明成员变量或方法 %
<%!
private int count = 0;
public int getCount() {
return ++count;
}
%
页面访问次数:<%= getCount() %
</body
</html
2、JSP 指令(Directives)
用于配置 JSP 页面行为。
| 指令 | 作用 |
| `<%@ page %` | 设置页面属性(如编码、错误页、导入包等) |
| `<%@ include %` | 静态包含其他文件 |
| `<%@ taglib %` | 引入标签库(如 JSTL) |
示例:
jsp
<%@ page import=java.util.* %
<%@ page errorPage=error.jsp %
<%@ include file=header.jsp %
<%@ taglib uri=http://java.sun.com/jsp/jstl/core prefix=c %
3、JSP 动作标签(Action Tags)
不写 Java 代码也能完成常见功能。
| 标签 | 功能 |
| `<jsp:include` | 动态包含页面 |
| `<jsp:forward` | 请求转发 |
| `<jsp:useBean` | 使用 JavaBean |
| `<jsp:setProperty` | 设置 Bean 属性 |
| `<jsp:getProperty` | 获取 Bean 属性 |
示例:使用 JavaBean
jsp
<jsp:useBean id=user class=com.example.User scope=session/
<jsp:setProperty name=user property=name value=李四/
姓名:<jsp:getProperty name=user property=name/
四、JSP 内置对象(9个)
| 对象 | 类型 | 用途 |
|
| `request` | HttpServletRequest | 获取请求数据 |
| `response` | HttpServletResponse | 响应客户端 |
| `out` | JspWriter | 向页面输出内容 |
| `session` | HttpSession | 会话管理 |
| `application` | ServletContext | 全局上下文 |
| `config` | ServletConfig | 获取初始化参数 |
| `page` | Object (this) | 当前 JSP 实例 |
| `pageContext` | PageContext | 页面上下文,统一访问其他对象 |
| `exception` | Throwable | 处理异常(需设置 `isErrorPage=true`) |
示例:获取请求参数
jsp
<%
String username = request.getParameter(username);
if (username != null) {
out.println(你好, + username);
}
%
五、JSP + JSTL(推荐做法)
为了减少 JSP 中的 Java 脚本,推荐使用 JSTL(JSP Standard Tag Library) 和 EL 表达式。
1、EL 表达式(Expression Language)
简化数据访问:
jsp
${user.name} <! 获取 session/user/name
${param.username} <! 获取请求参数
${header[User-Agent]}
2、JSTL 核心标签示例
引入:
jsp
<%@ taglib uri=http://java.sun.com/jsp/jstl/core prefix=c %
常用标签:
jsp
<c:if test=${age = 18}
您已成年。
</c:if
<c:forEach var=item items=${list}
${item}<br
</c:forEach
<c:redirect url=login.jsp/
六、典型开发流程(MVC 模式)
推荐使用 Servlet + JSP + JavaBean 构建 MVC 结构:
M(Model):JavaBean / Service / DAO
V(View):JSP 页面(仅负责展示)
C(Controller):Servlet(处理请求、调用业务逻辑、跳转视图)
示例结构:
webapp/
├── index.jsp
├── login.jsp
├── WEB-INF/
│ └── web.xml
src/
├── com/example/Servlet/LoginServlet.java
├── com/example/Bean/User.java
├── com/example/Dao/UserDao.java
七、部署与运行
1、安装 JDK 和 Tomcat
2、创建动态 Web 项目(可用 Eclipse / IntelliJ IDEA / VS Code + Extension)
3、编写 JSP 文件放入 `webapp` 目录
4、部署到 Tomcat
5、启动服务器,访问:`http://localhost:8080/your-app/index.jsp`
八、优缺点
✅ 优点:
与 Java 生态无缝集成
支持组件化开发(JavaBean、自定义标签)
可重用性强,适合大型企业应用
跨平台
❌ 缺点:
在 JSP 中写 Java 脚本易导致“脏代码”
性能略低于纯 Servlet(首次访问需编译)
已逐渐被现代框架替代(如 Spring Boot + Thymeleaf)
九、学习建议
虽然 JSP 技术较老,但仍是理解 Java Web 原理的重要基础。建议后续学习:
Servlet API
JSTL & EL
Filter & Listener
MVC 设计模式
进阶:Spring MVC / Spring Boot
十、简单完整示例:用户登录
1、login.jsp
jsp
<form action=LoginServlet method=post
用户名:<input type=text name=username<br
密码:<input type=password name=password<br
<input type=submit value=登录
</form
2、LoginServlet.java
java
@WebServlet(/LoginServlet)
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter(username);
String password = request.getParameter(password);
if (admin.equals(username) && 123.equals(password)) {
request.getSession().setAttribute(user, username);
response.sendRedirect(welcome.jsp);
} else {
request.setAttribute(error, 用户名或密码错误!);
request.getRequestDispatcher(login.jsp).forward(request, response);
}
}
}
3、welcome.jsp
jsp
<%@ page contentType=text/html;charset=UTF-8 language=java %
<h1欢迎,${user}!</h1
<a href=logout.jsp退出</a
如果你有具体的需求,比如“如何连接数据库”、“如何上传文件”、“如何防止重复提交”,可以继续提问,我可以提供详细代码示例。
📣 商家广告:





0
IP地址: 98.109.254.179
搜索次数: 0
提问时间: 2025-11-06 20:48:28
🛒 域名购买:
53.chat
touwang.com.cn
zm.gs
010.hk
67.plus
6.hn.cn
qn.gs
279.net.cn
g-y.cn
jqr.sale
❓️ 热门提问:
顺丰香港官网
mysql服务器端安装
金税盘托管
1080ti服务器租用
vps知乎
nginx 最新版
mysql程序source导入
机房网络维护
时间校准服务器
机房ups的作用
豌豆Ai站群搜索引擎系统
🌐 域名评估:
su7.baby
118.net.cn
oo.ah.cn
wmbw.cn
kimi.shopping
aaaa.jx.cn
uu.ah.cn
u.he.cn
axuh.cn
dahq.cn
⛏ 最新挖掘:
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜
🖌 热门作画:
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊:
🔗 友情链接:
한국어 웹사이트
Us search engine
ai提问
🧰 站长工具:
Ai工具 whois查询 搜索
📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。