域对象

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

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

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

Request,一次请求来到服务器,服务器创建,服务器这次请求响应结束后销毁request,

request对象是一次请求内有效。

注意: request域对象数据只能在页面跳转-请求转发才能共享获取,
如果想要页面不跳转就能获取共享数据,就只能使用ServletContext域对象.
1
2
3
4
5
6
7
8
9
//定义数据
List list = new ArrayList();

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);//不能访问的
//请求转发浏览器栏不变
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

  • 路径写法

  • 全路径,绝对路径 url=/工程名字/资源路径

  • 相对路径 url=资源路径

  • 浏览器执行的路径第一个“/”代表webapps根目录

  • 服务器执行的路径第一个“/”代表当前工程目录下

  • 只有请求转发时服务器执行的,所以不能写工程名字。
    request.getRequestDispatcher("/requestGetData").forward(request, response);
    request.getRequestDispatcher(“requestGetData”).forward(request, response);
    1
    2
    3
    4
    5
    6
    7
    8
    9
    response.getOutputStream().write(“进入了ForwardTwoServlet”.getBytes());

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

if(object!=null){
List list = (List) object;
for (int i = 0; i < list.size(); i++) {
response.getOutputStream().write(list.get(i).getBytes());
}
}
1
2
3
4
5
6
7
8
9
10
11
ServletContext域对象
作用域范围全局

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

当服务器启动的时候被创建,当前服务器正常关闭或重启的时候才销毁。
servletContext里面存储的数据在当前项目下的所有servelt都可以共享
1
2
3
4
5
6
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
List list = new ArrayList();
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);
    }
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
获取全局配置参数

dbuser root dbuserpwd 123 1 2 3 4 5 6 7 8 9 10 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
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
统计成功登录的人数
登录—数据库

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

3.配置数据库连接池

4.设计程序类
1
2
3
4
5
6
7
8
9
10
11
12
13

login.html
<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">-->

用户名:

密 码:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 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);
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/**

  • 业务处理类
    */
    public class UserService {

    /**

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

    /**

    • 验证登录
    • @param user
    • @return
      /
      public boolean login(User user) {
      //查找数据库是否存在对应用户
      if(userDao.isExists(user)){
      return true;
      }
      return false;
      }
      }
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      /
      *
  • 数据访问类

  • @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);
    }
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/**

  • 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>");
         }
    

    }
    }
    ————————————————
    版权声明:本文为CSDN博主「h294590501」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/h294590501/article/details/82634886

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值