域对象

域对象

可以在不同Servlet之间传递数据的对象,就是域对象

只要是域对象都有如下方法
    setAttribute(name,value);存储数据的方法
    getAttribute(name);根据name获取对应数据值
    removeAttribute(name);删除数据

request域对象


request里面的数据只有当前的一个请求域内,也就是请求转发前后的servlet可以共享。

Request,一次请求来到服务器,服务器创建,服务器这次请求响应结束后销毁requestrequest对象是一次请求内有效。

注意: request域对象数据只能在页面跳转-请求转发才能共享获取,
如果想要页面不跳转就能获取共享数据,就只能使用ServletContext域对象.
//定义数据
List<String> list = new ArrayList<String>();

list.add("张三");
list.add("李四");
list.add("王五");

//使用域对象request存储数据
request.setAttribute("emplist", list);

response.getOutputStream().write("进入了ForwardOneServlet".getBytes());

//请求转发到ForwardTwoServlet
request.getRequestDispatcher("ForwardTwoServlet").forward(request, response);//可以访问

//请求转发是服务器执行的路径跳转,路径写法有2种
//1.资源路径,相对路径,就代表访问当前工程目录下的
//2./资源路径,第一个“/”,代表当前工程目录下,因为路径是由服务器执行的,所以第一个“/”就是当前工程目录下

//注意:只有请求转发是由服务器执行的
//request.getRequestDispatcher("https://www.baidu.com").forward(request,response);//不能访问的
//请求转发浏览器栏不变
*  路径写法
*    全路径,绝对路径  url=/工程名字/资源路径
*    相对路径        url=资源路径

*    浏览器执行的路径第一个“/”代表webapps根目录
*    服务器执行的路径第一个“/”代表当前工程目录下
*    只有请求转发时服务器执行的,所以不能写工程名字。
request.getRequestDispatcher("/requestGetData").forward(request, response);
request.getRequestDispatcher("requestGetData").forward(request, response);
response.getOutputStream().write("进入了ForwardTwoServlet".getBytes());

//从域对象里面获取数据
Object object = request.getAttribute("emplist");

if(object!=null){
    List<String> list = (List<String>) object;
    for (int i = 0; i < list.size(); i++) {
        response.getOutputStream().write(list.get(i).getBytes());
    }
}

ServletContext域对象

作用域范围全局

当前工程只有一个ServletContext对象,存储的数据在当前工程内部共享。

当服务器启动的时候被创建,当前服务器正常关闭或重启的时候才销毁。
servletContext里面存储的数据在当前项目下的所有servelt都可以共享
public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    List<String> list = new ArrayList<String>();
    list.add("aa");
    list.add("bb");
    list.add("cc");

    //将数据存储到ServletContext中
    getServletContext().setAttribute("emplist", list);
}

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

    //获取数据
    Object object = getServletContext().getAttribute("emplist");
    if(object!=null){
        List<String> list = (List<String>) object;
        for (String string : list) {
            response.getWriter().write(string);
        }
    }
}

获取全局配置参数

<!--web.xml-->
<context-param>
    <param-name>dbuser</param-name>
    <param-value>root</param-value>
</context-param>

<context-param>
    <param-name>dbuserpwd</param-name>
    <param-value>123</param-value>
</context-param>
public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    //使用ServletContext获取web.xml中全局配置参数
    //getServletContext().getInitParameter(name);
    //getServletContext().getInitParameterNames();

    Enumeration<String> enumeration = getServletContext().getInitParameterNames();

    while (enumeration.hasMoreElements()) {

        String paramName = enumeration.nextElement();

        String paramValue = getServletContext().getInitParameter(paramName);

        System.out.println(paramName+":"+paramValue);
    }
}

统计成功登录的人数

登录---数据库

开发步骤
1.设计数据表
2.导入相关jar包
mysql的jar
c3p0的jar
dbutil的jar

3.配置数据库连接池

4.设计程序类
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>login.html</title>
    <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=UTF-8">

    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

  </head>

  <body>
    <form action="/TEST/login" method="post">
    <p>用户名:<input type="text" name="userName" /></p>
    <p>密&nbsp;码:<input type="password" name="pwd" /></p>
    <p><input type="submit" value="登录" /></p>
    </form> 
  </body>
</html>
public class LoginServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //处理post提交中文乱码问题
        request.setCharacterEncoding("utf-8");
        //获取数据
        String userName = request.getParameter("userName");
        String pwd = request.getParameter("pwd");

        //数据封装起来
        User user = new User(0, userName, pwd);

        //实例业务处理类
        UserService userService = new UserService();

        //验证登录
        if(userService.login(user)){

            //统计登录成功人数,使用servletContext统计,name为count
            //先获取已有count人数,在此基础上+1
            Object object = getServletContext().getAttribute("count");
            if(object==null){
                //统计人数为1
                getServletContext().setAttribute("count", 1);

            }else{
                int count = (int) object;
                count++;
                getServletContext().setAttribute("count",count);
            }


            request.setAttribute("result", true);
        }else{
            request.setAttribute("result", false);
        }
        //页面跳转
        request.getRequestDispatcher("/result").forward(request, response);
    }
}
/**
 * 业务处理类
 */
public class UserService {

    /**
     * 实例数据访问类
     */
    UserDao userDao = new UserDao();

    /**
     * 验证登录
     * @param user
     * @return
     */
    public boolean login(User user) {
        //查找数据库是否存在对应用户
        if(userDao.isExists(user)){
            return true;
        }
        return false;
    }
}
/**
 * 数据访问类
 * @author songyu
 *
 */
public class UserDao {

    /**
     * dbutil工具类
     */
    private QueryRunner runner = new QueryRunner(new ComboPooledDataSource());

    /**
     * 判断用户是否存在
     * @param user
     * @return
     */
    public boolean isExists(User user) {
        try {
            String sql = "select * from user where username=? and pwd=?";
            User user2 = runner.query(
                    sql,
                    new BeanHandler<User>(User.class) ,
                    user.getUserName(),user.getPwd());
            return user2!=null;
        } catch (SQLException e) {

            e.printStackTrace();

            throw new RuntimeException(e);
        }
    }
}
/**
 * dopost2
 */
public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

        //设置输出中文乱码问题
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();

        //获取登录的结果
        Object object = request.getAttribute("result");
        if(object!=null){
            boolean flag = (boolean) object;
            if(flag){

                //显示成功登录人数
                Object object2 = getServletContext().getAttribute("count");

                int count = 0;//用于存储统计的人数
                if(object2!=null){
                    count = (int) object2;
                }

                out.write("<font color='green'>目前登录成功的人数:"+count+"</font>");


            }else{
                out.write("<font color='red'>登录失败</font>");
            }
      }
}
  • 11
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值