Java如何用Servlet写一个接口,部署在tomcat,通过url进行访问 —— (二)

接上一篇,上一篇里面成功运行了一个简单的servlet,可以在浏览器输入账号密码,然后servlet里面解析。

而这一篇,是对某些问题进行补充。

本人上线迷倒一片

一、字符编码问题

我们在测试上一篇的login.html页面提交数据的时候,发现输入数字和英文可以正常打印在控制台,BUT 输入中文的话就不行了,全变成:

那么怎么在servlet里处理下中文,让他正常打印呢?

我们可以看到login.html里指定的编码格式为UTF-8,(意思是客户端发送消息给服务器的时候编码格式为UTF-8)

那么servlet里怎么解码utf-8格式?

先用ISO-8859-1解码,然后再编码成UTF-8。

再尝试下,就可以正常显示:

当然,response里面返回到浏览器的数据是中文的话,也可以修改编码格式为UTF-8后再进行传输:

 

二、一个servlet的生命周期

就像一个人一样,从出生,上学,工作,死亡,入土一样,

servlet的周期就是: 实例化初始化提供服务销毁被回收

1、实例化

当某用户输入提交信息 后,访问路径对应的servlet会实例化。而且只会实例化一次(单实例),无论用户访问多少次~

验证的话,可以在LoginServlet类里写一个构造方法,可以发现发起请求的时候,会首先调用这个方法实例化对象

2、初始化

因为Loginservlet继承了HttpServlet,于是乎init初始化方法也被继承。

可以看到init在构造方法后执行。

3、提供服务

服务就是之前写的 doGet ,doPost,service 等,对收到请求的一些处理。

4、销毁

destroy()

当有如下情况时,会销毁一个servlet:

(1)关闭tomcat时:

	public void destory(ServletConfig config) {
		 System.out.println("destory方法!!");
	}

原谅我手太残,太快了,没截到图。。

生活和我表情包

(2)该Servlet所在的web应用重新启动;

之前在tomcat的server.xml里配置了:

<Context path="/" docBase="D:\\Java\\workspace\\test\\web" debug="0" reloadable="false" />

reloadable 代表是否自动重启,就是当检测到服务有更新,即tomcat自动重启,当重启的时候就会destory 。

 

5、回收

这个就涉及到垃圾回收了,当该Servlet被销毁后,就满足垃圾回收的条件了。 当下一次垃圾回收GC来临的时候,就有可能被回收。

关于垃圾回收机制,大概原理在之前的博客也记录了~

 

三、跳转页面

目前,浏览器提交信息后,会跳转到http://127.0.0.1:8080/login 这个地址。

这里跳转页面分为 服务端调转 和 客户端跳转

首先web目录下创建2个html

1、服务端跳转

	//判断账号密码合法性
	 if ("admin".equals(name) && "123456".equals(password)) {
         request.getRequestDispatcher("success.html").forward(request, response);
     }
	 else {
		 request.getRequestDispatcher("fail.html").forward(request, response); 
	 }

(注意:跳转的地址都是http://127.0.0.1:8080/login  ,和原来是一样的 )

2、客户端跳转

	//判断账号密码合法性
	 if ("admin".equals(name) && "123".equals(password)) {
		 response.sendRedirect("success.html");
     }
	 else {
		 response.sendRedirect("fail.html");
	 }

结果: 发现跳转后地址发生变化

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是使用 IDEA + Tomcat + Servlet 实现登录注册的示例代码。 在这个示例代码中,我们使用了 MySQL 数据库来存储用户的信息。在使用该示例代码之前,您需要先在本地安装 MySQL 数据库,并创建一个名为 `user_info` 的数据库,在该数据库中创建一个名为 `users` 的表,表结构如下: ``` CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `password` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4; ``` 该表用于存储用户的用户名和密码。 在开始编代码之前,您需要先下载并安装 MySQL Connector/J,该驱动程序用于连接 MySQL 数据库。 接下来,我们将编一个登录页面和一个注册页面。当用户提交登录或注册表单时,我们将使用 Servlet 处理用户的请求,并将用户的信息存储到数据库中。 登录页面 (`login.jsp`) 的代码如下: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Login Page</title> </head> <body> <h1>Login Page</h1> <form action="login" method="post"> <label>Username:</label> <input type="text" name="username"><br> <label>Password:</label> <input type="password" name="password"><br> <input type="submit" value="Login"> </form> <p>Not registered yet? <a href="register.jsp">Register here</a>.</p> </body> </html> ``` 注册页面 (`register.jsp`) 的代码如下: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Register Page</title> </head> <body> <h1>Register Page</h1> <form action="register" method="post"> <label>Username:</label> <input type="text" name="username"><br> <label>Password:</label> <input type="password" name="password"><br> <input type="submit" value="Register"> </form> <p>Already registered? <a href="login.jsp">Login here</a>.</p> </body> </html> ``` 接下来,我们将编 Servlet 处理用户的登录和注册请求。在 IDEA 中,可以使用 “File → New → Project” 命令创建一个新的 Web 应用程序项目,并选择 “JavaEE” 和 “Web Application” 作为项目类型。 在项目中,我们创建一个名为 `LoginServlet` 的 Java 类,用于处理用户的登录请求。代码如下: ```java package com.example; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @WebServlet("/login") public class LoginServlet extends HttpServlet { private static final String DB_URL = "jdbc:mysql://localhost:3306/user_info"; private static final String DB_USER = "root"; private static final String DB_PASSWORD = "password"; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); PrintWriter out = response.getWriter(); try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { out.println("Error: unable to load driver class!"); return; } Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD); String sql = "SELECT * FROM users WHERE username=? AND password=?"; stmt = conn.prepareStatement(sql); stmt.setString(1, username); stmt.setString(2, password); rs = stmt.executeQuery(); if (rs.next()) { out.println("Login successful!"); } else { out.println("Invalid username or password!"); } } catch (SQLException e) { out.println("Error: " + e.getMessage()); } finally { try { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { out.println("Error: " + e.getMessage()); } } } } ``` 在上面的代码中,我们首先获取用户提交的用户名和密码,然后使用 JDBC 连接到 MySQL 数据库,并查询表中是否存在该用户的信息。如果存在,则输出 “Login successful!”;否则,输出 “Invalid username or password!”。 接下来,我们创建一个名为 `RegisterServlet` 的 Java 类,用于处理用户的注册请求。代码如下: ```java package com.example; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; @WebServlet("/register") public class RegisterServlet extends HttpServlet { private static final String DB_URL = "jdbc:mysql://localhost:3306/user_info"; private static final String DB_USER = "root"; private static final String DB_PASSWORD = "password"; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); PrintWriter out = response.getWriter(); try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { out.println("Error: unable to load driver class!"); return; } Connection conn = null; PreparedStatement stmt = null; try { conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD); String sql = "INSERT INTO users (username, password) VALUES (?, ?)"; stmt = conn.prepareStatement(sql); stmt.setString(1, username); stmt.setString(2, password); stmt.executeUpdate(); out.println("Registration successful!"); } catch (SQLException e) { out.println("Error: " + e.getMessage()); } finally { try { if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { out.println("Error: " + e.getMessage()); } } } } ``` 在上面的代码中,我们首先获取用户提交的用户名和密码,然后使用 JDBC 连接到 MySQL 数据库,并将用户的信息插入到表中。如果插入成功,则输出 “Registration successful!”;否则,输出错误信息。 最后,我们需要将登录页面和注册页面链接到 Servlet 上。在 `web.xml` 文件中,添加以下内容: ```xml <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.example.LoginServlet</servlet-class> </servlet> <servlet> <servlet-name>RegisterServlet</servlet-name> <servlet-class>com.example.RegisterServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>RegisterServlet</servlet-name> <url-pattern>/register</url-pattern> </servlet-mapping> ``` 在上面的配置中,我们将 `LoginServlet` 映射到 `/login` URL 上,将 `RegisterServlet` 映射到 `/register` URL 上。 现在,您可以使用 Tomcat 运行该应用程序,并在浏览器中打开登录页面 (`http://localhost:8080/login.jsp`) 或注册页面 (`http://localhost:8080/register.jsp`) 进行测试了。 希望这个示例代码能够帮助您使用 IDEA + Tomcat + Servlet 实现登录注册的小项目。如果您有任何疑问或需要进一步帮助,请随时回复。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值