域对象
可以在不同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
获取全局配置参数
//使用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
<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