美文网首页Java web
010-servlet入门

010-servlet入门

作者: Ktry | 来源:发表于2020-03-16 09:10 被阅读0次

    Servlet

    Serlvet开发步骤

    /**
     *  1、写一个类继承自HttpServet
     *  2、重写父类的doget和dopost
     *  3、注册Servlet(将Servlet用url地址进行映射)
     *
     */
    public class TestServlet extends HttpServlet{
        /**
         * 处理get请求的方法
         */
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("处理get请求");
    
        }
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("处理post请求");
        }
    }
    

    web.xml配置

    <!-- TestServlet的映射    注册TestServlet -->  
    <!-- 
      servlet-name      给Servlet取名字
      servlet-class       指明是哪一个Serlvet
      -->
    <servlet>
        <servlet-name>test</servlet-name>
        <!-- 全限定名    包名+类名 -->
        <servlet-class>com.qf.servlet.TestServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>test</servlet-name>
        <!-- 
           注意: 必须有一个  /    
           http://localhost:8080/JavaWeb01/test
         -->
        <url-pattern>/test</url-pattern>
    </servlet-mapping>
    

    测试

    启动项目
    在地址栏输入   http://localhost:8080/你的工程名/test
    

    Servlet的生命周期

    /**
     * 
     * Servlet的生命周期
     * Servlet生命周期的方法
     *     1、init()方法    Servlet初始化          当第一次访问的时候就创建Servlet
     * 2、service()方法  Serlvet处理请求      每次请求都会执行service方法
     * 
     *         service方法会接收到请求,然后根据请求将请求分发给doGet方法或者是doPost方法
     *         一般在开发中都是重写doGet和doPost方法
     * 
     * 3、destory()方法   Servlet被销毁       当tomcat容器销毁的时候Serlvet也会被销毁
     * 
     * 当客户端发送请求达到Servlet的时候,会执行init()方法,创建Servlet的对象。
     * 并且执行对应doget方法或者是doPost方法,如果再次发送请求,只会执行doget方法或者是doPost方法
     * 不会再创建Servlet对象,所以说Servlet是单例的(只有一个实例)
     * 当tomcat服务器停止的时候,Servlet就会被销毁
     * 
     * 启动tomca的时候,就会创建此Servlet的对象
     * <load-on-startup>1</load-on-startup>  
     *
     */
    

    代码实现

    public class LifeServlet extends HttpServlet{
        @Override
        public void init() throws ServletException {
            System.out.println("这是Servlet初始化的方法");
        }
    
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("执行了方法");
        }
    
        @Override
        public void destroy() {
            System.out.println("这是Servlet销毁的方法");
        }
    }
    

    web.xml配置

    <servlet>
        <servlet-name>life</servlet-name>
        <servlet-class>com.qf.servlet.LifeServlet</servlet-class>
        <!--  在启动tomca的时候,就会创建此Servlet的对象-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>life</servlet-name>
        <url-pattern>/life</url-pattern>
    </servlet-mapping>
    

    Serlvet处理响应

    在Servlet中处理响应,通过HttpServletResponse对象
    通过resp.getWrite()获取输出流
    PrintWrite out = resp.getWrite();
    out.write("响应的内容");
    

    代码实现

    public class DemoServlet extends HttpServlet{
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //给客户端响应     
            PrintWriter out = resp.getWriter();
    //        out.write("cxk,hello");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    
    }
    

    web.xml配置

    <servlet>
        <servlet-name>demo</servlet-name>
        <servlet-class>com.qf.servlet.DemoServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>demo</servlet-name>
        <url-pattern>/demo</url-pattern>
    </servlet-mapping>
    
    

    Serlvet处理请求

    在Servlet中处理请求,通过HttpServletRequest对象
    方法的参数 表示的是前端页面上的name属性名
    通过:req.getParameter("username");获取请求参数
    
    

    代码实现

    login.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>登录页面</title>
    </head>
    <body>
        <!-- 
            访问login.html
            http://localhost:8080/JavaWeb01/login.html
            访问LoginServlet
            http://localhost:8080/JavaWeb01/login
         -->
    
        <form action="login" method="post">
            用户名<input type="text" name="username">
            密码 <input type="password" name="password">
            <input type="submit" value="登录">
        </form>
    </body>
    </html>
    
    

    LoginServlet

    public class LoginServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //处理请求 
            //1、获取请求的参数           方法的参数 表示的是前端页面上的name属性名
            String username = req.getParameter("username");
            String password = req.getParameter("password");
    
            System.out.println(username);
            System.out.println(password);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    
    

    web.xml配置文件

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

    解决乱码

    1、get请求  在tomcat8.5以上的版本没有乱码     ISO-8859-1
    2、post请求  会乱码
        //解决post请求乱码
        req.setCharacterEncoding("utf-8");
    
    3、响应会乱码
        //处理响应乱码
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
    
    所以以后再所有的Serlvet中先写上着三行代码
    req.setCharacterEncoding("utf-8");
    resp.setCharacterEncoding("utf-8");
    resp.setContentType("text/html;charset=utf-8");
    
    

    Servlet的跳转

    /**
     *            Servlet中实现跳转
     *             跳转指的是一个页面(Servlet)跳转到另外一个页面(Servlet)
     *             跳转分为两种
     *                 客户端跳转(重定向)       HttpServletResponse        地址栏会发生改变
                                                                   不能携带数据
     *                 resp.sendRedirect("welcome.html");
     * 
     *                 服务端跳转(请求转发)  HttpServletRequest       地址栏不会发生改变
                                                                      可以携带数据
     *                 req.getRequestDispatcher("welcome.html").forward(req, resp);
     */
    public class TestServlet extends HttpServlet{
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //http://localhost:8080/JavaWeb02/test
            //http://localhost:8080/JavaWeb02/welcome.html
    
    
            //重定向到welcome.html页面
            //resp.sendRedirect("welcome.html");
    
            //Dispatcher 分发、转发
            //req.getRequestDispatcher("welcome.html").forward(req, resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {    
            doGet(req, resp);
        }
    
    }
    
    

    路径问题

    //获取上下文路径    获取项目的路径
    req.getContextPath();
    
    路径问题总结:在重定向与转发的路径标准方式
    重定向的时候 路径:   req.getContextPath()+"/资源的位置"
    转发的时候   路径:   "/资源的位置"
    重定向
    //   /JavaWeb02/html/welcome.html
    resp.sendRedirect(req.getContextPath()+"/welcome.html");
    
    转发
    //   /JavaWeb02/test/test/welcome.html
    //   这里的 / 斜杠  表示WebContent路径
    req.getRequestDispatcher("/welcome.html").forward(req, resp);
    
    

    相关文章

      网友评论

        本文标题:010-servlet入门

        本文链接:https://www.haomeiwen.com/subject/vmewehtx.html