韩顺平 servlet 笔记 第2讲

时间:2022-06-16 21:03:21

1、

韩顺平 servlet 笔记 第2讲

2、开发servlet三种方法

  1.实现servlet接口

  2.继承GenerieServlet

  3.继承HttpServlet

3、servlet开发流程

  1)在tomcat中webapps中建一个文件夹(myWebsign) ->  WEB-INF  ->  classes(放servlet的) lib(放jar包的)web.xml文件

  2)引入jar包  servlet-api.jar

    package com.tsinghua;实现servlet接口

    import javax.servlet.*;

    import java.io.*;

    import javax.servlet.Servlet;

    import javax.servlet.ServletConfig;

    import javax.servlet.ServletException;

    import javax.servlet.ServletRequest;

    import javax.servlet.ServletResponse;

    import java.io.IOException;

    public class Hello implement Servlet{

      //该函数用于初始化servlet(类似于类的构造函数)

      //该函数只会被调用一次(当用户第一次访问该servlet时被调用)

      public void init(ServletConfig  parml) throws ServletException{

      }

      //得到servlet配置文件

      public ServletConfig getServletConfig(){

      }

      //这个函数用于处理业务逻辑

      //程序员应当把业务逻辑代码写在这里

      //当用户每访问servlet时,都会调用

      //req:用于获得客户端(浏览器)信息

      //res:用于向客户端返回信息

      public void service(ServletRequest req,ServletRespinse res)  throws {

         PrintWriter  pw = res.getWriter();

         pw.println("hello,world");

      }

      public String getServletInfo(){

      }

      //销毁servlet实例(释放内存)

      //1.reload 该servlet(webApps) 2.关闭tomcat  3.关机

      public void destory(){

      }

    }

  3)部署servlet  在web.xml文件中加代码

    <servlet>

      <!--给你的servlet取名,任意的-->

      <servlet-name>hello</servlet-name>

      <!--指明servlet的路径,(包名+类名)-->

      <servlet-class>com.tsinghua.Hello</servlet-class>

    </servlet>

    <servlet-mapping>

      <!--给你的servlet取名,任意的,与上对应-->

      <servlet-name>hello</servlet-name>

      <!--这是在浏览器中输入的访问该servlet的url,任意的-->

      <url-pattern>/sp</url-pattern>

    </servlet-mapping>

  4)启动Tomcat 访问你的servlet 

    在浏览器中输入:http:127.0.0.1:8080/myWebsign/sp 回车

4、servlet的生命周期

  1)封装servlet由相应的容器来完成

  2)创建一个Servlet实例

  3)调用servlet的init()方法,该方法只会在第一次访问servlet时被调用一次

  4)服务,调用servlet的service()方法,一般业务逻辑在这里了处理。该方法在访问servlet时都会被调用

  5)销毁 调用servlet的destory()方法,销毁该servlet实例 该方法在一下情况被调用

    1.reload 该servlet(webApps) 2.关闭tomcat  3.关机

5.这是第二种开发servlet的方法(继承GenericServlet开发)

  package com.tsinghua;

  import javax.servlet.GenericServlet;

  import java.io.*;

  public class HelloGen extends GenericServlet{

    //重写service方法即可

    public void service(ServletRequest req,ServletResponse){

      //返回hello.world! generic

      try{

        printwriter pw = res.getwriter();

        pw.println("hello,world!generic");

      }catch(Exception e){

        e.printStackTrace();

      }

    }

  }

6.通过继承HttpServlet开发servlet

  package com.tsinghua;

  import javax.servlet.http.*;

  import java.io.*;

  public class HelloHttp extends HttpServlet{

    //处理get请求

      //req:用于获得客户端(浏览器)信息

    //res:用于向客户端返回信息

    public void doGet(HttpServletRequest req,httpServletResponse res){   

     try{

        printwriter pw = res.getwriter();

        pw.println("hello,world!generic");

      }catch(Exception e){

        e.printStackTrace();

      }

    }

    public void doPost(HttpServletRequest req,httpServletResponse res){

      this.doGet(req,res);

    }

  }

7、用户登录网站

  登录界面

  package com.tsinghua;

  import javax.servlet.http.*;

  import java.io.*;

  public class Login extends HttpServlet{ 

      //处理get请求

      //req:用于获得客户端(浏览器)信息

    //res:用于向客户端返回信息

    public void doGet(HttpServletRequest req,httpServletResponse res){   

        //业务逻辑

     try{

        //中文乱码

        res.setContentType("text/html;charset=gbk");

        printwriter pw = res.getwriter();

        //返回登录界面

        pw.println("<html>");

        pw.println("<body>");   

        pw.println("<h1>登录界面</h1>");

        pw.println("<form action=logincl method=post>");//url  进入logincl方法

        pw.println("用户名:<input type = text  name = username><br>");

        pw.println("密码:<input type = password  name = pwd><br>");

        pw.println("<input  type=checkbox  name=keep  value=2>两周内不再重新登录");

  cookie   pw.println("<input type = submit  value = loing><br>");

        pw.println("</form>");

        pw.println("</body>");

        pw.println("</html>");

      }catch(Exception e){

        e.printStackTrace();

      }

    }

    public void doPost(HttpServletRequest req,httpServletResponse res){

      this.doGet(req,res);

    }

  }

 

  //用户验证servlet

  package com.tsinghua;

  import javax.servlet.http.*;

  import java.io.*;

  public class LoginCl extends HttpServlet{ 

      //处理get请求

      //req:用于获得客户端(浏览器)信息

    //res:用于向客户端返回信息

    public void doGet(HttpServletRequest req,httpServletResponse res){   

        //业务逻辑

     Connection  ct =null;

        Statement sm = null;

     ResultSet  rs  null; 

     try{

        //中文乱码

        res.setContentType("text/html;charset=gbk");

        //接受用户名和密码

        String u=req.getParameter("username");

        String p = req.getParameter("pwd");

        //连接数据库

        class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

        //得到链接 引入sql包   databaseName=sqdb  数据库名

        ct = DriverManager.grtConnevtion("jdbc:microsoft:sqlserver://127.0.0.1433:databaseName=sqdb","用户名","密码");

        //创建一个statement

        sm = ct.createStatement();

        rs = sm.executteQuery("select top 1 passwd from  users where username= ' " +u +" ' ");

        if(rs.next()){

          //说明用户是存在

          String dbPasswd = rs.getString(1);//得到该用户密码

          if(dbPasswd.equals(p)){//用户输入密码和数据库密码是否相同         

          //合法

          String keep = req.getParameter("keep");

          if(keep!=null){

          //将任务名和密码保存在客户端

          Cookie  name = new  Cookie("myname",u);

          Cookie  pass = new  Cookie("mypasswd",p);

          //设置时间

          name.setMaxAge(14*24*3600);

          pass.setMaxAge(14*24*3600);

          //回写到客户端

          res.addCookie(name);

          res.addCookie(pass);

          }

          //将验证成功的信息写入session

          //1、得到session

          HttpSession  hs = req.getSession(true);

          //修改session的存在时间

          hs.setMaxInactiveInterval(20);//20s

          hs.setAttribute("name","u");

          res.sendRedirect("wel");

          }

        }else{

          //说明用户名不存在

          res.sendRedirect("login");

        }

      }catch(Exception e){

        e.printStackTrace();

      }finally{

         try{

          if(rs!=null){

           rs.close();

          }

         if(sm!=null){

           sm.close();

         }

         if(ct!=null){

          ct.close();

         }

       }catch(Exception ex){

         ex.printStackTrace();

       } 

      }

    }

    public void doPost(HttpServletRequest req,httpServletResponse res){

      this.doGet(req,res);

    }

  }

 

  欢迎界面

    package com.tsinghua;

  import javax.servlet.http.*;

  import java.io.*;

  public class Wel extends HttpServlet{ 

      //处理get请求

      //req:用于获得客户端(浏览器)信息

    //res:用于向客户端返回信息

    public void doGet(HttpServletRequest req,httpServletResponse res){   

        //得到session

      HttpSession hs = req.getSession(true);

      String val = (String)hs.getAttribute("pass");

      //判断

      if(val==null){

        try{

          res.sendRedirect("login");

        }catch(Exception e){

          e.printStackTrace();

        }

      }

      Printwriter pw = res.getwriter();

、、、、、、、、、、、分页、、、、、、、、、、、、、

      int pageSize = 3;//一页显示几条记录

      int pageNow = 1;//希望显示第几页

      int rowCount = 0;//共有几条记录(查表)

      int pageCount = 0;//共有几页(计算)

      //动态的接受pageNow

      String sPageNow = req.getParameter("pageNowok");

      if(spageNow!=null){

        pageNow = Integer.parseInt(sPageNow);

      }

      //得到rowCount  

      class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

      //得到链接 引入sql包   databaseName=sqdb  数据库名

      ct = DriverManager.grtConnevtion("jdbc:microsoft:sqlserver://127.0.0.1433:databaseName=sqdb","用户名","密码");

      ps = ct.prepareStatement("select count(*) from users");

      rs = ps.executeQuery();

      if(rs.next()){

        rowCount = rs.getInt(1);

      }

      //计算pageCount

      if(pageCount/pageSize==0){

        pageCount = pageCount/pageSize;

      }else{

        pageCount = pageCount/pageSize+1;

      }

          ps = ct.prepareStatement("select top ? * from users where userId not in(select top  ? userId from users)");

      //给?赋值

      ps.setInt(1,pageSize);

      ps.setInt(2,pageSize*(pageNow-1));  

      rs=ps.executeQuery();

      while(rs.next()){

        pw.println("<tr>");

        pw.println("<td>"+rs.getInt(1)+"</td>");

        pw.println("<td>"+rs.getInt(2)+"</td>");

        pw.println("<td>"+rs.getInt(3)+"</td>");

        pw.println("<td>"+rs.getInt(4)+"</td>");

        pw.println("<td>"+rs.getInt(5)+"</td>");

        pw.println("<tr>");

      }

      //上一页

      if(pageNow!=1)

      pw.println("<a href = wel?pageNowok= "+(pageNow-1)+">上一页</a>");

      //下一页

      if(pageNow!=pageCount)

      pw.println("<a href = wel?pageNowok= "+(pageNow+1)+">下一页</a>");

      //显示超链接

      for(int i=1;i<=pageCount;i++){

        pw.println("<a href = wel?pageNow="+i+">"+i+"</a>");

      }

 

      //得到从logicl传递的用户名

      String u = req.getParameter("uname");

     try{

        Printwriter pw = res.getwriter();

        pw.println("wel.hello");

      }catch(Exception e){

        e.printStackTrace();

      }

    }

 

    

    public void doPost(HttpServletRequest req,httpServletResponse res){

      this.doGet(req,res);

    }

  }