Java后端学习系列(7):常用Java Web框架介绍(Servlet与JSP)
前言
经过前面对于Java数据库操作基础(JDBC)的学习,我们已经能够让Java程序与数据库进行有效的交互了。而在构建动态的Web应用程序方面,Servlet与JSP是Java Web开发中非常重要的基础技术,它们为开发功能丰富、交互性强的网页应用提供了关键支撑。本期我们就来深入了解Servlet与JSP的相关知识,进一步拓展Java后端开发的技能树。本系列共15期,会持续为大家呈现实用且关键的内容。
一、Servlet的基本概念与开发流程
1.1 基本概念
Servlet是运行在Web服务器或应用服务器上的Java小程序,它用于处理客户端发来的HTTP请求,并生成相应的HTTP响应返回给客户端。可以把Servlet看作是服务器端的控制器,负责接收请求、执行业务逻辑、调用相关的服务(如数据库操作等),最后生成响应内容,比如HTML页面、JSON数据等。
1.2 开发流程
- 创建Servlet类:
首先需要创建一个Java类继承自javax.servlet.http.HttpServlet类,并重写doGet和doPost等方法,这些方法对应不同类型的HTTP请求方法(GET、POST等)。示例如下:
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h1>Hello from Servlet!</h1>");
out.println("</body></html>");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 这里可以添加处理POST请求的逻辑,和doGet类似,先设置响应类型等操作
doGet(request, response);
}
}
- 配置Servlet:
需要在项目的web.xml文件(传统的配置方式,现在也有基于注解的配置方式)中对Servlet进行配置,告诉服务器这个Servlet的访问路径等信息。例如:
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.example.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
通过这样的配置,当客户端访问/hello这个路径时,服务器就会调用对应的HelloServlet来处理请求。
二、JSP的原理与基本应用
2.1 原理
JSP(JavaServer Pages)本质上是一种在HTML页面中嵌入Java代码的技术,它的运行原理是:当客户端第一次请求一个JSP页面时,服务器会将JSP页面翻译成一个Servlet类(这个过程由服务器自动完成),然后编译这个Servlet类并加载到内存中执行,后续再次请求该JSP页面时,就直接执行内存中已经编译好的Servlet实例,生成响应返回给客户端。
2.2 基本应用
创建一个简单的JSP页面示例,例如:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>My JSP Page</title>
</head>
<body>
<%
int num = 10;
out.println("<h1>The number is: " + num + "</h1>");
%>
</body>
</html>
在这个JSP页面中,通过<% %>标签嵌入了Java代码,实现了在HTML页面中动态输出内容的功能。还可以使用JSP的指令(如<%@ page %>用于设置页面相关属性)、表达式(<%= 表达式 %>可以直接输出表达式的值到页面)等元素来丰富页面的功能和逻辑。
三、Servlet与JSP的结合使用
在实际的Web应用开发中,常常会结合Servlet与JSP来构建完整的应用逻辑。一般的做法是:Servlet负责接收客户端请求,进行业务逻辑处理(比如调用数据库操作、验证用户身份等),然后将处理结果存放在请求对象(HttpServletRequest)或者会话对象(HttpSession)中,再通过请求转发或者重定向的方式将请求引导到相应的JSP页面,由JSP页面负责展示最终的结果给客户端。
例如,有一个简单的用户登录功能:
- LoginServlet(部分代码示例):
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 假设这里获取用户提交的用户名和密码,进行验证(这里简化验证逻辑)
String username = request.getParameter("username");
String password = request.getParameter("password");
if ("admin".equals(username) && "123456".equals(password)) {
// 验证通过,将用户信息存入会话
request.getSession().setAttribute("user", username);
// 请求转发到欢迎页面(假设是welcome.jsp)
request.getRequestDispatcher("welcome.jsp").forward(request, response);
} else {
// 验证失败,重定向到登录页面重新登录
response.sendRedirect("login.jsp");
}
}
}
- welcome.jsp(部分代码示例):
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Welcome Page</title>
</head>
<body>
<%
String username = (String) session.getAttribute("user");
if (username!= null) {
out.println("<h1>Welcome, " + username + "!</h1>");
} else {
out.println("<h1>You are not logged in!</h1>");
}
%>
</body>
</html>
通过这样的结合,实现了从接收请求、处理业务逻辑到展示结果的完整流程,构建出一个简单的具有交互功能的Web应用部分。
四、简单的Java Web应用示例
下面我们来构建一个更完整一点的简单Java Web应用示例,实现一个简单的图书列表展示功能:
- 创建Book类(用于表示图书实体):
public class Book {
private String title;
private String author;
private double price;
public Book(String title, String author, double price) {
this.title = title;
this.author = author;
this.price = price;
}
public String getTitle() {
return title;
}
public String getAuthor() {
return author;
}
public double getPrice() {
return price;
}
}
- 创建BookServlet(用于获取图书列表并传递给JSP页面展示):
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class BookServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Book> bookList = new ArrayList<>();
bookList.add(new Book("Java编程思想", "Bruce Eckel", 99.0));
bookList.add(new Book("Effective Java", "Joshua Bloch", 88.0));
request.setAttribute("bookList", bookList);
request.getRequestDispatcher("bookList.jsp").forward(request, response);
}
}
- 创建bookList.jsp(用于展示图书列表):
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Book List</title>
</head>
<body>
<h1>Book List</h1>
<ul>
<%
List<Book> bookList = (List<Book>) request.getAttribute("bookList");
if (bookList!= null) {
for (Book book : bookList) {
out.println("<li>Title: " + book.getTitle() + ", Author: " + book.getAuthor() + ", Price: " + book.getPrice() + "</li>");
}
}
%>
</ul>
</body>
</html>
然后按照前面介绍的配置Servlet的方式,在web.xml文件中配置好BookServlet的访问路径等信息,这样当客户端访问相应路径时,就能看到展示的图书列表了。
五、下一步学习建议
- 项目实践:基于Servlet与JSP搭建更多功能的Web应用,比如增加用户注册、图书添加删除等功能,深入体会它们在实际项目中的应用以及如何处理各种复杂的业务逻辑和页面交互。
- 深入学习:进一步研究Servlet与JSP的高级特性,比如Servlet的过滤器(Filter)和监听器(Listener)的作用及使用场景,JSP的自定义标签等,拓宽开发技能。
- 框架对比:了解一些基于Servlet与JSP发展而来的更高级的Java Web框架(如Spring MVC等),对比它们与Servlet、JSP原生开发的优缺点,为后续学习更高效的开发框架做准备。
下期预告
《Java后端学习系列(8):Spring框架基础入门》
- Spring的基本概念与核心模块介绍
- Spring IoC(控制反转)原理与实践
- Spring AOP(面向切面编程)的基础应用
- 简单的Spring应用示例搭建
Servlet与JSP是Java Web开发的重要基石,希望大家通过不断实践和探索,熟练掌握它们的使用方法,在Web应用开发领域不断进步。如果在学习过程中有任何疑问或者心得,欢迎在评论区分享交流,我们下期再见。
1192

被折叠的 条评论
为什么被折叠?



