下面是关于“Servlet开发JavaWeb工程示例详解”的完整攻略:
1. 准备工作
在开始 Servlet 的开发之前,需要做一些准备工作:
- 安装 JDK
- 安装 Tomcat
- 配置环境变量
JDK 的安装和环境变量的配置这里就不再赘述,大家可以自行搜索相关教程进行操作。
Tomcat 的安装可以从官网下载对应版本的压缩包并解压,或者使用包管理器进行安装。解压后,可以将 Tomcat 安装目录下的/webapps
文件夹作为开发的基础目录。
2. 开发 Servlet
在这里,我们以用户登录信息验证为例,通过 Servlet 来接收并处理用户输入的信息。
2.1 创建 Servlet 类
在开发 JavaWeb 工程时,需要新建一个继承了 HttpServlet 的 Java 类,并重写其中的 doGet 或 doPost 方法。
创建 Servlet 类,代码如下:
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 LoginServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 以下处理 POST 请求:
String username = req.getParameter("username");
String password = req.getParameter("password");
resp.setContentType("text/html;charset=UTF-8");
PrintWriter out = resp.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>登录结果</title>");
out.println("</head>");
out.println("<body>");
if (username.equals("admin") && password.equals("123456")) {
out.println("<p>登录成功</p>");
} else {
out.println("<p>用户名或密码错误</p>");
}
out.println("</body>");
out.println("</html>");
out.close();
}
}
2.2 配置 Servlet
在 Servlet 中,我们需要配置 web.xml
文件。在 web.xml
文件中,包含了 Servlet 的映射关系和 URL 地址的匹配规则,还可以对 Servlet 进行初始化和参数配置等。
这里我们进行如下配置:
<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
</web-app>
以上配置告诉容器,当请求/LoginServlet
地址时,容器会找到名称为 LoginServlet
的 Servlet,并执行 LoginServlet
中重写了的 doPost 方法。
2.3 编写 JSP 页面
接下来,我们需要编写一个 JSP 页面来模拟用户的登录操作,并将用户输入的信息提交到服务器上进行验证。在 JSP 页面中,我们需要使用 <form>
标签来创建一个表单来收集用户的输入数据,并使用 <input>
标签创建文本框,以便输入用户名和密码。
在以上界面元素的基础上,我们还可以在表单中使用 <submit>
标签创建提交按钮。
创建 JSP 页面,代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>用户登录</title>
</head>
<body>
<form action="/LoginServlet" method="post">
<label for="username">用户名:</label>
<input type="text" id="username" name="username"><br>
<label for="password">密码:</label>
<input type="password" id="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
3. 部署运行
现在,我们已经完成了 Servlet 的开发和配置,接下来需要将代码部署到 Tomcat 服务器上进行运行。
将以上代码放到 Tomcat 目录下的 webapps
文件夹中,并启动 Tomcat 服务器即可。
使用浏览器访问http://localhost:8080/Login.jsp
,即可访问该 JSP 页面,并在输入用户名和密码之后提交表单,服务器响应结果。
4. 示例
在以上内容中,我们仅仅是简单实现了一个可以接收用户输入的信息并验证的 Servlet 应用。
接下来,我们通过一个示例进行详细说明。
4.1 示例要求
现在我们有这样一个需求,需要开发一个 Servlet 应用,用于记录系统中的用户登录记录。当用户进行登录操作时,将记录下该用户的登录时间、登录 IP、以及登录时使用的浏览器 UA 字段,并将记录写入到日志文件中。
4.2 实现方法
具体实现方法如下:
4.2.1 创建一个使用者信息记录类
创建一个类用于记录用户信息,并将其序列化为可存储的字符串,该类代码如下:
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
public class UserInfo implements Serializable {
private static final long serialVersionUID = 6050098418421147139L;
private String username;
private String ip;
private String ua;
private Date loginTime;
public UserInfo(String username, String ip, String ua, Date loginTime) {
this.username = username;
this.ip = ip;
this.ua = ua;
this.loginTime = loginTime;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public String getUa() {
return ua;
}
public void setUa(String ua) {
this.ua = ua;
}
public Date getLoginTime() {
return loginTime;
}
public void setLoginTime(Date loginTime) {
this.loginTime = loginTime;
}
@Override
public String toString() {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = dateFormat.format(this.loginTime);
return String.format("%s,%s,%s,%s", dateStr, this.ip, this.username, this.ua);
}
}
以上代码中,我们创建了一个 UserInfo 类,并添加了用户名、IP 地址、浏览器 UA 字段以及登录时间等属性,并添加了一个 toString
方法来将 UserInfo 转换为可存储的字符串格式。
4.2.2 修改 Servlet
修改 Servlet,代码如下:
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
UserInfo userInfo = new UserInfo(username, request.getRemoteAddr(), request.getHeader("user-agent"), new Date());
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>登录结果</title>");
out.println("</head>");
out.println("<body>");
if (username.equals("admin") && password.equals("123456")) {
out.println("<p>登录成功</p>");
writeUserInfoToLog(userInfo);
} else {
out.println("<p>用户名或密码错误</p>");
}
out.println("</body>");
out.println("</html>");
out.close();
}
private void writeUserInfoToLog(UserInfo userInfo) {
String logFilePath = getServletContext().getRealPath("/") + "log/userlogin.log";
File logFile = new File(logFilePath);
FileWriter fileWriter;
try {
fileWriter = new FileWriter(logFile, true);
fileWriter.write(userInfo.toString() + "\n");
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(String.format("[%s] User login record saved to log file: %s", dateFormat.format(new Date()), logFile.getAbsolutePath()));
}
}
以上代码中,我们在 doPost 方法中,获取了用户的登录信息,并创建了一个 UserInfo 对象,然后在用户登录成功时,调用 writeUserInfoToLog
方法将登录用户的信息写入到本地日志文件中。
4.2.3 创建 JSP 页面
修改 JSP 页面,代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>用户登录</title>
</head>
<body>
<form action="/LoginServlet" method="post">
<label for="username">用户名:</label>
<input type="text" id="username" name="username"><br>
<label for="password">密码:</label>
<input type="password" id="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
4.3 图示
通过以上示例,我们可以清晰地了解到 Servlet 的开发步骤和基本操作。在实际的开发中,还需要对其进行细致的调节和优化。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Servlet开发JavaWeb工程示例详解 - Python技术站