JavaWeb开发教程
1639字约5分钟
2025-08-18
Web开发基础概念
Web开发是指创建可以在互联网或内部网上运行的应用程序的过程。Java Web开发主要涉及以下技术:
- Servlet:运行在服务器端的Java程序,用于处理HTTP请求和响应
- JSP(JavaServer Pages):用于创建动态Web页面的技术,结合了HTML和Java代码
- HTTP协议:Web应用的基础通信协议
- Web容器:如Tomcat、Jetty等,用于运行Servlet和JSP
Java Web开发的主要优势:
- 平台无关性:基于Java,具有良好的跨平台特性
- 安全性:Java的安全机制为Web应用提供保护
- 可扩展性:支持大型企业级应用开发
- 丰富的生态系统:大量的框架和工具支持
Servlet技术
Servlet是Java Web开发的核心技术之一,它是一个Java类,用于扩展服务器的功能,处理客户端的请求并生成响应。
Servlet生命周期
Servlet的生命周期由Web容器管理,包括以下阶段:
- 加载和实例化:Web容器加载Servlet类并创建实例
- 初始化:调用init()方法进行初始化
- 处理请求:调用service()方法处理客户端请求
- 销毁:调用destroy()方法释放资源
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 处理GET请求
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 处理POST请求
}
}Servlet API核心接口
- HttpServlet:所有Servlet类的基类
- HttpServletRequest:封装HTTP请求信息
- HttpServletResponse:封装HTTP响应信息
- HttpSession:用于会话管理
- ServletContext:提供Web应用的上下文信息
Servlet注解配置
使用@WebServlet注解可以简化Servlet的配置:
@WebServlet(
name = "HelloServlet",
urlPatterns = {"/hello", "/greeting"},
initParams = {
@WebInitParam(name = "configParam", value = "configValue")
}
)
public class HelloServlet extends HttpServlet {
// Servlet实现
}JSP技术
JSP(JavaServer Pages)是一种动态网页技术,允许在HTML中嵌入Java代码。
JSP基本语法
- JSP表达式:
<%= expression %>- 输出表达式的值 - JSP脚本段:
<% Java代码 %>- 执行Java代码 - JSP声明:
<%! 声明 %>- 声明变量和方法 - JSP注释:
<%-- 注释 --%>- JSP页面注释
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<title>Hello JSP</title>
</head>
<body>
<h1>Hello, JSP World!</h1>
<p>当前时间: <%= new java.util.Date() %></p>
<%
String message = "这是在JSP中执行的Java代码";
out.println("<p>" + message + "</p>");
%>
</body>
</html>JSP隐式对象
JSP提供了9个隐式对象,可以直接使用:
- request:HttpServletRequest对象
- response:HttpServletResponse对象
- session:HttpSession对象
- application:ServletContext对象
- out:JspWriter对象
- config:ServletConfig对象
- pageContext:PageContext对象
- page:当前Servlet实例
- exception:Exception对象(仅在错误页面中可用)
JSP动作
JSP动作是一组标准的标签,用于控制Servlet引擎的行为:
<!-- 包含其他页面 -->
<jsp:include page="header.jsp" />
<!-- 转发请求 -->
<jsp:forward page="error.jsp" />
<!-- 使用JavaBean -->
<jsp:useBean id="user" class="com.example.User" scope="session" />
<jsp:setProperty name="user" property="name" value="张三" />
<jsp:getProperty name="user" property="name" />Web应用结构
标准的Java Web应用遵循特定的目录结构:
webapp/
├── index.html # 首页
├── hello.jsp # JSP页面
├── user-form.html # HTML表单
├── error/ # 错误页面目录
│ ├── 404.html
│ ├── 500.html
│ └── general.html
├── WEB-INF/ # 受保护的配置目录
│ ├── web.xml # Web应用配置文件
│ ├── classes/ # 编译后的Java类文件
│ └── lib/ # 依赖的JAR文件
└── META-INF/ # 元数据目录
└── MANIFEST.MF表单处理
Web应用经常需要处理用户通过HTML表单提交的数据。
GET vs POST方法
GET方法:
- 数据附加在URL后面
- 有长度限制
- 不安全,数据可见
- 适用于查询操作
POST方法:
- 数据在请求体中发送
- 无长度限制
- 相对安全
- 适用于数据提交操作
获取请求参数
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 设置请求编码
request.setCharacterEncoding("UTF-8");
// 获取单值参数
String name = request.getParameter("name");
// 获取多值参数
String[] hobbies = request.getParameterValues("hobby");
// 获取所有参数
Map<String, String[]> parameterMap = request.getParameterMap();
}数据验证
在处理表单数据时,需要进行数据验证:
private boolean validateUser(String name, String email) {
if (name == null || name.trim().isEmpty()) {
return false;
}
if (email == null || !email.matches("^[A-Za-z0-9+_.-]+@(.+)$")) {
return false;
}
return true;
}会话管理
HTTP协议是无状态的,会话管理用于在多个请求之间保持用户状态。
HttpSession
// 获取会话对象
HttpSession session = request.getSession();
// 设置会话属性
session.setAttribute("username", "张三");
// 获取会话属性
String username = (String) session.getAttribute("username");
// 移除会话属性
session.removeAttribute("username");
// 设置会话超时时间(秒)
session.setMaxInactiveInterval(30 * 60);应用范围属性
ServletContext用于存储应用范围的属性:
// 获取ServletContext
ServletContext context = getServletContext();
// 设置应用属性
context.setAttribute("appVersion", "1.0");
// 获取应用属性
String appVersion = (String) context.getAttribute("appVersion");错误处理
Web应用需要妥善处理各种错误情况。
错误页面配置
在web.xml中配置错误页面:
<error-page>
<error-code>404</error-code>
<location>/error/404.html</location>
</error-page>
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error/general.html</location>
</error-page>异常处理
在Servlet中处理异常:
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
// 处理业务逻辑
processRequest(request, response);
} catch (ValidationException e) {
// 处理验证异常
request.setAttribute("errorMessage", e.getMessage());
request.getRequestDispatcher("/error/validation.jsp").forward(request, response);
} catch (Exception e) {
// 处理其他异常
throw new ServletException("处理请求时发生错误", e);
}
}Web应用配置
web.xml配置文件
web.xml是Web应用的部署描述符:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="4.0" xmlns="http://xmlns.jcp.org/xml/ns/javaee">
<!-- 欢迎页面 -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 会话配置 -->
<session-config>
<session-timeout>30</session-timeout>
</session-config>
</web-app>Servlet 3.0+注解配置
使用注解可以简化配置:
@WebServlet(
name = "UserServlet",
urlPatterns = "/user",
initParams = @WebInitParam(name = "maxAge", value = "30")
)
public class UserServlet extends HttpServlet {
// Servlet实现
}最佳实践
1. 编码设置
确保正确的字符编码:
// 在处理请求前设置编码
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");2. 资源管理
正确关闭资源:
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
// 处理响应内容
out.println("<h1>Hello World</h1>");
} finally {
// 确保关闭输出流
out.close();
}
}3. MVC模式
采用MVC(Model-View-Controller)模式组织代码:
src/main/java/com/ibz/网络编程/web/
├── controller/ # 控制器(Servlet)
│ ├── HelloServlet.java
│ ├── UserServlet.java
│ └── UserListServlet.java
├── model/ # 模型(业务逻辑和数据)
│ └── User.java
└── view/ # 视图(JSP页面,通常在webapp目录中)
├── hello.jsp
├── user-form.html
└── user-list.jsp4. 安全性考虑
- 防止SQL注入:使用PreparedStatement
- 防止XSS攻击:对用户输入进行转义
- CSRF保护:使用令牌验证
- 会话安全:设置安全的会话管理策略
