美文网首页
Servlet入门

Servlet入门

作者: 磊_5d71 | 来源:发表于2018-09-19 15:58 被阅读0次
    • Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。

    • 案例

    package com.alan.servlet;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    //需要继承HttpServlet类
    public class LoginServlet extends HttpServlet{
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("我是doGet方法");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("我是doPost方法");
    
        }
    }
    
    • 在web.xml中进行虚拟路径配置
        <!-- 
        给LoginServlet类配置一个对象访问的虚拟路径,一个servlet标签对应一个类
       -->
       <servlet>
            <!-- 给类配置别名,方便使用,一般配置为类的名称 -->
            <servlet-name>LoginServlet</servlet-name>
            <servlet-class>com.alan.servlet.LoginServlet</servlet-class>
       </servlet>
        <servlet-mapping>
            <servlet-name>LoginServlet</servlet-name>   
            <!-- 配置对外访问虚拟路径,就是/LoginServlet -->
            <url-pattern>/LoginServlet</url-pattern>
        </servlet-mapping>
    

    servlet路径问题

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!-- 路径对应http://localhost:8080/ServletProj/LoginServlet -->
    <%
        String basePath = request.getScheme()+":"+"//"+request.getServerName()+":"+request.getServerPort()
        +request.getServletContext().getContextPath()+"/";
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>登陆</title>
    </head>
    <body>
        <form align="center"
            action="<%=basePath %>LoginServlet" method="post">
            <p>
                用户名:<input type="text" name="username">
            </p>
            <p>
                密码:<input type="password" name="password">
            </p>
            <p>
                <input type="submit" value="登陆"> <input type="reset"
                    value="重置">
            </p>
        </form>
    </body>
    </html>
    

    Servlet生命周期

    • Servlet生命周期分为三个阶段
      1、初始化阶段调用init() 方法
      2、响应客户请求阶段调用service()方法
      3、终止阶段调用destroy()方法

    • 案例

    package com.alan.servlet;
    
    import java.io.IOException;
    
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    //下述配置方式等同于在web.xml中配置
    @WebServlet("/LifeServlet")
    public class LifeServlet extends HttpServlet {
        
        @Override
        public void init(ServletConfig config) throws ServletException {
            System.out.println("Servlet的init()方法");
        }
        
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("Servlet被请求了");
        }
    
        @Override
        public void destroy() {
            System.out.println("Servlet被销毁了");
        }
    
    }
    

    image.png

    Servlet请求与响应

    • 案例
    package com.alan.servlet;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    //需要继承HttpServlet类
    public class LoginServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 获取表单提交过来的数据,先设置编码格式。只对post方式有效
            request.setCharacterEncoding("utf-8");
            String name = request.getParameter("username");
            String password = request.getParameter("password");
    
            System.out.println("username:" + name);
            System.out.println("password:" + password);
        }
    
        // 使用doPost()方法时,也调用doGet()方法
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    
    }
    

    ServletContext与ServletConfig

    • ServletDemo1类
    package com.alan.servlet;
    
    import java.io.IOException;
    
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    /**
     * ServletContext对象:表示整个JavaWeb工程
     * ServletConfig对象:表示某一个Servlet类的配置文件
     * @author alan
     *
     */
    
    @WebServlet("/ServletDemo1")
    public class ServletDemo1 extends HttpServlet {
           
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //获取整个web工程对象
            //context对象是一个域对象,可以往某一个域对象中存放数据,并且还可以取出存放的数据
            ServletContext context = this.getServletContext();
            //往context域对象中存放数据
            context.setAttribute("username","张三");
            //取出context域中的存放数据
            Object result = context.getAttribute("username");
            //打印取出的结果
            System.out.println(result);
            
        }
    
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
    }
    
    • ServletDemo2类
    package com.alan.servlet;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    
    
    @WebServlet("/ServletDemo2")
    public class ServletDemo2 extends HttpServlet {
    
    
        
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            Object resutl = this.getServletContext().getAttribute("username");
            System.out.println(resutl);
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
    }
    
    • ServletDemo3类
    package com.alan.servlet;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    
    
    //虚拟路径在web.xml中配置,ServletConfig
    public class ServletDemo3 extends HttpServlet {
    
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //首先获取ServletConfig对象
            String result = this.getServletConfig().getInitParameter("encoding");
            System.out.println(result);
            
        }
    
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            
        }
    
    }
    
    • web.xml更新
        <servlet>
        <servlet-name>ServletDemo3</servlet-name>
        <servlet-class>com.alan.servlet.ServletDemo3</servlet-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
      </servlet>
      <servlet-mapping>
        <servlet-name>ServletDemo3</servlet-name>
        <url-pattern>/ServletDemo3</url-pattern>
      </servlet-mapping>
    

    转发与重定向的区别

    • 实现转发调用的是HttpServletRequest对象中的方法,实现重定向调用的是HttpServletResponse对象中的方法
    • 转发时浏览器中的url地址不会发生改变,重定向时浏览器中的url地址会发生改变
    • 转发时浏览器只请求一次服务器,重定向时浏览器请求两次服务器
    • 案例
    package com.alan.servlet;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    //需要继承HttpServlet类
    public class LoginServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 获取表单提交过来的数据,先设置编码格式。只对post方式有效
            request.setCharacterEncoding("utf-8");
            String name = request.getParameter("username");
            String password = request.getParameter("password");
    
            System.out.println("username:" + name);
            System.out.println("password:" + password);
            
            //1、通过转发实现跳转
            if(name.equals("admin")&&password.equals("123")) {
                request.getRequestDispatcher("/success.jsp").forward(request, response);
            }else {
                //request.getRequestDispatcher("/fail.jsp").forward(request, response);
                //2、通过重定向实现跳转,重定向需要写工程名字
                //注意url也放生变化,最后为fail.jsp
                response.sendRedirect("/ServletProj/fail.jsp");
                
            }
            
        }
    
        // 使用doPost()方法时,也调用doGet()方法
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    
    }
    

    相关文章

      网友评论

          本文标题:Servlet入门

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