JavaWeb 开发的核心基础知识
JavaWeb 基础知识
一、JavaWeb 概述
1. 什么是 JavaWeb
- 使用 Java 技术解决 Web 领域相关问题的技术总和
- 基于请求/响应模型的应用程序开发
2. 核心组件
- Servlet:处理请求和响应的 Java 类
- JSP:Java Server Pages,动态页面技术
- Filter:过滤器,预处理请求和后处理响应
- Listener:监听器,监听 Web 应用中的事件
二、Servlet 技术
1. Servlet 基础
- 生命周期:
init()
:初始化,只执行一次service()
:处理请求(内部调用 doGet/doPost)destroy()
:销毁,只执行一次
- 常用类:
HttpServlet
:抽象基类HttpServletRequest
:请求对象HttpServletResponse
:响应对象
2. Servlet 配置
-
web.xml 配置:
<servlet><servlet-name>DemoServlet</servlet-name><servlet-class>com.example.DemoServlet</servlet-class> </servlet> <servlet-mapping><servlet-name>DemoServlet</servlet-name><url-pattern>/demo</url-pattern> </servlet-mapping>
-
注解配置(Servlet 3.0+):
@WebServlet("/demo") public class DemoServlet extends HttpServlet {...}
3. 请求与响应
-
获取请求参数:
String username = request.getParameter("username"); String[] hobbies = request.getParameterValues("hobby");
-
设置响应:
response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<html><body>Hello World</body></html>");
三、JSP 技术
1. JSP 基础
- JSP 本质:最终会被编译为 Servlet
- JSP 组成:
- HTML 代码
- Java 代码(脚本、表达式、声明)
- JSP 指令和动作
2. JSP 脚本元素
- 脚本片段:
<% Java代码 %>
- 表达式:
<%= 表达式 %>
(输出表达式结果) - 声明:
<%! 变量或方法声明 %>
3. JSP 指令
-
page 指令:
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" import="java.util.*" %>
-
include 指令(静态包含):
<%@ include file="header.jsp" %>
-
taglib 指令(引入标签库):
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
4. JSP 内置对象
对象名 | 类型 | 说明 |
---|---|---|
request | HttpServletRequest | 请求对象 |
response | HttpServletResponse | 响应对象 |
session | HttpSession | 会话对象 |
application | ServletContext | 应用上下文 |
out | JspWriter | 输出流 |
pageContext | PageContext | 页面上下文 |
page | Object | 当前页面实例 |
config | ServletConfig | Servlet 配置 |
exception | Throwable | 异常对象(仅错误页可用) |
四、会话跟踪技术
1. Cookie
-
创建 Cookie:
Cookie cookie = new Cookie("name", "value"); cookie.setMaxAge(60*60*24); // 有效期1天 response.addCookie(cookie);
-
读取 Cookie:
Cookie[] cookies = request.getCookies(); for (Cookie c : cookies) {if ("name".equals(c.getName())) {String value = c.getValue();} }
2. Session
-
获取 Session:
HttpSession session = request.getSession(); // 获取或创建 HttpSession session = request.getSession(false); // 只获取不创建
-
Session 操作:
session.setAttribute("user", userObj); // 设置属性 User user = (User)session.getAttribute("user"); // 获取属性 session.removeAttribute("user"); // 移除属性 session.invalidate(); // 销毁Session
五、Filter 过滤器
1. Filter 基础
- 作用:在请求到达 Servlet 前或响应返回客户端前进行预处理/后处理
- 生命周期:
init()
:初始化doFilter()
:过滤处理destroy()
:销毁
2. Filter 配置
-
web.xml 配置:
<filter><filter-name>EncodingFilter</filter-name><filter-class>com.example.EncodingFilter</filter-class> </filter> <filter-mapping><filter-name>EncodingFilter</filter-name><url-pattern>/*</url-pattern> </filter-mapping>
-
注解配置:
@WebFilter("/*") public class EncodingFilter implements Filter {...}
3. 常见应用场景
- 字符编码过滤
- 权限验证
- 日志记录
- 数据压缩
六、Listener 监听器
1. 监听器类型
- ServletContext 监听器:
ServletContextListener
:应用启动/销毁ServletContextAttributeListener
:属性变化
- Session 监听器:
HttpSessionListener
:Session创建/销毁HttpSessionAttributeListener
:Session属性变化HttpSessionBindingListener
:对象绑定到Session
- Request 监听器:
ServletRequestListener
:请求创建/销毁ServletRequestAttributeListener
:请求属性变化
2. 监听器配置
-
web.xml 配置:
<listener><listener-class>com.example.MyListener</listener-class> </listener>
-
注解配置:
@WebListener public class MyListener implements ServletContextListener {...}
七、JSTL 与 EL 表达式
1. EL 表达式(Expression Language)
-
语法:
${expression}
-
作用:简化 JSP 页面中的 Java 代码
-
示例:
${user.name} <!-- 相当于 <%= ((User)request.getAttribute("user")).getName() %> --> ${param.username} <!-- 获取请求参数 --> ${sessionScope.cart} <!-- 获取session中的属性 -->
2. JSTL(JSP Standard Tag Library)
-
核心标签库(prefix=“c”):
<c:set var="name" value="value" scope="session"/> <!-- 设置变量 --> <c:out value="${name}"/> <!-- 输出 --> <c:if test="${age > 18}">成年</c:if> <!-- 条件判断 --> <c:forEach items="${list}" var="item" varStatus="status"> <!-- 循环 -->${status.index}: ${item} </c:forEach>
八、MVC 设计模式
1. MVC 组成
- Model:数据模型(JavaBean、DAO、Service)
- View:视图(JSP、HTML)
- Controller:控制器(Servlet)
2. MVC 工作流程
- 用户发送请求到控制器(Servlet)
- 控制器调用模型(Service/DAO)处理业务逻辑
- 模型返回处理结果给控制器
- 控制器选择视图(JSP)并传递数据
- 视图渲染响应返回给用户
九、数据库访问(JDBC)
1. JDBC 基本步骤
// 1. 加载驱动
Class.forName("com.mysql.jdbc.Driver");// 2. 获取连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname", "username", "password");// 3. 创建Statement
PreparedStatement ps = conn.prepareStatement("SELECT * FROM users WHERE id=?");// 4. 设置参数并执行
ps.setInt(1, 1);
ResultSet rs = ps.executeQuery();// 5. 处理结果集
while (rs.next()) {String name = rs.getString("name");// ...
}// 6. 关闭资源
rs.close();
ps.close();
conn.close();
2. 数据库连接池
-
常见连接池:
- DBCP
- C3P0
- Druid(阿里开源)
-
使用示例(以Druid为例):
DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl("jdbc:mysql://localhost:3306/dbname"); dataSource.setUsername("username"); dataSource.setPassword("password");Connection conn = dataSource.getConnection(); // 使用连接... conn.close(); // 实际是返回到连接池
十、AJAX 与 JSON
1. AJAX 基础
-
XMLHttpRequest 对象:
var xhr = new XMLHttpRequest(); xhr.open("GET", "url", true); xhr.onreadystatechange = function() {if (xhr.readyState == 4 && xhr.status == 200) {var data = JSON.parse(xhr.responseText);// 处理响应数据} }; xhr.send();
-
jQuery AJAX:
$.ajax({url: "url",type: "GET/POST",data: {key: value},dataType: "json",success: function(data) {...},error: function() {...} });
2. JSON 处理
-
Java 对象转 JSON(使用 Jackson):
ObjectMapper mapper = new ObjectMapper(); String json = mapper.writeValueAsString(user); // 对象转JSON字符串 User user = mapper.readValue(json, User.class); // JSON字符串转对象
-
JSP 中输出 JSON:
response.setContentType("application/json;charset=UTF-8"); PrintWriter out = response.getWriter(); out.print(json); out.flush();
十一、文件上传与下载
1. 文件上传
-
表单设置:
<form action="upload" method="post" enctype="multipart/form-data"><input type="file" name="file"><input type="submit" value="上传"> </form>
-
Servlet 处理(使用 Apache Commons FileUpload):
DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); List<FileItem> items = upload.parseRequest(request);for (FileItem item : items) {if (!item.isFormField()) { // 文件字段String fileName = item.getName();File file = new File("上传路径", fileName);item.write(file);} }
2. 文件下载
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));InputStream in = new FileInputStream(file);
OutputStream out = response.getOutputStream();byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) != -1) {out.write(buffer, 0, len);
}in.close();
out.flush();
十二、Web 安全基础
1. 常见安全问题
- SQL 注入:使用 PreparedStatement 预防
- XSS 跨站脚本攻击:对用户输入进行 HTML 转义
- CSRF 跨站请求伪造:使用 token 验证
- 会话固定攻击:登录后重置 sessionId
2. 安全措施
-
密码加密:
// 使用MD5加密(需加盐) MessageDigest md = MessageDigest.getInstance("MD5"); byte[] hash = md.digest((password + salt).getBytes());
-
权限控制:使用 Filter 进行访问控制
-
HTTPS:配置 SSL 证书
以上是 JavaWeb 开发的核心基础知识,掌握这些内容可以胜任基本的 JavaWeb 开发工作。