>

利用Servlet和JSP完毕三个简易的Web聊天室系统,

- 编辑:www.bifa688.com -

利用Servlet和JSP完毕三个简易的Web聊天室系统,

贯彻步骤:

利用Servlet和JSP实现1个轻易的Web聊天室系统,servlet聊天室

servlet基础
一、servlet:sun公司自身创立了壹种用于扩大web服务器功用的零部件标准。

一、创造用户登入提交分界面

1 标题讲述                                               

行使Java EE相关技巧完成五个简短的Web聊天室系统,具体须要如下。

(一)编写一个记名页面,登六音讯中有用户名和密码,分别用多个开关来交付和重新载入参数登6消息。

(二)编写贰个Servlet程序Main.java通过请求指派来管理用户提交的报到新闻,如若用户名叫本小组成员的名字且密码为对应的学号时,跳转到LoginSuccess显示聊天分界面(类似于QQ群聊天分界面,可选择HTML中的frameset标签生成多个窗口,3个用来促成用户消息输入,另一个显示全体用户聊天记录的);不然跳转到LoginFail页面,提醒用户重新登陆(注:此页面要包蕴前边的记名分界面)。

(三)编写四个Servlet程序,分别用来呈现“音信输入”窗口和“聊天记录彰显”窗口的内容;用户在“音讯输入”窗口中键入聊天内容,点击“发送”开关后,在“聊天记录突显”窗口中展现发送新闻的用户名称和拉扯内容。提醒:利用HTML中的textarea标签来达成。

(四)在报到分界面上贯彻记住用户名和密码的法力,使稳当用户挑选了此作用并成功登入后,在其下一次登入时能够不要再输入用户名和密码就可以登入。提醒:此功效可经过五个Cookie来实现。

以下效率选做:

(5)编写1个Listener程序来监听会话的成立和销毁事件,以此计算当前在线(登入)人数,并将其出示在聊天分界面上。

(陆)增添贰个Filter对本系统全数的Servlet程序举行过滤,该Filter实现对请求和响应对象的编码格式的安装(达成此作用后,Servlet能够直接从呼吁对象中获取参数消息而没有供给兑现对请求实行格式的编码)。在【GlassFish Server】视图中输出程序在Filter和别的能源之间的实行各种。

 

 

1》增添web服务器成效
web服务器(tomcat、Weblogic、iis、apache)未有拍卖动态财富请求的工夫
(即该请求须求总计),只可以管理静态财富的央浼(假使浏览器请求有个别html页面,
web服务器查看请求的html页面是还是不是存在,存在则赶回。)假若要让web服务器
管理动态能源的呼吁,则须要选取cgi程序、组件加容器的不二法门。

二、创设管理用户登陆请求servlet组件Main

2 不留余地方案                                               

贰》组件:能够独立安顿的软件模块,组件必供给适合相应的正规化。
优点是足以加快软件开荒的快慢,进步软件的可维护性。
容器:为组件提供周转条件,并且处理组件的生命周期。
零件并不完全依附特定的器皿,只要顺应相应的正儿八经就足以。

三、创制代表签到成功响应的servlet的机件LoginSuccess

贰.1 预期效益                    

 图片 1

图壹:网络聊天系统运转暗中提示图

 

2、书写servlet
1》写一个java类(servlet、servlet只认识java文件)实现servlet
接口也许接续HttpServlet类。
2》编写翻译(必要使用servlet-api.jar)
三》打包:打包成文件夹或war包
一个正规的文件目录具体组织:
appName ->
web-info->
class(字节码文件 )
lib(可选,jar文件,比如jdbc)
web.xml(铺排描述文件)

四、创制代表签到失利响应的servlet组件LoginFail

2.二 系统结构暗示图                 

 

 图片 2

 

图贰:系统结构暗中提示图

welcome.jsp具体页面:

图片 3

图叁:welcome.jsp实际运维图

4》部署
笔者们将打包好的war包文件放到web服务器上一定的目录上面。
5》启动web服务器,访问servlet

【1代码login.html】

二.3 具体编码                    

(1)Main.java(Servlet类)通过请求指派来处理login.jsp页面用户提交的登入音信(并使用Cookie达成记住用户登陆用户名和密码作用),成功则跳转到welcome.jsp,败北则跳转到login.jsp。具体落到实处如下:

网络聊天系统登入首页login.jsp页面代码:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() "://" request.getServerName() ":" request.getServerPort() path "/";

String username = "";
String password = "";
//String[] checkBox = request.getParameterValues("save_password");
//获取当前站点的所有Cookie
 Cookie[] cookies = request.getCookies();

 for (int i = 0; i < cookies.length; i  ) {
          //对cookies中的数据进行遍历,找到用户名、密码的数据
         if ("username".equals(cookies[i].getName())) {
          //读取时URLDecoder.decode进行解码(PS:Cookie存取时用URLEncoder.encode进行编码)
             username = java.net.URLDecoder.decode(cookies[i].getValue(),"UTF-8");
         } else if ("password".equals(cookies[i].getName())) {
             password =  java.net.URLDecoder.decode(cookies[i].getValue(),"UTF-8");
         }
  }
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>网上聊天室登陆页面</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
    <style type="text/css">
        *
        {
            margin: 0;
            padding: 0;
        }
        body
        {

            font-size: 0px;
            padding: 200px;


        }

    </style>
  </head>
 <body>
 <form action="Main" method="post">
 <div>记住密码
<input type="submit" value="登陆" name="login">Main.java类代码:

package com.liuzhen.chart;

import java.io.IOException;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@SuppressWarnings("serial")
public class Main extends HttpServlet {

    /**
     * Constructor of the object.
     */
    public Main() {
        super();
    }

    /**
     * Destruction of the servlet. <br>
     */
    public void destroy() {
        super.destroy(); // Just puts "destroy" string in log
        // Put your code here
    }


    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

         doPost(request,response);
    }


    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        //response.setContentType("text/html;charset=utf-8"); 
        //此出注解是因为使用CodeFilter类过滤所有Servlet,转换编码
        //request.setCharacterEncoding("utf-8");
        String userName = request.getParameter("username");
        String passWord = request.getParameter("password");
        String checkBox = request.getParameter("save_password");

        System.out.println("userName:" userName "n" "passWord:" passWord);
        request.getSession().setAttribute("nameSession", userName);   //将用户名存入session中
        String[] name_one = {"柳真","刘仁杰","吴超","张浩东","陈初相"};
        String[] pwd_one = {"201421092073","201421092068","201421092077","201421092082","201421092119"};
        String name_two = "";
        String pwd_two = "";
        boolean login_test = false;
        for(int i=0;i<5;i  ){
            name_two = name_one[i];
            pwd_two = pwd_one[i];
            if(userName.equals(name_two) && passWord.equals(pwd_two))
                login_test = true;                           
        }

        if(login_test) {
            if ("save".equals(checkBox)) {
                //Cookie存取时用URLEncoder.encode进行编码(PS:读取时URLDecoder.decode进行解码)
                String name = URLEncoder.encode(userName,"UTF-8");
                //创建两个Cookie对象
                Cookie nameCookie = new Cookie("username", name);
                //设置Cookie的有效期为3天
                nameCookie.setMaxAge(60 * 60 * 24 * 3);
                String pwd = URLEncoder.encode(passWord,"UTF-8");
                Cookie pwdCookie = new Cookie("password", pwd);
                pwdCookie.setMaxAge(60 * 60 * 24 * 3);
                response.addCookie(nameCookie);
                response.addCookie(pwdCookie);
             }
             request.getRequestDispatcher("welcome.jsp").forward(request, response);           
        }   
        else{
             response.sendRedirect("loginFail.jsp");      
              // request.getRequestDispatcher("loginFail.jsp").forward(request, response);             
        }


    }

    /**
     * Initialization of the servlet. <br>
     *
     * @throws ServletException if an error occurs
     */
    public void init() throws ServletException {
        // Put your code here
    }

}

登录战败页面loginFail.jsp页面代码:

图片 4

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() "://" request.getServerName() ":" request.getServerPort() path "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'loginFail.jsp' starting page</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="content-type" content="text/html; charset=gb2312">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>

  <body>
    <br>
      <br>
           <h1>用户名和密码不匹配,请重新登陆!</h1>
           <a href="login.jsp">重新登陆</a>
  </body>
</html>

View Code

登入成功页面welcome.jsp页面代码(此处使用frameset标签,分为底部、左部和高级中学级主页3片段,分别对象header.jsp、left.jsp和main.jsp页面):

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() "://" request.getServerName() ":" request.getServerPort() path "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>网上聊天室</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="content-type" content="text/html; charset=gb2312">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>
   <frameset rows="100,*" cols="*" frameborder="no" border="0" framespacing="0">
         <frame src="header.jsp" name="topFrame" scrolling="auto" noresize="noresize" id="topFrame"/>
      <frameset cols="213,*" frameborder="no" border="0" framespacing="0">
        <frame src="left.jsp" name="leftFrame" scrolling="No" noresize="noresize" id="leftFrame"/>
        <frame src="main.jsp" name="mainFrame" scrolling="auto" id="mainFrame"/>
      </frameset>
   </frameset> 
  <body>

  </body>
</html>

闲话底部header.jsp页面代码:

图片 5

<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312" pageEncoding="gb2312"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() "://" request.getServerName() ":" request.getServerPort() path "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title></title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <meta http-equiv="Content-Type" content="text/html;charset=gb2312">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>

  <body topmargin="0" leftmargin="0" rightmargin="0">
     <form action="">
             <table  width="100%" height="79" border="0" cellpadding="0"
                     cellspacing="0" align=center>
             <tr>
                <td bgcolor="F9A859" valign="top">
                <table width="100%" height="50" border="0" align="center"
                       cellpadding="0" cellspacing="0" bgcolor="FBEAD0">
                 <tr>
                   <td align="center">
                     网上聊天室
                   </td>
                 </tr> 

                </table>

                </td>
             </tr>
               <tr>
                 <td bgcolor="F9A859" valign="top">
                 <table width="100%" border="0" align="center" cellpadding="0"
                         cellspacing="0">
                  <tr>
                     <td align="center">
                     欢迎<%=(String)request.getSession().getAttribute("nameSession") %>访问!
                     当前在线人数为<%=application.getAttribute("peopleOnline")%>人
                     </td>
                  </tr>       

                 </table>

                 </td>
              </tr>              

             </table>
           </form>
  </body>
</html>

View Code

闲聊左部left.jsp页面代码(此处为了突显赏心悦目,使用了jquery-一.四.二包):

图片 6

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() "://" request.getServerName() ":" request.getServerPort() path "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'test.jsp' starting page</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="content-type" content="text/html; charset=gb2312">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
 <style type="text/css">
        *
        {
            margin: 0;
            padding: 0;
        }
        body
        {
            font-size: 15px;
            padding: 00px;
        }
        .menu
        {
            width: 500px;
            border-bottom: solid 1px gray;
        }
        .menu h3
        {
            border: solid 1px gray;
            height: 30px;
            line-height: 30px;
            padding-left: 10px;
            padding:0 5px;
            border-bottom: none;
            cursor: pointer;

        }
        .menu p
        {
            border-left: solid 1px gray;
            border-right: solid 1px gray;
            padding: 20px 0;
            padding-left: 5px;
        }
        .changecolor{background-color:red;}
    </style>
    <script src="js/jquery-1.4.2.min.js" type="text/javascript"></script>
    <script type="text/javascript">
          $(function () {
            $(".menu p:not(:first)").hide();
            $(".menu h3").css("background", "#ccc");       
            $(".menu h3").hover(function () { $(this).css("background-color", "gray").siblings("h3").css
("background-color", "#ccc");});
            $(".menu h3").mouseleave(function () { 
               $(".menu h3").css("background", "#ccc");}); //离开时将其变为原来颜色
            var index = $(".menu h3").index(this);
            $(".menu h3").click(function () { $(this).next("p").slideToggle().siblings("p").slideUp(); });
        });
    </script>
  </head>

  <body>
    <div class="menu">
        <h3>
            我的好友</h3>
        <p>
   <a href="index.jsp">周杰伦</a><br/><br/>
   <a href="index.jsp">周杰伦</a><br/><br/>
   <a href="index.jsp">周杰伦</a><br/><br/>
   <a href="index.jsp">周杰伦</a><br/><br/>
   <a href="index.jsp">周杰伦</a><br/><br/>
   <a href="index.jsp">周杰伦</a><br/><br/>
   <a href="index.jsp">周杰伦</a><br/><br/>
   <a href="index.jsp">周杰伦</a><br/>
            </p>
        <h3>
            我的朋友</h3>
        <p>
   <a href="index.jsp">李连杰</a><br/><br/>
   <a href="index.jsp">李连杰</a><br/><br/>
   <a href="index.jsp">李连杰</a><br/><br/>
   <a href="index.jsp">李连杰</a><br/><br/>
   <a href="index.jsp">李连杰</a><br/><br/>
   <a href="index.jsp">李连杰</a><br/><br/>
   <a href="index.jsp">李连杰</a><br/><br/>
   <a href="index.jsp">李连杰</a><br/>
         </p>
        <h3>
            陌生人</h3>
        <p>
   <a href="index.jsp">比尔盖茨</a><br/><br/>
   <a href="index.jsp">比尔盖茨</a><br/><br/>
   <a href="index.jsp">比尔盖茨</a><br/><br/>
   <a href="index.jsp">比尔盖茨</a><br/><br/>
   <a href="index.jsp">比尔盖茨</a><br/><br/>
   <a href="index.jsp">比尔盖茨</a><br/><br/>
   <a href="index.jsp">比尔盖茨</a><br/>
          </p>
    </div>
  </body>
</html>

View Code

闲聊主页main.jsp页面代码:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() "://" request.getServerName() ":" request.getServerPort() path "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'main.jsp' starting page</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>

  <body>
  <form action="InputInformation" method=post>
  <textarea  cols="105" rows="25" name="show_textarea"><%=request.getAttribute("input_textarea")%></textarea>
  <br>
  <textarea  cols="105" rows="5"  name="input_textarea"></textarea><br>
  <input type="submit" value="发送" name="button_one" 
   style="width: 100px; height: 40px;font-size: 25px;"><br>
  </form>
  </body>
</html>

 

(二)InputInformation.java(Servlet类)通过请求指派获取main.jsp聊天输入框中输入音讯,跳转到main.jsp页面,并在聊天记录显示框中展现聊天消息。具体贯彻如下:

 InputInformation.java类代码如下:

package com.liuzhen.chart;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

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

@SuppressWarnings("serial")
public class InputInformation extends HttpServlet {
    public String chat_record = "";  //定义聊天记录变量,此处为全局变量

    /**
     * Constructor of the object.
     */
    public InputInformation() {
        super();
    }

    /**
     * Destruction of the servlet. <br>
     */
    public void destroy() {
        super.destroy(); // Just puts "destroy" string in log
        // Put your code here
    }


    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        doPost(request,response);
    }


    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        //response.setContentType("text/html;charset=utf-8"); 
        //此出注解是因为使用CodeFilter类过滤所有Servlet,转换编码
        //request.setCharacterEncoding("utf-8");
        String input_textarea = request.getParameter("input_textarea");
        Date now = new Date();    //创建日期对象,及系统当前时间
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
        String time = dateFormat.format( now ); //按照给定的日期格式获取系统当前时间
        String t = (String)request.getSession().getAttribute("nameSession");  //获取登陆页面用户名
        chat_record  = t "  " input_textarea "  " time "n";   //聊天记录存储
        request.setAttribute("input_textarea",chat_record); //将当前聊天输入内容存储
        request.getRequestDispatcher("main.jsp").forward(request,response);  //跳转到当前聊天输入界面,即界面布局不变
    }

    /**
     * Initialization of the servlet. <br>
     *
     * @throws ServletException if an error occurs
     */
    public void init() throws ServletException {
        // Put your code here
    }

}

 

(叁)CodeFilter.java(过滤器类)截取系统全部Servlet类,达成对请求和响应对象的编码格式的安装,均设置为UTF-八。具体贯彻如下:

 CodeFilter.java类代码如下:

package com.liuzhen.chart;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//采用注解方式配置URL,此处就不必再在web.xml文件中配置。如果两者均配置的话,系统将以web.xml文件中配置信息为准
@WebFilter(filterName="CodeFilter",urlPatterns={"/*"})      

public class CodeFilter implements Filter{


         @Override
         public void destroy() {
             System.out.println("destroy---CodeFilter");                          
         }

         @Override
         public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
                 throws IOException, ServletException {
             System.out.println("start----doFilter--CodeFilter");

             HttpServletRequest request =(HttpServletRequest) arg0;
             HttpServletResponse response =(HttpServletResponse) arg1;
             //以上是强制内型转换,使用request对象和response对象

             request.setCharacterEncoding("utf-8");          //设置过滤页面提取数据的编码
             response.setContentType("text/html;charset=utf-8");  //设置过滤页面显示数据的编码

             arg2.doFilter(arg0, arg1);//在页面跳转之前执行此语句前面的代码,执行完页面的代码之后,在执行后面的语句
             System.out.println("第一个字符过滤器");
             System.out.println("end------doFilter--CodeFilter");    
             }

         @Override
         public void init(FilterConfig filterConfig) throws ServletException {
             System.out.println("init----CodeFilter");
         }

}

 

(四)OnlineListener.java(监听器类)主动监听系统Web容器,再次回到当前闲谈系统在线人数,具体贯彻如下:

 OnlineListener.java类代码如下:

package com.liuzhen.chart;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class OnlineListener implements HttpSessionListener{

    public void sessionCreated(HttpSessionEvent arg0) {
           ServletContext context = arg0.getSession().getServletContext();

           Integer count = (Integer) context.getAttribute("peopleOnline");
           if (count == null) {
               count = 1;
           } else {
               count  ;
           }
           context.setAttribute("peopleOnline", count);
        }

        public void sessionDestroyed(HttpSessionEvent arg0) {
           ServletContext context = arg0.getSession().getServletContext();
           Integer count = (Integer) context.getAttribute("peopleOnline");

           count--;
           context.setAttribute("peopleOnline", count);
        }

}

此间还要给OnlineListener监听器类在web.xml文件中布置路线,web.xml配置代码具体如下(革命标记代码):

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name></display-name>

  <listener>
    <listener-class>com.liuzhen.chart.OnlineListener</listener-class>
  </listener>

  <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>Main</servlet-name>
    <servlet-class>com.liuzhen.chart.Main</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>InputInformation</servlet-name>
    <servlet-class>com.liuzhen.chart.InputInformation</servlet-class>
  </servlet>



  <servlet-mapping>
    <servlet-name>Main</servlet-name>
    <url-pattern>/Main</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>InputInformation</servlet-name>
    <url-pattern>/InputInformation</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>login.jsp</welcome-file>
  </welcome-file-list>
</web-app>

在调用监听器类达成监听系统当前在线人数时,本机上同多少个浏览器同时登录多少个用户,只可以算作贰遍,本机上不一样浏览器登录则分级算作二遍。以下分别是在IE、Google和360浏览器登入在线人数字呈现示:

图4:IE浏览器登录,展现在线人数1位

 图片 7

图伍:谷歌(Google)浏览器登入,突显在线人数三人

 图片 8

图陆:360浏览器登录,展现在线人数4个人

 附:本文系统代码Coding链接:

 参考资料:

一、cookie达成记住密码

二、监听器(完成在线总括人数,踢人)

三、Java Filter过滤机制详解

4、jsp与servlet之间页面跳转及参数传递实例

 

一 难题讲述 利用 Java EE 相关本事实现三个轻巧的 Web 聊天室系统,具体必要如下...

本地其余主机访问
自个儿走访

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登录</title>
</head>
<body bgcolor="#FFFFFF">
    <center>欢迎登录系统</center>
    <form name="login" action="Main" method="post">
        <label>用户名:</label>
        <input type="text" name="userID" value="">
        <label>密码:</label>
        <input type="password" name="password" value="">
        <input type="submit"  name="tj" value="提交"></input>
        <input type="reset" name="reset"></input>

    </form>
</body>
</html>

3、tomcat简介
Tomcat 服务器是三个无偿的绽开源代码的Web 应用服务器,属于轻量级应用服务器,
在中型小型型系统和产出国访问问用户不是成都百货上千的场子下被大规模运用,是付出和调节和测试JSP 程序
的首荐。对于1个初大方的话,能够那样以为,当在1台机械上配备好Apache 服务器,
可应用它响应HTML(标准通用标志语言下的二个用到)页面包车型地铁拜会请求。实际上汤姆cat
部分是Apache 服务器的庞大,但它是独自运营的,所以当您运转tomcat 时,它实在
用作多少个与Apache 独立的进度单独运转的。
门槛是,当配置不错开上下班时间,Apache 为HTML页面服务,而汤姆cat 实际上运行JSP 页面和
Servlet。汤姆cat和IIS等Web服务器同样,具备管理HTML页面的效率,此外它依然多少个
Servlet和JSP容器,独立的Servlet容器是汤姆cat的私下认可情势。汤姆cat管理静态HTML的
技艺不及Apache服务器。

【2程序Main.java】

4、servlet运转进程
在浏览器的地址栏输入:
1> 通过浏览器和ip:port和那几个服务器创设连接。
二> 浏览器会转移多少个呼吁数据包(路线appNames/servlet)向服务器发送请求。
三> 服务器收到请求数据包,深入分析请求能源路线做精准定位,通过请求的appName查找
webapps文件上边包车型大巴appName做同盟,相配上了索要得到web.xml中的servlet(mapping)。

package example.servlet;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Main
 */
@WebServlet("/Main")
public class Main extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String uerID=request.getParameter("userID");
            if (uerID==null) uerID="";
            String password=request.getParameter("password");
            if(password==null) password="";
            if(uerID.equals("guest")&&password.equals("guest")){
                RequestDispatcher dispatcher=request.getRequestDispatcher("LoginSuccess");
                dispatcher.forward(request, response);
            }else {
                RequestDispatcher dispatcher=request.getRequestDispatcher("LoginFail");
                dispatcher.forward(request, response);
            }
    }


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        processRequest(request,response);
    }


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        processRequest(request,response);
    }

    public String getServletinfo(){
        return "short description";
    }

}

4> 服务器成立多个对象:
先是个指标:请求对象,该指标实现了HttpServletRequest接口,服务器会将请求数
据包中的数据解析出来,存储在该目的里。这样做的益处是从没有过供给理解
http协议,只要求读取request。

【3程序LoginSuccess.java】

其次个指标:响应对象,达成了HttpServletResponse接口,效能是servlet管理达成后
的结果可以存放到该对象上,然后服务器依靠该对象的多少变动响应数据包。

package example.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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("/LoginSuccess")
public class LoginSuccess extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html; charset=UTF-8");
        PrintWriter out=response.getWriter();
        String name=request.getParameter("userID");

        out.println("<html>");
        out.println("<head>");
        out.println("<title>登录成功</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>欢迎" name "您已成功登录系统</h1>");
        out.println("</body>");
        out.println("</html>");



    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        processRequest(request,response);
    }


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        processRequest(request,response);
    }

    public String getServletInfo(){
        return "short description";
    }

}

5> servlet在试行servlet()方法时,能够透过request获取请求数据,也能够将管理结果
存放到response上。然后服务器与响应对象直接产生2个默契,生成一个响应数据包
给浏览器。

【4程序LoginFail.java】

陆> 浏览器解析服务器重临的响应数据包,生成响应的结果。

package example.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class LoginFail
 */
@WebServlet("/LoginFail")
public class LoginFail extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html; charset=UTF-8");
        PrintWriter out=response.getWriter();

        out.print("<html>");
        out.print("<head>");
        out.print("<title>登录失败</title>");
        out.print("</head>");
        out.print("<body>");
        out.print("<h1>登录失败,请重新登录</h1>");
        RequestDispatcher dispatcher=request.getRequestDispatcher("login.html");
        dispatcher.include(request, response);
        out.print("</body>");
        out.print("<html>");

    }


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        processRequest(request,response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        processRequest(request,response);
    }

    public String getServletInfo(){
        return "short description";
    }

}

1、http协议
1》http协议:定义了浏览器与服务器之间通信的经过以及数额格式。
二》通信进程
壹、浏览器请求web服务器创立二个接二连三。
二、浏览器向web服务器发送请求(会基于协议将呼吁数据打包)
三、服务器管理请求,并且将管理结果发送给浏览器(依赖协议将管理结果打包)
四、服务器发送结果得了后随即关闭连接。

 

三》数据格式

恳请数据包->
先是有个别:
恳请行:请求方式(get/post)请求能源路线协议版本新闻。
其次有些:
多少的新闻头,是w三c定义的有的简练报纸发表规则,举例服务器可
以向浏览器发送二个“content-type”新闻头告诉浏览器重临的数据类型以及编码。
其三片段:
实体内容:唯有当呼吁情势是post时,请求参数及参数值才会
存放在那。假如请求情势为get时呼吁参数和参数值就能够增多到请求财富的路子后边。

响应数据包->
先是部分:
动静行:协议版本、状态码、描述
广阔的状态码:404 找不到,500 系统出错,200 不奇怪
其次局部:
若个音讯头
其3有个别:
实行业内部容:存放管理结果

2、get请求和post请求
1>get请求:
1、在浏览器地址栏直接输入多个地点
二、点击链接地址
三、表单暗中认可的交由
二>post请求:给表单的method属性设置为“post”
3>get情势和post格局的界别
一、get情势会将参数和参数值放到请求能源路径的背后,而post格局会
将那几个多少放到实体内容里。
二、get格局交给的数据会展现在浏览器地址栏,那样不安全。post格局
周旋安全,参数和参数值不会呈现在地址栏,呈现在实体内容里。
三、get格局交给的数据量是个其余(壹K),而post格局理论上是从未有过限定的。

三、表单的管理
1>设置表单的交付格局为post
2>获取参数值
String request.getParameter(String paraName);
eg:

String username=request.getParameter("username");
如若参数名一样:
String[] request.getParameterValues(String para);
三>管理汉语难点
壹.在html代码里丰盛:
<meta http-equiv="content_type" content="text/html;charset=utf-8">
二.在服务器端设置编码时接纳统1的编码格式,浏览器请求的时候编码格式
要与服务器一致。request.setCharacterEncoding("utf-八");

四、访问数据库
1》将数据库jdbc的驱动(.jar文件)放置到lib文件夹下
二》在servlet类中选取jdbc代码访问数据库须要专注:
一、注意关闭数据库连接
二、写2个错误管理页面
3、能够直接在web.xml文件中布局错误管理页面
<error-page>
<error-code>500</error-code>
<location>/err500.html</location>
</error-page>

1、重定向
1》定义:服务器向浏览器发送2个状态码302及叁个音信头location,
浏览器在吸收接纳到以往立时向location所指的地方发送请求。
2》代码:response.sendRedirect(String url);
3》重定向的特点
a>重定向之后浏览器地址栏的地点会发出变动,产生location所指向的地方。
b>重定义的地点是私下的。
四》注意:在重定义此前毫无有其余输出。
主要指:
out.println();
out.flush();
out.close();
只要response中缓存有数据,该数据会被清空,然后做重定向。

二、在数据库中保存粤语
壹》设置数据库的编码(接济中文的)
二》给jdbc驱动增加一些参数,让jdbc驱动程序知道数据库的编码从而不利的解码。
eg:
jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8

三、servlet容器怎么样管理请求能源路线
eg:
地址栏输入:
用作请求财富路线放到请求数据包里,发送给servlet容器。

servlet容器依据如下步骤管理请求能源路线:
一》比较web.xml中的<url-pattern>的配备与/index.jsp是不是相称。
a.精确相配
b.模糊相配(通配符“*”来匹配)
*表示自便字符串 url-pattern:/index/*
地址:/index/test/ ok
/index/test/test/ ok
/index/test/test ok
/index/ ok
/index ok
c.后缀相配(无法以"/"开头)
eg: *.do *.action '.'后是二个大4字符串
代表以那几个字符串结尾的位置都特别

二》假若找不到则认为那是二个jsp,然后再跳转到jsp页面查找,
找到就回去,找不到则提醒40四张冠李戴。

4、怎么着让2个servlet能够管理三个请求
一》在web.xml文件中,使用后缀相配。
2》在service()方法里剖判请求财富路线。

5、servlet主题与接口以及生命周期
一》servlet生命周期的意义:
指的是servlet容器如何从创设servlet实例、伊始化(分配能源)。
调用service()方法、到结尾销毁servlet实例的经过。

贰》servlet生命周期的多少个阶段
首先品级:实例化
第2种情景:当呼吁达到容器时,容器会先反省该请求,
反省对应的servlet实例是或不是留存,固然存在不会另行创建,
倘诺不存在则重复创造(单例方式)。

第三种情景:当容器运维也许安顿有个别新的利用时,容器会
自作者评论web.xml文件中的servlet有未有陈设<load-on-startup>
若果布置了就能够立即成立实例。参数值越小优先级越高,创建
的火候越靠前。

第三品级:初步化
给servlet实例分配财富,容器会调用servlet的起先化方法
init(ServletConfig config),创立三个合乎ServletConfig
接口的对象给servlet实例。config对象就能够去拜访servlet
的初阶化参数。init()只实行1次。

其3阶段:就绪
容器收到请求,调用servlet实例的service()方法

第5品级:销毁
容器依赖本人的算法将不再必要的servlet实例举行销毁,在销毁
事先会调用servlet实例的destory()方法。destory()方法也只
推行1回。

一、dao:封装了数据访问逻辑。
1》dao接口
2》daoImp实现类
三》实体对象entity
四》工厂类Factory(创建完结类对象)
servlet通过dao获取结果的进度:
透过dao接口的回调获取对象(该指标是因此工厂相应的措施赢得落到实处dao接口类的靶子)
再调用该对象相应的方式赢获得想要的结果。

一、servlet宗旨接口和类
1》servlet接口
init(ServletConfig config) //初始化servlet
destory() //销毁servlet
//http响应的主意是doGet/doPost
service(ServletRequest,ServletResponse)
doGet()
doPost()

2》GenericServlet抽象类
金玉锦绣了servlet接口中的init(ServletConfig)和destroy()方法
子类能够选用override init()或然init(ServletConfig config)
优先挑选override(覆盖的)

3》HttpServlet抽象类:
继承了GenericServlet实现了service()方法。
该service实行的流程:依赖请求类型分别调用doGet和doPost方法,
doGet和doPost在暗许情况下都是抛出万分的。所以写1个servlet
能够采纳的格局有二种:
第一种:override doGet/soPost方法
第二种:override service方法

4》servletConfig接口
获取servlet起初化参数 String getInitParameter(String paraName)

5》ServletRequest/ServletResponse
那三个接口是HttpServletRequest/HttpServletResponse的父接口

6》HttpServletRequest/HttpServletResponse接口

里面唯有void service(ServletRequest req,ServletResponse response)
格局是由tomcat自动调用,它将吸收的客户端请求转交给HttpServlet中的另三个
protected void service(HttpServletRequest req,HttpServletResponse res)
措施,此尊敬项指标service方法再把将请求分发给doPost()、doGet()方法
进展下一步处理。
于是我们全然能够重写受保险的service()方法来替代doPost()和doGet()方法

2、jsp
一》定义:sun公司制订的一种服务器端动态页面生成的能力职业。因为直接行使
servlet生成动态页面过于繁琐( out.println("html代码") ),并且难以
护卫(页面修改,java代码修改),因而发生了jsp。

二》jsp组成:首要有两块。
1.html内容(包括html、css、js等)
2.少量的java代码

三》书写jsp:直接编写2个以.jsp为后缀的文本,不供给编写翻译。
一.万一是html内容,直接编写。
注释:<!--html浏览器任然施行代码--> <%--浏览器不实施代码--%>

2.要是是java代码,有三种方法书写:
第3种:java代码片段<% java代码 %>
第二种:jsp表达式<% =java表达式 %>

三.指令:所谓指令会在jsp引擎将jsp文件转变到java文件时做一些附加的拍卖。
eg、导包指令的语法:
<%指令 属性=属性值%>
page指令:
import属性:用于导包
eg:
<%@page import="java.util.*" %>

pageEncoding属性:告诉jsp引擎,jsp文件的编码格式。
eg:
<%@page pageEncoding="utf-8" %>

contentType属性;生成response.setContentType(...);
eg:
<%@page contentType="text/html;charset=utf-8" %>

四.带有对象
在jsp文件中,不用证明就足以行使的指标
(因为jsp引擎会自动生成注明和开创那一个指标的代码)
一.pageContext JSP的页面容器
二.request 获取用户的央浼新闻
叁.response 服务器向客户端的响应音信
4.session 用来保存每二个用户的音讯
5.application 表示全体用户的共享新闻
6.config 服务器配置能够获取开始化参数
柒.out 页面输出
8.page 从页面中意味着出来的3个Servlet实例
九.exception JSP页面所爆发的非常,在错误页中才起效果。

4》jsp的执行
当浏览器向服务器请求访问jsp文件时,服务器会先将jsp文件转变来java文件
(该调换的java文件实际上是多个servlet),接下去必要编译该servlet(自动编写翻译),然后实例化
(web.xml)、初始化(init方法)、调用service方法(doGet或者doPost)。
可以观望:将jsp文件调换到java文件的模块叫做jsp引擎。

5》jsp文件怎么样转移成servlet
壹.html-->service()方法里,使用out.write()输出(流的章程)。
2.java代码片段-->service方法里,直接照搬。
三.jsp表明式-->service方法里使用out.print()输出。

1、转发
①》定义:在同等应用内部,八个web组件将未到位的拍卖转载给别的一个web组件
一而再管理,那样的历程叫做转发。
转车最常用的运用场景:servlet获取处理多少现在转载给jsp,由jsp生成响应页面。

2》代码
率先绑定数据:
//在request对象上以name为绑定名,绑定1个object
request.setAttribute(String name,Object object);

//依据绑定名获得绑定值,假使name对应的值不设有,重回null。
Object request.getAttribute(String name);

//解除绑定
request.removeAttribute(String name);

接下去转发:
//获取转载器,url指的是转账的指标地,一般是jsp。
RequestDispatcher rd=
request.getRequestDispatcher(String url);

//转发
rd.forward(request,response);

三》转载须求注意的标题
在倒车以前不能有任何的出口,转载以前会先将response中缓存的数码先清空。

肆》转发的风味
一.倒车的目标地只可以是同八个选拔内部的次第零部件之间
贰.转化的相继零部件之间能够共享request、response

2、include指令
<% @include file="header.jsp/foot.jsp" %>作用是报告引擎在jsp文件调换为
java文件时,在当前下令所在的职责插入header.jsp/foot.jsp文件的源委。

三、路线难题
在选取链接、表单提交、重定向,转载时怎么准确的使用绝对路线和相对路线。
1》相对路线:不以"/"初始的渠道,相对当前项目。
eg:<a href="del.do"></a>
2》相对路径:以"/"开头的门路
eg:<a href="/appName/del.do" ></a>
三》书写相对路线
链接、表单提交、重定向的相对路线是从应用名初步的,而转用的相对路线是从
应用名之后伊始。
写相对路线的时候要尽量防止直接写应用名,而是通过request.getContentPath();

一、转载和重定向的界别
1》相同点:
实为上转账和重定向皆感到着完成三个零部件去调用另三个零件,也正是组件之间的跳转。
也能够那样以为:转载是透过容器作为媒介达成调用另3个组件,
重定向是透过浏览器作为媒介来落实那样的操作。

2》不同点:
一.浏览器地址栏的地方改动:
重定向:变化
转发:不变

二.指标地地址
重定向:任意
转折:同3个施用的当中

3.能无法共享request对象
重定向:不可能(因为重定向有几回呼吁,第叁次呼吁产生的 request对象已经被灭绝了)
转发:可以

四.事变是不是曾经做完
重定向:做完了
转发:未做完

2、状态管理
一》状态管理概念:因为浏览器与web服务器之间是透过http协议来发送请求和响应的,
而http协议是1个无状态协议(浏览器向服务器发送请求时,不会向服务器标示是哪些
浏览器在访问它,服务器发送完响应之后即刻关闭)。
在少数特定情景下供给将浏览器与服务器的屡屡相互操作看做是一个完整,
在保管那些欧洲经济共同体的历程就是地方处理。
频繁并行操作所关联的数据叫做状态,而对这个多少开展管理就叫状态管理。

二》怎样进展景况管理
1.cookie 在客户端记录用户意况
2.session 在劳务器端记录用户情状

3》cookie
1.定义:
当浏览器访问服务器时服务器会将一些数据以set-cookie消息头
的办法发送给浏览器,浏览器会将这个数据存款和储蓄到本地也许以
文本的款式保留在磁盘上,也能够保存在内存。当浏览器再度访
问服务器的时候会将这么些数量以cookie音信头的方法再一次发送给
服务器,通过这种方法就能够对情况举办管理。

2.创建cookie
Cookie cookie =
new Cookie(String name,String value);
response.addCookie(cookie);

3.查询cookie
Cookie[] cookies= request.getCookies();
String cookieName= cookies[0].getName();
String cookieValue= cookies[1].getValue();

肆.cookie保存汉语难点
cookie的值只好够是ASSII字符,须求将汉语转化为
assii字符的表现格局。

5.cookie的生活时间
cookie.setMaxAge(int seconds);
seconds>0:浏览器会将该数量保存在磁盘上,当赶上
seconds钦定的值时,浏览器会删除该数据。

seconds<0:浏览器会将该数额保存在地头内部存款和储蓄器中,浏览器
闭馆,会删除此类型的值为默许缺省值。

seconds=0:马上删除cookie
Cookie cookie=
new Cookie("username","baobao");
cookie.setAge(0);
response.addCookie(cookie);

6.cookie的路径
cookie可以设置其访问路线,要是不安装会私下认可三个
走访路线(暗中同意的造访路线是保留该cookie的路线)
浏览器在拜访服务器的有些地方值时,须求相比该地点
与cookie的不二等秘书籍是不是同盟,唯有相配的cookie才会被发送。
合营规则:
要拜访的地址必须是cookie的门道恐怕是其子路线。
cookie.setPath("/appName");
该cookie在走访/appName下的持有组件时都会时有发生。

cookie.setPath("/");
该cookie在拜访同一个服务器上的兼具配置应用时都会发送。

7.cookie的限制
1.cookie得以被取缔
二.cookie的大大小小有限制(4k)
三.cookie的数量也有限制(指七个浏览器在本土最多存款和储蓄大约300个左右)
4.cookie只可以够保留字符串,并且供给对普通话进行编码
伍.cookie将数据保存在客户端,不安全。

4》session
壹.浏览器访问服务器时服务器会创建三个指标(该指标HttpSession接口
诚如称为session对象,每一个session对象都有1个唯一的标志sessionId)
服务器在暗许情状下会利用cookie机制将sessionId发送给浏览器。
浏览器再度做客服务器时会将sessionId发送给服务器,服务器依赖
sessionId找到在此以前的session对象。
2.获取session对象
方式一:
HttpSession session =
request.getSession(boolean flag);
当flag= true:
服务器检查浏览器发送的伸手在那之中有没有sessionId
尚未就创设session对象,假诺有服务器会凭借sessionId
去找出session对象。查找到了就不成立session对象,
借使找不到就创建session对象。
当flag=false:
服务器检查浏览器发送过来的请求当中有未有SessionId
假如未有不成立session对象并且重回null。
假使有服务器会依照当前的sessionId去搜索session对象
是否留存,倘诺不设有不创造session对象并且重返null。

方式二:
HttpSession session=request.getSession();
request.getSession()是request.getSession(true)的简写

三.常用的秘籍。
//获取sessionId
String session.getId();
//
session.setAttribute(String name,Object obj);

session.removeAttribute(String name);

//假设name对应的靶子不存在重返null
session.getAttribute(String name);

4.session的失效
//能够设置最大不活动时间间隔,当先那几个时间距离服务器
删除该session。
session.setMaxInactiveInterval(int seconds);
服务器有二个缺省的失灵时间(tomcat是二十八分钟)超过这几个时间
距离也会删除session。
eg: tomcat
tomcat的web.xml
<session-config>
<session-timeout>30</session-timeout>
</session-config>

WEB-INFO/web.xml
<session-config>
<session-timeout>30</session-timeout>
</session-config>

5.及时删除session
session.invalidate();

5》session案例
1.session验证
在用户登6成功今后在session对象里绑定一些数据(userId,放入一丢丢数量)
session.setAttribute("userId","1");
当用户访问要求报到手艺来看的能源时进行一下session校验
执行:
Object obj= session.getAttribute("userId");
对现阶段的用户推断是还是不是登入,obj为null未有登录,
重定向到1个签到页面
obj不为null用户已经报到,放行。

 

过滤器
壹》定义:servlet标准在那之中定义的1种非常的类,其做用是掣肘servlet容器的调用进度。

二》书写过滤器
1.写一个java类,实现Filter接口。
二.在doFilter方法里,完成拦阻的逻辑。
3.配备(在web.xml中配置如何请求地址做过滤条件)

三》过滤器的预先级
<filter-mapping>配置的顺序决定了过滤实施的先后。

4》过滤器的优点
一.将部分零部件一样恐怕左近的代码(权限处理、编码管理、安全、session验证
等)聚焦写到多少个过滤器中有益代码维护。
2.落实代码的“可插拔性”

 

本文由必发88官网发布,转载请注明来源:利用Servlet和JSP完毕三个简易的Web聊天室系统,