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方法

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变量的值传递给这个页面,这里 使用的传递参数的方法是问号传参,这样的传递参数的方式,会将重定向括号中的字符串部分和变量值部分全部显示到页面的网址栏中。

<%--
  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类中。

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这个页面。

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,之前设置静态结合就是为了选择类名加点的引用.

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

### 关于《JavaWeb编程技术第三版》第三章实训的内容 在《JavaWeb编程技术第三版》一书中,第三章主要围绕Servlet的基础知识展开。这一章节通过理论与实践相结合的方式,帮助读者理解Servlet的工作原理及其基本应用方法[^1]。 #### Servlet基础概述 Servlet是一种用于扩展服务器功能的小型Java程序,通常运行在支持Java的应用服务器上(如Tomcat)。它能够动态处理HTTP请求并返回响应数据。第三章的重点在于介绍如何创建、部署以及调试简单的Servlet程序[^2]。 #### 第三章实训目标 该部分的实训旨在让学习者熟悉以下几个方面: - **环境搭建**:确保本地已安装配置好JDK和Tomcat服务端,并能正常启动测试页面。 - **编写第一个Servlet类**:依据官方文档或者教材指导,在`src/main/java`路径下新建包名空间(例如命名为`cn.example.servlet`),随后定义继承自`HttpServlet`的具体实现子类。 - **映射URL模式到Servlet实例**:编辑web.xml文件或将注解方式应用于上述定制化的处理器逻辑之中;指定访问入口以便浏览器发起GET/POST动作时触发相应行为。 下面是一个典型的入门级例子展示如何构建最简易版本的服务端组件: ```java package cn.example.servlet; 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; // 使用@WebServlet标注简化传统XML声明过程 @WebServlet("/helloWorld") public class HelloWorldServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 设置字符编码格式防止乱码现象发生 resp.setContentType("text/html;charset=UTF-8"); try (PrintWriter out = resp.getWriter()) { out.println("<!DOCTYPE html>"); out.println("<html lang='en'>"); out.println("<head><title>Hello World</title></head>"); out.println("<body>"); out.println("<h1>欢迎来到Java Web的世界!</h1>"); out.println("</body></html>"); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{ this.doGet(req,resp); } } ``` 此代码片段展示了如何利用现代API特性快速关联特定URI至具体业务流程之间桥梁关系建立的过程[^3]。 #### 常见问题排查技巧 对于初学者而言,在实际动手过程中可能会遇到诸如找不到类加载器错误等问题。此时可以参照如下建议逐一核查可能存在的隐患点: - 确认项目结构层次分明无误; - 检查依赖库是否遗漏引入必要构件; - 对比范例源码逐字核对差异之处直至定位根本原因为止。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值