javaweb22/4/3

HttpServletRequest

如果要获取客户端请求过来的参数,找HttpServletRequest

HttpServletRequest代表客户端的请求,用户通过Http协议访问服务器,
Http请求中的所有信息会被封装到HttpServletRequest,通过HttpServletRequest的方法,获得客户端的所有信息

获取前端传递的参数,请求转发

1.登录页面

<body>
<h2>登录</h2>
<div>
<%--    ${pageContext.request.contextPath}/login  是通过<servlet-mapping>在web.xml中找到/login,之后通过<servlet>找到LoginServlet--%>
    <form action="${pageContext.request.contextPath}/login" method="post">
    用户名:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    爱好:
        <input type="checkbox" name="hobbys" value="唱歌">唱歌
        <input type="checkbox" name="hobbys" value="跳舞">跳舞
        <input type="checkbox" name="hobbys" value="玩游戏">玩游戏
        <input type="submit">

    </form>

</div>
</body>

2.编写Servlet

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决请求与响应的编码问题
        resp.setCharacterEncoding("utf-8");
        req.setCharacterEncoding("utf-8");
        //获取请求的参数
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String[] hobbys = req.getParameterValues("hobbys");

        //  会把/识别成当前应用,无需再写/s/seccess
        req.getRequestDispatcher("/success.jsp").forward(req,resp);

        System.out.println(username+":"+password);
        System.out.println(Arrays.toString(hobbys));


    }

3.在web.xml中注册Servlet

<servlet>
    <servlet-name>Log</servlet-name>
    <servlet-class>com.wenping.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Log</servlet-name>
    <url-pattern>/login</url-pattern>
</servlet-mapping>

4.编写LoginServlet转发的页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h2>登陆成功</h2>
<h3>SECCESS</h3>
</body>
</html>

解决遇到的问题:

1.转发成功,但是success页面无内容

解决:req.getRequestDispatcher("/success.jsp")后忘记加.forward(req,resp);
2.success页面显示404
解决:getResquestDisptcher()的参数写成/s/seccess,应是/seccess,IDEA会把/识别成当前应用,无需再写/s/seccess
3.控制台内容中文乱码
解决:编辑Tomcat配置,在虚拟机选项中填写 -Dfile.encoding=UTF-

posted @   想吃坚果  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示