J2EE实验报告,Servlet编程实验,适用于「清华大学出版社」出版的的「JSP实用教程」,高等学校JAVA课程系列教材。JSP将java代码和特定的更改内容嵌入到静态页面中,以静态页面为模板,实现部分内容的动态生成。JSP引入了一个名为“JSP操作”的XML标记来调用内置函数。
1 实验目的
掌握编写Servlet常用对象,包括:HttpServletRequest、HttpServletResponse、RequestDispatche和ServletContext。
2 实验内容
编写servlet类,程序功能如下:
- 用户在登录页面输入用户名和密码,点击登录按钮后,则请求servlet程序验证用户名和密码;
- 如果用户名为admin且密码为12345,则执行welcomeServlet;否则,给用户输出提示信息:”对不起,username or password error!”,同时,返回到登录页面。
- 使用RequestDispatche的forward和include方法实现。
3 实验步骤
在前面实验中已经创建并部署的Web项目FristTomcatProject中进行编程。
3.1 编写登陆页面login.jsp
3.2 编写servlet类DispatcherServlet.java
- 使用RequestDispatche的forward和include方法实现DispatcherServlet类。DispatcherServlet接收登录页面的用户名和密码。
- 如果用户名为admin且密码为12345,则使用forward方法重定向到welcomeServlet;
- 如果用户名不是admin,则输出“Sorry,用户名或密码错误,请重新输入!”,并且使用include方法返回登录页面login.jsp.
- 配置DispatcherServlet类。
3.3 编写servlet类welcomeServlet.java
- 该类在页面显示“Welcome, 用户名”的字符串,其中,“用户名”是login.jsp发送的用户名。
- 配置welcomeServlet类。
3.4 运行程序
- 启动服务器,使用浏览器访问login.jsp
- 输入用户名admin、密码12345。点击login按钮
- 观察登录页面form使用get方法时,登录后浏览器地址的变化。
- 再次使用浏览器访问login.jsp,输入不是admin的用户名。
3.5 修改login.jsp中form的方法为post
修改代码后,再重新测试程序,观察浏览器地址栏地址的变化。
4 源代码
4.1 login.jsp
//login.jsp
<%--
Created by IntelliJ IDEA.
User: 贰叁伍
Date: 2022/4/26
Time: 20:15
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="/environment/DispatcherServlet" method="post">
<table>
<tbody>
<tr>
<td align="right">用户名:</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td align="right">密码:</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td align="center" colspan="2">
<input type="submit" value="登录">
<input type="reset" value="重置">
</td>
</tr>
</tbody>
</table>
</form>
</body>
</html>
4.2 welcomeServlet.java
//welcomeServlet.java
package com.example.java;
import javax.servlet.RequestDispatcher;
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(name = "welcomeServlet", value = "/welcomeServlet")
public class welcomeServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String name = request.getParameter("name");
out.print("Welcome," + name + "用户登录");
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String name = request.getParameter("name");
out.print("Welcome," + name + "用户登录");
}
}
4.3 DispatcherServlet.java
//DispatcherServlet.java
package com.example.java;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(name = "DispatcherServlet", value = "/DispatcherServlet")
public class DispatcherServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("name");
String password = req.getParameter("password");
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
if(name.equals("admin") && password.equals("123456")){//比对用户名和密码 相符就跳转
RequestDispatcher rd = req.getRequestDispatcher("/welcomeServlet");
rd.forward(req, resp);
}
else
{
out.print("“Sorry,用户名或密码错误,请重新输入!");
RequestDispatcher rd = req.getRequestDispatcher("/SecondTest/login.jsp");
rd.include(req, resp);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("name");
String password = req.getParameter("password");
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
if(name.equals("admin") && password.equals("123456")){//比对用户名和密码 相符就跳转
RequestDispatcher rd = req.getRequestDispatcher("/welcomeServlet");
rd.forward(req, resp);
}
else
{
out.print("“Sorry,用户名或密码错误,请重新输入!");
RequestDispatcher rd = req.getRequestDispatcher("/SecondTest/login.jsp");
rd.include(req, resp);
}
}
}
5 测试结果
6 实验中的问题及解决方案
- 无法访问Servlet,返回404
- 在对应的Java文件中添加@WebServlet(name = “*”, value = “*”)
- doGet方法时,页面乱码
- 添加ContentType即:resp.setContentType(“text/html;charset=utf-8”);即可解决
- getRequestDispatcher时无法获取正确的路径
- 添加”/”或者使用绝对路径
📮评论