servlet常见http状态报错:HTTP状态404: 请求的资源[/exp01/FirstServlet]不可用

资源不可用

  1. 报错内容如图:
    在这里插入图片描述
  2. 解决如下:
    方式一: 加注解 @WebServlet
    (1) 加注解之前要开启注解支持,否则依旧报错
    注解支持在web.xml 文件中 ,设置 metadata-complete=“false”
    在这里插入图片描述
    多提一嘴:web.xml文件自动生成的头文件可能version版本不太够,也会出一些,所以建议,用以下的代码替换:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0"
         metadata-complete="false">
</web-app>

(2)在servlet文件上加 @WebServlet
如下:

@WebServlet("/FirstServlet")

//或者简单点:
@WebServlet(name = "firstServlet", value = "/FirstServlet")

方式二:配置web.xml文件
如下:

<servlet>
    <servlet-name>FirstServlet</servlet-name>
    <servlet-class>com.demo.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>FirstServlet</servlet-name>
    <url-pattern>/FirstServlet</url-pattern>
</servlet-mapping>
  • 28
    点赞
  • 147
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
首先需要在web2023工程下创建以下目录结构: ``` web2023 ├── WEB-INF │ ├── classes │ ├── lib │ └── userinfo.txt ├── hw │ ├── login.jsp │ └── failed.jsp ├── servlet │ ├── FirstServlet.java │ └── SecondServlet.java ├── 404.html └── 500.html ``` 其中,userinfo.txt文件用于存储用户名和密码,格式为: ``` username1=password1 username2=password2 ``` FirstServlet的实现如下: ```java package servlet; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class FirstServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取用户名和密码 String username = request.getParameter("username"); String password = request.getParameter("password"); // 读取userinfo.txt文件 String path = getServletContext().getRealPath("/WEB-INF/userinfo.txt"); File file = new File(path); BufferedReader reader = new BufferedReader(new FileReader(file)); // 验证用户名和密码是否正确 String line; boolean found = false; while ((line = reader.readLine()) != null) { String[] parts = line.split("="); if (parts.length == 2 && parts[0].equals(username) && parts[1].equals(password)) { found = true; break; } } reader.close(); // 根据验证结果跳转页面 if (found) { HttpSession session = request.getSession(); session.setAttribute("username", username); response.sendRedirect(request.getContextPath() + "/servlet/secondServlet.do"); } else { response.sendRedirect(request.getContextPath() + "/hw/failed.jsp"); } } } ``` SecondServlet的实现如下: ```java package servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class SecondServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取用户名 HttpSession session = request.getSession(); String username = (String) session.getAttribute("username"); // 显示用户名信息 response.setContentType("text/html;charset=UTF-8"); response.getWriter().println("<h1>欢迎您," + username + "!</h1>"); } } ``` login.jsp的实现如下: ```html <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登录</title> </head> <body> <form action="${pageContext.request.contextPath}/servlet/firstServlet.do" method="post"> <label>用户名:</label> <input type="text" name="username" /><br /> <label>密码:</label> <input type="password" name="password" /><br /> <input type="submit" value="登录" /> </form> </body> </html> ``` failed.jsp的实现如下: ```html <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登录失败</title> </head> <body> <h1>登录失败,请检查用户名和密码是否正确!</h1> </body> </html> ``` web.xml的实现如下: ```xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0"> <display-name>web2023</display-name> <error-page> <error-code>404</error-code> <location>/404.html</location> </error-page> <error-page> <error-code>500</error-code> <location>/500.html</location> </error-page> <servlet> <servlet-name>firstServlet</servlet-name> <servlet-class>servlet.FirstServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>firstServlet</servlet-name> <url-pattern>/servlet/firstServlet.do</url-pattern> </servlet-mapping> <servlet> <servlet-name>secondServlet</servlet-name> <servlet-class>servlet.SecondServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>secondServlet</servlet-name> <url-pattern>/servlet/secondServlet.do</url-pattern> </servlet-mapping> </web-app> ``` 在以上实现中,使用了ServletContext的getRealPath方法获取userinfo.txt文件的绝对路径;使用HttpSession对象在FirstServlet和SecondServlet之间传递数据;使用EL表达式获取web应用的上下文路径;使用了web.xml的error-page配置实现404和500错误页面的统一处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值