JavaWeb 开发指南

2024-03-22 王汪旺
Java Web开发 后端

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 生命周期

  1. 执行 Servlet 中的 init() 方法进行初始化工作
  2. 执行 Servlet 中的 service() 方法选择相应请求方法
  3. 执行 Servlet 中的 destroy() 方法销毁

重点目录

WebContent 目录

  1. 存放静态资源:包括 HTML 文件、CSS 文件、JavaScript 文件、图片等
  2. 存放 JSP 文件:即 Java Server Pages 文件,动态生成内容的页面文件
  3. 存放 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}    <!-- 获取 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 操作

数据库访问步骤

  1. 引入驱动
Class.forName("com.mysql.jdbc.Driver");
  1. 初始化连接
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/studb", "root", "password");
Statement st = con.createStatement();
ResultSet rs = st.executeQuery();
  1. 数据处理
while(rs.next()) {
    // 处理数据
}
  1. 关闭连接
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