Day48 Servlet-3 Cookie對象和Session對象

請求編碼和Cookie學習

請求編碼格式學習

post請求方式:
            在service中使用req.setCharacterEncoding("utf-8")即可
        get請求方式:
            1 在service中使用req.setCharacterEncoding("utf-8")
            2 在tomcat的server.xml中配置
                  <Connector port="8080" protocol="HTTP/1.1"
                               connectionTimeout="20000"
                              redirectPort="8443"  useBodyEncodingForURI="true"/>
    Servlet處理請求數據流程總結:
            //設置請求編碼格式
            //設置響應編碼格式
            //獲取請求信息
            //處理請求信息
            //響應處理結果
                //直接響應
                //請求轉發
                //重定向

Cookie學習

問題:
        不同的請求有可能使用相同的用戶數據,這樣就造成用戶每次發請求都要講相同數據輸入一遍。
    解決:
        使用cookie
    特點:
        cookie是瀏覽器端的數據存儲技術
    使用:
        1 在servlet中確定哪些數據是要共享的數據
        2 創建Cookie對象存儲請求要共享的數據
            注意:一個Cookie對象只能存儲一條共享數據。
        3 設置響應
            默認方式:
                cookie只有在當次瀏覽內有效(瀏覽器不關閉會一直有效,關閉瀏覽器則銷燬,存儲在瀏覽器的內存中)
                只有在當前項目下的路徑纔會附帶cookie信息
            自定義方式:
                設置Cookie有效期:
                    cookie對象.setMaxAge(秒爲單位的整數時間);
                    例如:c2.setMaxAge(3600*24*3);
                    注意:設置了有效期的Cookie是存儲在客戶端的硬盤的,到期後會自動銷燬。
                設置Cookie的訪問路徑:
                    指定cookie附帶的路徑
                    Cookie對象.setPath(String uri);
           4 獲取Cookie信息
                使用request對象進行獲取
                    Cookie[] cks=req.getCookies()//返回cookie數組
                    注意:在遍歷之前需要先判斷Cookie是否爲null,不爲null才能遍歷。
                    cookie對象.getName()//返回鍵名
                    cookie對象.getValue()//返回值
        總結:
            Cookie其實是瀏覽器端的一門存儲技術,解決了不同請求數據共享的問題。

session學習

Session學習:
    問題:
        不同的請求在後臺處理時有可能會使用相同的數據
    解決:
        使用Session技術
    特點:
        session是一門服務器端的數據存儲技術。
    使用:
        1 獲取或者創建Session對象
            HttpSession hs=req.getSession()
            注意: 
                如果請求中有sessionID則返回其對應的session對象。
                如果請求中沒有sessionID則創建一個session對象,並將sessionID自動使用cookie技術存到瀏覽器端。
        2 存儲數據和獲取數據
            hs.setAttribute(String key,Object obj);//存儲數據
            hs.getAttribuet(String key)//獲取數據,返回的是Object類型,需要強轉。
        3 設置session
            設置session有效期:
                hs.setMaxInactiveInterval(時間整數,單位秒);
            session強制失效:
                     hs.invalidate();
    總結:
        session的作用域:
                一次會話內有效
    總結Servlet的使用
        第一:
            創建並運行一個servlet:
                    創建一個繼承了HTTPServlet的java類,覆寫service方法
                    配置web.xml
                    部署項目到服務器,啓動並在瀏覽器中輸入地址調用即可
        第二:
            使用servlet處理用戶請求:
                    設置請求編碼格式
                    設置響應編碼格式
                    獲取請求信息
                        獲取用戶請求信息
                        獲取cookie信息(可能)
                    處理請求
                        處理用戶請求數據
                        獲取session數據(可能)
                        處理session數據(可能)
                    響應處理結果
                        創建併發送cookie到客戶端(可能)
                        將數據存儲到session中(可能)

                        直接響應
                        請求轉發
                        重定向

ServletConfig對象和ServletContext對象學習

ServletConfig對象學習:
        作用:
            獲取servlet在web.xml中配置的初始化參數
        使用:
            1 在web.xml中配置servlet的初始化參數,例如:
            <servlet>
    <servlet-name>TestServletConifg</servlet-name>
    <servlet-class>com.bjsxt.servlet.TestServletConifg</servlet-class>
    <!--配置servlet的初始化數據(局部)  -->
    <init-param>
        <param-name>flag</param-name>
        <param-value>false</param-value>
    </init-param>
     <init-param>
        <param-name>uname</param-name>
        <param-value>zhangsan</param-value>
    </init-param>
             </servlet>
            2 在servlet中使用覆寫init(ServletConfig sc)的方法
               在此方法中使用sc對象獲取配置信息即可
                sc.getInitParameter("鍵名"),例如:sc.getInitParameter("flag")
ServletContext對象:

        request解決問題:一次請求內的數據共享問題
        session解決問題:一個用戶的不同請求的數據共享問題

        新的問題:
            不同用戶的數據共享怎麼辦?       
        特點:
            ServletContext對象伴隨項目的運行由服務器自動給項目創建的對象。一個項目有且只有一個。
        作用:
            1 可以讓不同的用戶共享相同的數據
            2 獲取web.xml中配置的全局初始化數據
            3 動態獲取項目資源的絕對路徑
        使用:
            1創建ServletContext對象
                ServletContext sc=this.getServletConfig().getServletContext();
                ServletContext sc2=this.getServletContext();
                ServletContext sc3=req.getSession().getServletContext();
            2 操作
                存儲和獲取作用域數據
                    sc.setAttribute("str", "6666");//存
                    sc.getAttribute("str");//取
                獲取web.xml中的數據
                    sc.getInitParameter("鍵名")
                動態獲取項目資源的絕對路徑
                    String path=sc.getRealPath("資源名(資源默認從src下進行查找)");

小案例

實現3天免登錄,和歡迎XXX登錄功能
項目名2018-3-8-loginServlet
src文件夾:
com.bjsxt.dao:
UserDao.java:

package com.bjsxt.dao;

import java.util.ArrayList;

import com.bjsxt.pojo.User;

public interface UserDao {
    //驗證登錄
  User checkUserInfo(String uname,String upwd);
  //查詢cookie
  User checkUserInfoByCookie(String uid);
  //查詢所有用戶信息
  ArrayList<User> selAllInfo();

}

com.bjsxt.daoImpl:
UserDaoImpl.java:

package com.bjsxt.daoImpl;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.bjsxt.dao.UserDao;
import com.bjsxt.pojo.User;

public class UserDaoImpl implements UserDao{
   //驗證登錄
    @Override
    public User checkUserInfo(String uname, String upwd) {
        //聲明JDBC變量
        Connection conn=null;
        PreparedStatement ps=null;
        ResultSet rs=null;
        User u=null;
        try {
            //加載驅動
            Class.forName("com.mysql.jdbc.Driver");
            //創建數據庫連接對象
            conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/school","root","root");
            //創建SQL命令
            String sql="select * from t_user where uname=? and upwd=?";
            //創建SQL命令對象
            ps=conn.prepareStatement(sql);
            //給佔位符賦值
            ps.setString(1,uname);
            ps.setString(2,upwd);
            //執行SQL命令
            rs=ps.executeQuery();
            //遍歷查詢結果
            while(rs.next()){
                u=new User();
                u.setUid(rs.getInt("uid"));
                u.setUname(rs.getString("uname"));
                u.setUpwd(rs.getString("upwd"));
                u.setUphone(rs.getString("uphone"));
                u.setRid(rs.getInt("rid"));
            }       
            //返回結果
        } catch (Exception e) {
            // TODO: handle exception
        }finally{
            //關閉資源
            if(rs!=null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(ps!=null){
                try {
                    ps.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(conn!=null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
            return u;
    }

    @Override
    public User checkUserInfoByCookie(String uid) {
        //聲明JDBC變量
        Connection conn=null;
        PreparedStatement ps=null;
        ResultSet rs=null;
        User u=null;
        try {
            //加載驅動
            Class.forName("com.mysql.jdbc.Driver");
            //創建數據庫連接對象
            conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/school","root","root");
            //創建SQL命令
            String sql="select * from t_user where uid=?";
            //創建SQL命令對象
            ps=conn.prepareStatement(sql);
            //給佔位符賦值
            ps.setString(1,uid);
            //執行SQL命令
            rs=ps.executeQuery();
            //遍歷查詢結果
            while(rs.next()){
                u=new User();
                u.setUid(rs.getInt("uid"));
                u.setUname(rs.getString("uname"));
                u.setUpwd(rs.getString("upwd"));
                u.setUphone(rs.getString("uphone"));
                u.setRid(rs.getInt("rid"));
            }       
            //返回結果
        } catch (Exception e) {
            // TODO: handle exception
        }finally{
            //關閉資源
            if(rs!=null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(ps!=null){
                try {
                    ps.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(conn!=null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
            return u;
    }

    @Override
    public ArrayList<User> selAllInfo() {
        //聲明JDBC變量
                Connection conn=null;
                PreparedStatement ps=null;
                ResultSet rs=null;
                User u=null;
                ArrayList<User> list=null;
                try {
                    //加載驅動
                    Class.forName("com.mysql.jdbc.Driver");
                    //創建數據庫連接對象
                    conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/school","root","root");
                    //創建SQL命令
                    String sql="select * from t_user";
                    //創建SQL命令對象
                    ps=conn.prepareStatement(sql);
                    //給佔位符賦值

                    //執行SQL命令
                    rs=ps.executeQuery();
                    list=new ArrayList<User>();
                    //遍歷查詢結果
                    while(rs.next()){
                        u=new User();
                        u.setUid(rs.getInt("uid"));
                        u.setUname(rs.getString("uname"));
                        u.setUpwd(rs.getString("upwd"));
                        u.setUphone(rs.getString("uphone"));
                        u.setRid(rs.getInt("rid"));
                        list.add(u);
                    }       
                    //返回結果
                } catch (Exception e) {
                    // TODO: handle exception
                }finally{
                    //關閉資源
                    if(rs!=null){
                        try {
                            rs.close();
                        } catch (SQLException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                    if(ps!=null){
                        try {
                            ps.close();
                        } catch (SQLException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                    if(conn!=null){
                        try {
                            conn.close();
                        } catch (SQLException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                }
                    return list;
            }

}

com.bjsxt.pojo:
User.java:

package com.bjsxt.pojo;

public class User {
   private int uid;
   private String uname;
   private String upwd;
   private String uphone;
   private int rid;
public User() {
    super();
    // TODO Auto-generated constructor stub
}
public User(int uid, String uname, String upwd, String uphone, int rid) {
    super();
    this.uid = uid;
    this.uname = uname;
    this.upwd = upwd;
    this.uphone = uphone;
    this.rid = rid;
}
@Override
public String toString() {
    return "User [uid=" + uid + ", uname=" + uname + ", upwd=" + upwd
            + ", uphone=" + uphone + ", rid=" + rid + "]";
}
@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + rid;
    result = prime * result + uid;
    result = prime * result + ((uname == null) ? 0 : uname.hashCode());
    result = prime * result + ((uphone == null) ? 0 : uphone.hashCode());
    result = prime * result + ((upwd == null) ? 0 : upwd.hashCode());
    return result;
}
@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    User other = (User) obj;
    if (rid != other.rid)
        return false;
    if (uid != other.uid)
        return false;
    if (uname == null) {
        if (other.uname != null)
            return false;
    } else if (!uname.equals(other.uname))
        return false;
    if (uphone == null) {
        if (other.uphone != null)
            return false;
    } else if (!uphone.equals(other.uphone))
        return false;
    if (upwd == null) {
        if (other.upwd != null)
            return false;
    } else if (!upwd.equals(other.upwd))
        return false;
    return true;
}
public int getUid() {
    return uid;
}
public void setUid(int uid) {
    this.uid = uid;
}
public String getUname() {
    return uname;
}
public void setUname(String uname) {
    this.uname = uname;
}
public String getUpwd() {
    return upwd;
}
public void setUpwd(String upwd) {
    this.upwd = upwd;
}
public String getUphone() {
    return uphone;
}
public void setUphone(String uphone) {
    this.uphone = uphone;
}
public int getRid() {
    return rid;
}
public void setRid(int rid) {
    this.rid = rid;
}

}

com.bjsxt.service:
UserService.java:

package com.bjsxt.service;

import java.util.ArrayList;

import com.bjsxt.pojo.User;

public interface UserService {
    //驗證登錄
  User checkUserInfoService(String uname,String upwd);
    //查詢cookie
  User  checkUserInfoByCookieService(String uid);
  //查詢所有用戶信息
  ArrayList<User> selAllInfoService();
}

com.bjsxt.serviceImpl:
UserServiceImpl.java:

package com.bjsxt.serviceImpl;

import java.util.ArrayList;

import com.bjsxt.dao.UserDao;
import com.bjsxt.daoImpl.UserDaoImpl;
import com.bjsxt.pojo.User;
import com.bjsxt.service.UserService;

public class UserServiceImpl implements UserService{
    //聲明數據庫層對象
    UserDao u=new UserDaoImpl();
    //驗證登錄
    @Override
    public User checkUserInfoService(String uname, String upwd) {
        return u.checkUserInfo(uname, upwd);
    }
    @Override
    public User checkUserInfoByCookieService(String uid) {
        return u.checkUserInfoByCookie(uid);
    }
    @Override
    public ArrayList<User> selAllInfoService() {
        return u.selAllInfo();
    }

}

com.bjsxt.servlet:
CookieServlet.java:

package com.bjsxt.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.bjsxt.pojo.User;
import com.bjsxt.serviceImpl.UserServiceImpl;

public class CookieServlet extends HttpServlet {
  @Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
      //設置請求編碼格式
       req.setCharacterEncoding("utf-8");
      //設置響應編碼格式
    resp.setCharacterEncoding("utf-8");
    resp.setContentType("text/html;charset=utf-8");
    //接收cookie
    Cookie[] cs=req.getCookies();
    //遍歷數組並找到uid
     if(cs!=null){
         for(Cookie c:cs){
             String uid="";
                if("uid".equals(c.getName())){
                    uid=c.getValue();
                }
                  //查詢數據庫
                UserServiceImpl  us=new UserServiceImpl();
                User u=us.checkUserInfoByCookieService(uid);
                if(u!=null){
                    //將用戶數據存儲到session中
                    HttpSession hs=req.getSession();
                    hs.setAttribute("user", u);
                    //重定向
                    resp.sendRedirect("main");
                }
            }
    }else{
        //請求轉發
        req.getRequestDispatcher("login").forward(req, resp);
    }

}
} 

LoginServlet.java:

package com.bjsxt.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginServlet extends HttpServlet {
   @Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
       //設置請求編碼格式
       req.setCharacterEncoding("utf-8");
       //設置響應編碼格式
       resp.setCharacterEncoding("utf-8");
       resp.setContentType("text/html;charset=utf-8");
       //畫主頁面
        //響應頁面
        resp.getWriter().write("<html>");
        resp.getWriter().write("<head>");
        resp.getWriter().write("<title>登錄頁面</title>");
        resp.getWriter().write("<meta charset='utf-8'/>");
        resp.getWriter().write("</head>");
        resp.getWriter().write("<body>");
        resp.getWriter().write("<font color='red' size='15'>");
        resp.getWriter().write(req.getAttribute("str")!=null?(String)req.getAttribute("str"):"");
        resp.getWriter().write("</font>");
        resp.getWriter().write("<form action='user' method='get'>");
        resp.getWriter().write("用戶名: <input type='text' name='uname' value=''/><br />");
        resp.getWriter().write("密碼: <input type='password' name='pwd' value=''/><br />");
        resp.getWriter().write(" <input type='submit'  value='登錄'/><br />");
        resp.getWriter().write("</form>");
        resp.getWriter().write("</body>");
        resp.getWriter().write("</html>");
        resp.getWriter().write("</html>");
}
}

MainServlet.java:

package com.bjsxt.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.bjsxt.pojo.User;

public class MainServlet extends HttpServlet {
   @Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
        //設置響應編碼格式
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        resp.getWriter().write("<html>");
        resp.getWriter().write("<head>");
        resp.getWriter().write("<title>登錄頁面</title>");
        resp.getWriter().write("<meta charset='utf-8'/>");
        resp.getWriter().write("</head>");
        resp.getWriter().write("<body>");
        resp.getWriter().write("<h3>歡迎訪問506機場</h3>");
        resp.getWriter().write("<hr />");
        resp.getWriter().write("<font>"+((User)req.getSession().getAttribute("user")).getUname()+"</font>");
        resp.getWriter().write("<a href='show'>點擊查看所有的用戶信息</a>");
        resp.getWriter().write("</body>");
        resp.getWriter().write("</html>");
}
}

ShowServlet.java:

package com.bjsxt.servlet;

import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.bjsxt.pojo.User;
import com.bjsxt.serviceImpl.UserServiceImpl;

public class ShowServlet extends HttpServlet {
  @Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
    //設置請求編碼格式
            req.setCharacterEncoding("utf-8");
            //設置響應編碼格式
            resp.setCharacterEncoding("utf-8");
            resp.setContentType("text/html;charset=utf-8");
           //處理請求
             //創建Service對象
             UserServiceImpl  us=new UserServiceImpl();
             ArrayList<User> list=us.selAllInfoService();

             //處理響應結果
             req.setAttribute("list", list);
             //請求轉發
             req.getRequestDispatcher("show2").forward(req, resp);
}
}

ShowServlet2.java:

package com.bjsxt.servlet;

import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.bjsxt.pojo.User;

public class ShowServlet2 extends HttpServlet {
  @Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
    //設置請求編碼格式
            req.setCharacterEncoding("utf-8");
            //設置響應編碼格式
            resp.setCharacterEncoding("utf-8");
            resp.setContentType("text/html;charset=utf-8");
            //獲取結果集合
            ArrayList<User> list=(ArrayList<User>) req.getAttribute("list");
            //響應頁面
            resp.getWriter().write("<html>");
            resp.getWriter().write("<head>");
            resp.getWriter().write("<title>登錄頁面</title>");
            resp.getWriter().write("<meta charset='utf-8'/>");
            resp.getWriter().write("</head>");
            resp.getWriter().write("<body>");
            resp.getWriter().write("<table border='1px'>");
            resp.getWriter().write("<tr>");
            resp.getWriter().write("<td>用戶ID</td>");
            resp.getWriter().write("<td>用戶名</td>");
            resp.getWriter().write("<td>用戶密碼</td>");
            resp.getWriter().write("<td>用戶手機號</td>");
            resp.getWriter().write("<td>用戶權限</td>");
            resp.getWriter().write("</tr>");
            for(int i=0;i<list.size();i++){
                resp.getWriter().write("<tr>");
                resp.getWriter().write("<td>"+list.get(i).getUid()+"</td>");
                resp.getWriter().write("<td>"+list.get(i).getUname()+"</td>");
                resp.getWriter().write("<td>"+list.get(i).getUpwd()+"</td>");
                resp.getWriter().write("<td>"+list.get(i).getUphone()+"</td>");
                resp.getWriter().write("<td>"+list.get(i).getRid()+"</td>");
                resp.getWriter().write("</tr>");
            }
            resp.getWriter().write("</table>");
            resp.getWriter().write("</body>");
            resp.getWriter().write("</html>");
}
}

UserServlet.java:

package com.bjsxt.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.bjsxt.pojo.User;
import com.bjsxt.service.UserService;
import com.bjsxt.serviceImpl.UserServiceImpl;

public class UserServlet extends HttpServlet {
   @Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
     //設置請求編碼格式
       req.setCharacterEncoding("utf-8");
      //設置響應編碼格式
     resp.setCharacterEncoding("utf-8");
     resp.setContentType("text/html;charset=utf-8");
     //獲取用戶數據
     String uname=req.getParameter("uname");
     String upwd=req.getParameter("pwd");
     //查詢數據庫驗證登錄
        //聲明業務層對象
     UserServiceImpl us=new UserServiceImpl();
        User u= us.checkUserInfoService(uname, upwd);
        //處理用戶數據
     if(u!=null){
         //創建cookie對象
         Cookie  c=new Cookie("uid", u.getUid()+"");
         //設置過期時間3天
         c.setMaxAge(3600*24*3);
         //設置cookie到達路徑
         c.setPath("/loginServlet/cookie");
         //增加cookie
         resp.addCookie(c);
         //創建session並存儲用戶數據
         HttpSession hs=req.getSession();
         hs.setAttribute("user", u);
         //重定向到main
         resp.sendRedirect("main");

     }else{
         //攜帶信息
         req.setAttribute("str", "密碼錯誤");
         //請求轉發
         req.getRequestDispatcher("login").forward(req, resp);
     }
}
}

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>2018-3-8-loginServlet</display-name>
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.bjsxt.servlet.LoginServlet</servlet-class>
  </servlet>
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>UserServlet</servlet-name>
    <servlet-class>com.bjsxt.servlet.UserServlet</servlet-class>
  </servlet>
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>MainServlet</servlet-name>
    <servlet-class>com.bjsxt.servlet.MainServlet</servlet-class>
  </servlet>
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>CookieServlet</servlet-name>
    <servlet-class>com.bjsxt.servlet.CookieServlet</servlet-class>
  </servlet>
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>ShowServlet</servlet-name>
    <servlet-class>com.bjsxt.servlet.ShowServlet</servlet-class>
  </servlet>
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>ShowServlet2</servlet-name>
    <servlet-class>com.bjsxt.servlet.ShowServlet2</servlet-class>
  </servlet>






  <servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/login</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>UserServlet</servlet-name>
    <url-pattern>/user</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>MainServlet</servlet-name>
    <url-pattern>/main</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>CookieServlet</servlet-name>
    <url-pattern>/cookie</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ShowServlet</servlet-name>
    <url-pattern>/show</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ShowServlet2</servlet-name>
    <url-pattern>/show2</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

需要的資料:
導入mysql-connector-java-5.1.30.jar
數據庫中的t_user表 字段爲 int uid ,varchar uname,varchar upwd,varchar uphone,int rid.
使用時應該改數據庫的url user password

小結

請求編碼和Cookie學習
session學習
ServletConfig對象和ServletContext對象學習

Servlet第一天:
    創建並執行一個Servlet,並理解是如何執行的。
Servlet第二天:
    使用Servlet處理用戶請求。
Servlet第三天:
    實現3天免登錄和歡迎XXX登錄

小知識點:

1.編碼格式設置。
//設置請求編碼格式
        req.setCharacterEncoding("utf-8");
        //設置響應編碼格式
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");

--------------------
post請求方式:
            在service中使用req.setCharacterEncoding("utf-8")即可
get請求方式:
            1 在service中使用req.setCharacterEncoding("utf-8")
            2 在tomcat的server.xml中配置
                  <Connector port="8080" protocol="HTTP/1.1"
                               connectionTimeout="20000"
                              redirectPort="8443"  useBodyEncodingForURI="true"/>

-------------------------

2.cookies和緩存 cache的區別
3.cookies實現3天免登錄,session實現歡迎XXX。
3.cookie和session的區別
cookie在客戶端瀏覽器
session在服務器端
4.小案例:N天免登錄功能+歡迎---訪問功能+在瀏覽器端獲取所有的用戶信息並顯示。
5.cookie只是免去了用戶登錄的麻煩,並沒有減少表單提交和查詢數據庫。
6.request和response是由tomcat創建。
7.瀏覽器使用技巧:alt查看工具欄。
8. Cookie  c=new Cookie("uid", u.getUid()+"");  這裏要把一個人賬戶的Uid存到cookie中,後面根據這個去查詢數據庫然後實現功能, u,getUid()+""是爲了把int轉成String
9. //創建session並存儲用戶數據
         HttpSession hs=req.getSession();
         hs.setAttribute("user", u);   要放在 response語句之前
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章