JSP
JSP 是一种运行在服务端的脚本语言,是动态网页开发的一种技术
静态网页和动态网页
- 静态网页由浏览器直接解释、执行并显示
- 动态网页由服务端的 JSP 引擎编译后再返回给浏览器显示
基础语法
脚本元素
<%-- 注释 --%>
<% // 程序片 %>
<%! // 成员变量和方法的声明 %>
<%= // 表达式 %>
指令标记
<%@ page ... %>
动作标记
<jsp:forward>
<jsp:param>
</jsp:forward>
JSP 内置对象
内置对象基本用法
- request
- response
- session
- application
- out
内置对象的作用域
作用域 | 有效范围 |
---|---|
page | 在本 JSP 页面内有效 |
request | 在此次请求过程中有效 |
session | 在客户端和服务器对话期间有效 |
application | 在服务器运行期间有效 |
JSP 与 JavaBean
Bean 的创建
<jsp:useBean id="实例名" name="包.bean名" scope="有效域" />
<jsp:getProperty name="实例名" property="属性名" />
<jsp:setProperty name="实例名" property="属性名" value="属性值" />
Servlet
Servlet 是 Java 语言的服务端应用程序,由服务器调用执行,处理用户、响应请求。
创建 Servlet
@WebServlet()
public class DemoServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) {
//执行请求
}
public void doPost(HttpServletRequest request, HttpServletResponse response) {
//执行请求
}
}
Servlet 生命周期
- 执行 Servlet 中的 init() 方法进行初始化工作
- 执行 Servlet 中的 service() 方法选择相应请求方法
- 执行 Servlet 中的 destroy() 方法销毁
重点目录
WebContent 目录
- 存放静态资源:包括 HTML 文件、CSS 文件、JavaScript 文件、图片等
- 存放 JSP 文件:即 Java Server Pages 文件,动态生成内容的页面文件
- 存放 WEB-INF 目录:该目录包含 Web 应用的配置文件,如 web.xml、以及其他例如日志文件、库文件等
META-INF 目录和 WEB-INF 目录中的资源文件仅服务端能访问。
MVC 模式
- JSP 负责用户层面的信息显示,充当 MVC 模式中的 View
- Servlet 负责各种任务的执行,充当 MVC 模式中的 Controller
- JavaBean 负责业务逻辑的处理,充当 MVC 模式中的 Model
过滤器和监听器
过滤器 (Filter)
public class EncodingFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
}
}
监听器 (Listener)
public class SessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
// 会话创建时的处理
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
// 会话销毁时的处理
}
}
EL/JSTL
EL 表达式
EL (Expression Language) 用于访问 JavaBean 对象、数组、集合对象
JSP 内置对象
${pageContext} <!-- 可以访问当前 jsp 页面中的内置 8 个对象 -->
作用域访问
${pageScope} <!-- 当前页面内的属性 -->
${sessionScope} <!-- 会话中的属性 -->
${requestScope} <!-- 请求范围内的属性 -->
${applicationScope} <!-- 整个应用内的属性 -->
请求参数
${param} <!-- 获取单个指定请求中的属性值 -->
${paramValues} <!-- 获取整个请求中的所有参数值数组 -->
请求头
${header} <!-- 获取请求头中指定的单个的属性 -->
${headerValues} <!-- 获取请求头中的所有属性 -->
Cookie 和初始化参数
${cookie} <!-- 获取 request 中的 Cookie 集 -->
${initParam} <!-- 获取初始化参数信息 -->
JSTL 标签库
引入 JSTL
<%@ taglib prefix="c" uri="" %>
常用标签
<!-- 条件判断 -->
<c:if test="${判断逻辑}">
<!-- 内容 -->
</c:if>
<c:choose>
<c:when test="条件1">
<!-- 内容1 -->
</c:when>
<c:otherwise>
<!-- 其他情况 -->
</c:otherwise>
</c:choose>
<!-- 循环 -->
<c:forEach var="item" items="${items}">
<!-- 循环内容 -->
</c:forEach>
<!-- 输出 -->
<c:out value="${expression}" default="默认输出"/>
<!-- 设置变量 -->
<c:set value="值" var="变量名" scope="page|request|session|application"/>
<!-- 删除变量 -->
<c:remove var="变量名"/>
<!-- URL 相关 -->
<c:url value="/path"/>
<c:redirect url="url"/>
<c:import url="url"/>
文件上传/下载
文件上传
<!-- 上传页面 -->
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file">
<input type="submit" value="上传">
</form>
文件下载
// 下载逻辑处理
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
JDBC 操作
数据库访问步骤
- 引入驱动
Class.forName("com.mysql.jdbc.Driver");
- 初始化连接
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/studb", "root", "password");
Statement st = con.createStatement();
ResultSet rs = st.executeQuery();
- 数据处理
while(rs.next()) {
// 处理数据
}
- 关闭连接
rs.close();
st.close();
con.close();
常用 SQL 语句
-- 插入数据
INSERT INTO table VALUES (?, ?, ?, ?);
-- 删除数据
DELETE FROM table WHERE column = ?;
-- 更新数据
UPDATE table SET column = ? WHERE id = ?;
-- 查询数据
SELECT * FROM table WHERE condition;
预处理语句
PreparedStatement pst = con.prepareStatement("INSERT INTO table_name VALUES (null, ?)");
pst.setString(1, value);
pst.executeUpdate();
支持的数据库
- SQL Server
- Oracle
- MySQL
- PostgreSQL