一,常用页面跳转方法1:重定向
通过HttpServletResponse的sendRedirect()方法来跳转到本地URL
void sendRedirect(String locationURL)
locationURL形式:URL[?参数名称1=参数值1&参数名称2=参数值2&...]
只能传递字符串,不能传递对象
<%--
Created by IntelliJ IDEA.
User: ***
Date: 2024/10/13
Time: 19:01
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="t2" method="post">
name:<input type="text" name="name">
<br/>
<input type="submit" value="submit">
</form>
</body>
</html>
在test02.jsp文件中写出一个表单将name变量传递给标签名为t2的servlet,这里方法为post方法
java
package test;
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;
@WebServlet("/t2")
public class test2 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("name");
resp.sendRedirect("test2.jsp?name="+name);
}
}
在标签为t2的servlet中将name变量接收一下,并使用重定向跳转到test2.jsp文件中去,并将name变量的值传递给这个页面,这里 使用的传递参数的方法是问号传参,这样的传递参数的方式,会将重定向括号中的字符串部分和变量值部分全部显示到页面的网址栏中。
java
<%--
Created by IntelliJ IDEA.
User: ***
Date: 2024/7/20
Time: 15:09
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>
<%=request.getParameter("name")%>
</h1>
</body>
</html>
并将这个变量输出出来以证明传参成功。
运行结果如下图:
二,解决页面乱码问题
通过HttpServletResponse的setContentType()方法设置字符编码
setContentType("text/html;charset=UTF-8");
必须写在响应信息之前
三,JSP+Servlet制作简易登陆系统
<%--
Created by IntelliJ IDEA.
User: ***
Date: 2024/10/13
Time: 19:43
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="cs" method="post">
username:<input type="text" name="username">
<br/>
password:<input type="password" name="password">
<br/>
<input type="submit" value="login">
<a href="register2.jsp">if you don't have user,Please click here</a>
</form>
</body>
</html>
首先创建一个JSP文件login2.jsp使用form表单将用户名和密码传递给后端csServlet代码中,并定义一个超链接可以跳转到注册界面,若没有用户名的话。
<%--
Created by IntelliJ IDEA.
User: ***
Date: 2024/10/13
Time: 19:49
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="rs" method="post">
username:<input type="text" name="username">
<br/>
password:<input type="password" name="password">
<br/>
<input type="submit" value="register">
</form>
</body>
</html>
再创建一个注册的页面register2.jsp,将注册的数据传递给标签名为rs的Servlet类中。
java
package csdn;
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.util.HashMap;
import java.util.Map;
@WebServlet("/rs")
public class RegisterServlet extends HttpServlet {
static Map<String,String> map=new HashMap<>();
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
map.put(username,password);
resp.sendRedirect("login2.jsp");
}
}
这是一个注册的后端代码,设置标签为rs,创建类声明一个静态的map集合,用来存储注册过的用户名和密码,接收注册页面的用户名和密码将接收过来的变量存住在map集合中,注册之后就是要回到登录页面继续登录,所以我们使用一个重定向跳转到login2.jsp这个页面。
java
package csdn;
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;
@WebServlet("/cs")
public class CheckServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
if (RegisterServlet.map.get(username) != null & RegisterServlet.map.get(username).equals(password)) {
resp.sendRedirect("welcome.jsp");
} else {
resp.sendRedirect("login2.jsp");
}
}
}
来到cs这个Servlet类,在这个类中是用来判断登录的用户名和密码是否与注册的用户名和密码相同,相同的话就会跳转到welcome.jsp中,如果不同就会跳转到登录页面继续登录,这里选择了map集合的get方法不为空的写法,因为如果查找到map中value的值,就说明传递过来的用户名在集合中存在,就不会输出null,如果不存在就会输出null,之前设置静态结合就是为了选择类名加点的引用.
java
<%--
Created by IntelliJ IDEA.
User: ***
Date: 2024/10/13
Time: 20:02
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>Login Successfully</h1>
</body>
</html>
这是登录成功的页面代表我们成功登录。接下来请看运行效果。
这里我就注册了一对用户名和密码,要是想多注册也是可以的,但是我们刚刚学习所以这个系统非常不完善,所以当tomcat停止运行时,集合中所记录的键值对就会全部消失,所以只是一次性的,等以后我们连接数据库就可以保存了。