Servlet簡單使用以及web瀏覽器的訪問+綜合案例登錄的實現


1、定義一個類實現servlet接口,和相關配置

  • 在3.0之前需要配置web.xml,3.0和3.0之后就使用注解配置
<!--web.xml中-->
<servlet>
    <servlet-name>demo</servlet-name>
    <servlet-class>com.yj.servlet.ServletDemo</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>demo</servlet-name>
    <url-pattern>/demo1</url-pattern>
</servlet-mapping>
//3.0之后使用注解(推薦): @WebServlet("資源路徑")
@WebServlet("/demo1")
public class ServletDemo implements Servlet{
  //實現接口中的所有抽象方法: 5個
  //getServletConfig()、getServletInfo()
  /*
    生命周期方法:
    1、被創建:init()只執行一次
    2、提供服務:service() 執行多次
    3、被銷毀:destroy() 服務器關閉時執行,執行一次
  */
}
  • servlet 體系結構
graph LR A[Servlet接口] -->B[GenericServlet抽象類] B -->C[HttpServlet抽象類]

GenericServlet:將Servlet接口中其他的方法做了默認空實現,只將service()方法作為抽象
HttpServlet:對http協議的一種封裝,簡化操作,直接復寫doGet/doPost方法即可
簡化寫法:

@WebServlet("/demo1")
public class ServletDemo extends GenericServlet{
  //實現抽象方法 service:1個
}

最終寫法:

@WebServlet("/demo1")
public class ServletDemo implements HttpServlet{
  //重寫方法:doGet/doPost
}

2、定義的Servlet如何在瀏覽器訪問

  • 配置好tomcat,如何配置:點擊查看
  • 上述的代碼會找不到servlet相關的包,需要導入servlet-api
導入步驟:
  1、在file菜單欄下找到project Structure
  2、找到 Libraries,點擊+號,選擇java
  3、找到 Tomcat的安裝目錄下的lib文件夾,下面有 servlet-api.jar,選擇導入
  • 運行tomcat,在打開的瀏覽器頁面地址欄后添加/demo1路徑就可以訪問到了

3、登錄案例

  • 需求

    • 1.編寫login.html登錄頁面
    • 2.使用Druid數據庫連接池技術,操作mysql,users數據庫中user表。點擊查看如何使用
    • 3.使用JdbcTemplate技術封裝JDBC。點擊查看如何使用
    • 4.登錄成功,轉發到SuccessServlet展示:登錄成功!歡迎用戶名
    • 5.登錄失敗,轉發到FailServlet展示:登錄失敗,用戶名或密碼錯誤
  • 項目目錄結構

  • servlet部分代碼

//LoginServlet
@WebServlet("/loginDemo")
public class LoginServlet extends HttpServlet {
  @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //設置編碼
        req.setCharacterEncoding("utf-8");
        //正常步驟:獲取請求參數並封裝user對象
//        String username = req.getParameter("username");
//        String password = req.getParameter("password");
//
//        User loginUser = new User();
//        loginUser.setName(username);
//        loginUser.setPassword(password);

        //使用BeanUtils,簡化數據封裝
        /*
        * 需要到入兩個包:commons-beanutils-1.8.0.jar、commons-logging-1.2.jar
        * */
        Map<String, String[]> map = req.getParameterMap();
        User loginUser = new User();
        try {
            BeanUtils.populate(loginUser,map);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

        UserDao userDao = new UserDao();
        User user = userDao.login(loginUser);
        if(user == null){
            //登錄失敗轉發
            req.getRequestDispatcher("/failServlet").forward(req,resp);
        }else{
            //登錄成功轉發,並向reques域中共享user對象
            req.setAttribute("user", user);
            req.getRequestDispatcher("/successServlet").forward(req,resp);
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }
}

//SuccessServlet
@WebServlet("/successServlet")
public class SuccessServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        User user = (User) req.getAttribute("user");
        resp.setContentType("text/html;charset=utf-8");
        resp.getWriter().write("登錄成功,歡迎"+ user.getName());
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM