zoukankan      html  css  js  c++  java
  • Javaweb的学习(servlet和request)___2

    1.通过servletContext对象实现数据的共享:

    通过this获得ServletContext对象,再实现数据的共享。

     案例: 通过servletContext对象读取网站配置文件:

    1.新建一个properties文件:

    driver=com.mysql.jdbc.Driver
    username=root
    password=123456
    url=jdbc:mysql://localhost:3306/smbms

    2.编写servlet类:

    package com.kuang.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.util.Properties;
    
    //读取properties配置文件
    public class ServletDemo03 extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doPost(req,resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //读取配置文件
    
            //1.获得配置文件的路径
            String realPath = this.getServletContext().getRealPath("/WEB-INF/classes/resources/database.properties");
            System.out.println("取得的路径为:"+realPath);
    
            Properties properties = new Properties();
            FileInputStream is = new FileInputStream(realPath);
    
            properties.load(is);//把文件流加载到配置文件的对象中;
    
            String driver = properties.getProperty("driver");
            String username = properties.getProperty("username");
            String password = properties.getProperty("password");
            String url = properties.getProperty("url");
    
    
            //响应到网页
            resp.getWriter().println(driver);
            resp.getWriter().println(username);
            resp.getWriter().println(password);
            resp.getWriter().println(url);
    
            //=======================================
            System.out.println(driver);
            System.out.println(username);
            System.out.println(password);
            System.out.println(url);
    
    
    
        }
    }

    3.web.xml的配置

    <servlet>
        <servlet-name>Demo03</servlet-name>
        <servlet-class>com.kuang.servlet.ServletDemo03</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>Demo03</servlet-name>
        <url-pattern>/q3</url-pattern>
    </servlet-mapping>

    4.浏览器中进行访问查看:

    2.request对象:

    2.1乱码问题的解决方案:  

    所有能设置编码的地方都设置一遍: 数据库,数据库字段,Servlet程序,请求,响应,前端,浏览器。

    jsp取得项目的路径:  ${pageContext.request.contextPath}

    2.2request对象的一些方法:

    package com.kuang.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    
    public class RequestDemo01 extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            //查看request对象的方式
            System.out.println(request.getContextPath()); //获得web项目路径
            System.out.println(request.getRequestURI()); //请求的URL路径
            //Remote 远程
            System.out.println(request.getRemoteUser()); //获得远程的用户名
            System.out.println(request.getRequestedSessionId()); //获得SessionId;
            System.out.println(request.getServletPath()); //请求servlet的url
            System.out.println(request.getLocalAddr()); //获得本地地址  防火墙
            System.out.println(request.getLocalName()); //获得本地名字
            System.out.println(request.getLocalPort()); //获得访问的端口号
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doPost(request,response);
        }
    }

    2.3Request对象接受前端用户提交的参数:

    1. 写前端注册页面: 表单的提交方式 get/post ; 表单提交的位置action:服务项目的路                                         径/servlet 对应请求的url
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>注册</title>
    </head>
    <body>
    
    
    <%--
    JSP的注释
    --%>
    
    
    <%--
    Form表单
        action:代表要提交的路径,表单要提交到哪里 ,可以提交到一个Servlet
            //提交到Servlet需要,获取到Web项目的路径下的Servlet
        method: 提交表单的方式
    --%>
    <h1>注册</h1>
    
    <form action="${pageContext.request.contextPath}/r2" method="post">
    
        <p>用户名:<input type="text" name="username"></p>
        <p>密码:<input type="password" name="password"></p>
    
        <p>
            <input type="submit">
            <input type="reset">
        </p>
    
    </form>
    
    
    
    </body>
    </html>

                 2.编写处理前端提交信息的servlet:  接受前端传递的空间信息,request.getParameter("控件的name")

    package com.kuang.servlet;
    
    
    import javax.print.attribute.HashPrintRequestAttributeSet;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    //处理前端提交过来的数据
    public class RequestDemo02 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doPost(req,resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            //通过HttpServletRequest获取前端用户提交的信息
            //req.getParameterValues(); 获得前端传递的控件信息,通过控件的name;但是可以接受多个参数的控件,比如(多选框....)
            //req.getParameter(); 获得前端传递的控件信息,通过控件的name;
    
            req.setCharacterEncoding("utf-8");
            resp.setCharacterEncoding("utf-8");
    
            String username = req.getParameter("username");
            String password = req.getParameter("password");
    
            //连接数据库,比较数据库中的信息是否匹配
    
            if (username.equals("admin")&&password.equals("1234567")){
                System.out.println("登录成功!"); //跳转到成功页面
            }else {
                System.out.println("登录失败!"); //提示重新注册
            }
    
            System.out.println(username);
            System.out.println(password);
    
    
        }
    }

           3.配置web.xml

       <servlet>
            <servlet-name>RequsetDemo02</servlet-name>
            <servlet-class>com.kuang.servlet.RequestDemo02</servlet-class>
        </servlet>
    
        <!--=====================================================-->
    
    
        <servlet-mapping>
            <servlet-name>RequsetDemo02</servlet-name>
            <url-pattern>/r2</url-pattern>
        </servlet-mapping>

          4.提交测试:

    • 检查英文提价的情况,服务器是否接受成功
    • 提交中文,看看乱码情况
    • 设置编码,解决乱码问题

    2.4 request实现请求转发:

    package com.kuang.servlet;
    
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    public class FormServlet1 extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doPost(req,resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //处理乱码
            req.setCharacterEncoding("UTF-8");
            //处理前端的请求
            String username = req.getParameter("username");
            String password = req.getParameter("password");
    
            System.out.println("接收到的用户名:"+username+"
    密码:"+password+"
    爱好:");
    
            String[] hobbies = req.getParameterValues("hobby");
    
            for (String hobby : hobbies) {
                System.out.println(hobby);
            }
    
    
            //重定向:服务器告诉客户端你应该请求另外一个地址;  (地址栏会变)
            //resp.sendRedirect("url");
    
            //转发:服务器把这个请求转向另外一个Servlet去处理; (地址栏不会变)
            //RequestDispatcher ,需要使用RequestDispatcher来进行处理,我们需要获得这个类
            //参数就是他要转发到的页面
    
            /*
            RequestDispatcher requestDispatcher = req.getRequestDispatcher("/success.jsp");
            requestDispatcher.forward(req,resp);
            */
    
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
    
            req.getRequestDispatcher("/success.jsp").forward(req,resp);
    
    
        }
    }

    (注意转发和重定向的区别:)

    • 重定向:服务器告诉客户端,让客户端去请求另一个地址;(客户端行为)

            地址栏会变; 不能携带参数。

    • 请求转发:服务器自己转发到服务器上的另一个请求;(服务器行为)

             地址栏不会变;  可以携带参数。

  • 相关阅读:
    软件开发各列阶段需要达到的目标和生成的成果
    SQL Server 2005 Express附加数据库为“只读”的解决方法
    System.Web.HttpException: Request timed out.
    [收藏]javascript keycode大全
    MS SQL Server中的CONVERT日期格式化大全
    转贴 对于大型公司项目平台选择j2ee的几层认识(一)
    项目经理:做好项目开始阶段的九条经验(1) 项目 技术应用
    .Net Core 实现账户充值,还款,用户登录(WebApi的安全)
    JS如何通过月份,计算月份相差几个月
    .Net core Api后台获取数据,异步方法中,数据需采用Linq分页
  • 原文地址:https://www.cnblogs.com/xbfchder/p/11195852.html
Copyright © 2011-2022 走看看