JavaWeb(Servlet编程)第三章

一,常用页面跳转方法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停止运行时,集合中所记录的键值对就会全部消失,所以只是一次性的,等以后我们连接数据库就可以保存了。

相关推荐
原谅我很悲7 小时前
Servlet
servlet
就叫飞六吧3 天前
什么是浏览器对象模型(BOM, Browser Object Model)
java·开发语言·servlet·log4j·1024程序员节
凌_晨4 天前
jenkins下拉参数联动
运维·前端·servlet·jenkins·safari
胡耀超4 天前
以30个面试问题和案例为导向:全面解析 Java Servlet是什么?基本概念、实现原理、生命周期、类结构、请求与响应的处理机制,以及性能优化和安全性管理
java·servlet·面试
程序员小雷5 天前
技术or管理?浅谈测试人员的未来职业发展
功能测试·测试工具·servlet·docker·单元测试·jenkins·测试用例
sin22015 天前
idea(2017版)创建项目的搭建方式
java·servlet·intellij-idea
皮不卡球秋5 天前
Servlet实现博客系统
java·servlet·博客系统·javase·javaee
就叫飞六吧6 天前
html小游戏-飞机大战
java·开发语言·servlet·1024程序员节
隐形人.11 天前
Servlet-04ServletConfig和ServletContext
java·后端·servlet