三. 通过人事管理系统学习-----了解JSP的内置对象!!!(并且温习java基础的方法)

🥳🥳🥳一、JSP学习,我的第一个jsp文件

🥳🥳🥳二、JSP的基本语法小知识!!

通过人事管理系统的练习了解九大内置对象的介绍


目录

通过人事管理系统的练习了解九大内置对象的介绍

HTTP协议简介

JSP内置对象简介

JSP内置对象:

九大内置对象的常用方法介绍

Request

OUT

Response

人事管理系统实战

request作用域

附代码:


HTTP协议简介

协议是代表我们的客户端与服务器端交流的一种方式,http协议是一种超文本传输的协议方式。

  • HTTP请求:代表客户端在访问web资源的过程(请求)
  • HTTP响应:服务端接受用户请求后,通过http协议,将资源响应给客户端

JSP内置对象简介

  • 请求与响应模式:代表的是客户端与服务器端交互的一种模式,
  • 在JSP中,请求与响应对象是通过内置对象存在的

JSP内置对象:

  • 内置对象(又叫隐含对象,有9个内置对象):不需要预先声明就可以在脚本代码和表达式中随意使用
  • 为什么使用:使用内置对象,节省开发效率

作用域:代表数据存储的一个范围。(数据想在不同的数据之间进行共享)

pageContext, request, session, application


九大内置对象的常用方法介绍

Request

封装了由WEB浏览器或其他客户端生成HTTP请求的细节(参数,属性,头标和数据)

OUT

代表输出流的对象,通过out对象向页面输出指定内容

Response

封装了返回到HTTP客户端的输出,向页面作者提供设置响应头标和状态码的方式

request作用域:用户的请求周期,用户在发送请求,服务器做出响应的这段时间内如果需要共享数据时,我们可以吧当前数据存储到request作用域中。


人事管理系统实战

  • 通过集合模拟数据库中的数据信息

1.首先在Java Resources中创建一个com.kilig.staff的员工包,然后创建封装类Emp类。来加入用户的常用属性,构造方法以及get和set方法

这些都是我们的系统可以一键生成的

2.创建数据库操作类,创建com.kilig.db包,然后新建类名为DBUtil

  • 因为为了便于介绍,我们就没有使用数据库的内容进行介绍,在这儿将数据库信息通过集合来进行模拟
  • 首先创建Map集合,而我们也是到HashMap是需要键值对的(key-value)因为编号是唯一的所以key--编号,value就是Emp类
  • 并且同时创建集合内的数据信息

3.为了操控数据库,我们就需要编写一个selectEmpAccountAndPassword() 方法去判断用户名和密码是否正确

  • 判断用户输入的对象是否在当前Emp对象中存在,如果存在返回true,否则返回false
  • 通过 Emp e =map.get(key); 来获取集合中的emp对象
  • 如果emp中的account,等于集合中某个key对应的account,并且密码的条件也满足,那么flag=true

4.在项目的WebContent部分编写登录页面login.jsp

创建form表单,封装用户操作的内容,可以在提交表单的过程中,将表单内容发送给服务器端,让服务器端有应用程序来处理form表单

5.现在需要再点击登录按钮时,有一个服务器端的JSP页面,可以处理人事管理系统的登录页面,也就是需要一个业务逻辑处理代码,需要制定到某一个action中

  • 所以我们新建一个处理表单的jsp control.jsp
  • 首先让我们做一个测试,看是否可以接受用户请求,获取用户的输入内容,并且做出一些响应
  • 也就是说,当我们点击提交login时,它应该找到login.jsp中的form表单,在action,中提交表单对应的处理程序

  • 所以我们需要在login.jsp页面中找到form表单,将form表单的内容封装到请求对象control.jsp中。

6.此时,当我们输完登录信息,会发现,他会跳转到control.jsp页面

7.接下来我们在control.jsp来进行处理用户发来的请求

  • 获取账号以及密码,并且去调用DBUtil中的方法来判断是否存在指定信息
  • 1、如果DBUtil返回值=true,那么需要显示成功的页面
  • 2、如果DButil返回值=false,那么显示错误消息

Request   💁‍♀️💁‍♀️💁‍♀️点击查看具体介绍和方法总结

login.jsp将form表单的内容封装到请求对象control.jsp中。并且封装到request的对象中,此时服务器端的control.jsp就可以通过内置对象 Request内置对象来获取请求信息,包括请求信息

Request提供的方法:

  • getParameter(String name) 可以通过一个控件的name属性来获取控件的值

所以现在第一步,是需要我们获取用户输入的值

8.接下来我们想看看 account 和 password 是否在我们的control页面中

Out 💁🏼💁🏼💁🏼点击查看具体介绍和常用方法

out:输出流对象,输出指定的信息

方法:println();

                                      

运行测试可以看到,我们目前可以正常获得我们的账号和密码

9.现在,我们的control.jsp页面不是仅仅调用账号密码就可以了,而是要实现之前在DBUtil中我们定义的selectEmpAccountAndPassword()方法,帮我们提供返回值

  • 因此接下来我们需要调用DBUtil,进行导包操作
  • 将account和password封装到当前对象中,创建emp对象,并且传递四个成员属性的值,由于name,email我们传入的是空,所以现在为null
  • 获取DBUtil的Boolean数值,进行判断

让我们做个测试!

  • 首先输入一个错误的信息

                             

  • 再输入一个正确的存在的信息

                                           

可以看到,我们成功了一大步!!!!!现在只需要稍微改一改就ok输入的不应该是文本而是一些数据信息!!!🤣🤣🤣🤣🤣

10.登陆成功的页面,展示员工的信息

  • 我们知道,在jsp页面中,我们可以使用脚本元素<%%>来区别HTML和java代码

11.此时,我们知道我们的员工信息是在DBUtil中静态体现,所以我们可以获取静态的属性

所以我们在java代码中获取map集合要记得导包!!

这里出错是因为我们之前在DBUtil类中创建map集合对象没有使用公开方法,加上public即可。

12.此时遍历map集合,并且对生成的元素生成对应的<tr>

要学会合理的应用脚本元素!!

13.现在让我们进行测试看一看!

可以看到,这就是我们登录成功后所显示的员工登录信息!

response 💁💁💁点击查看方法的说明和总结 

响应对象

测试看一看!

request作用域

我们知道,jsp有四种作用域

那你request作用域是在相邻两web资源之间,如果共享同一个request请求对象,那么我们可以把数据存储到request作用域当中,方便两个web资源之间可以传递一些需要的数据。

错误的示范::

这是login.jsp  这是control.jsp 

当我们启动后,是看不到获取的数值的,表明这两个页面的数据不是共享的request

 

14.创建result.jsp页面

并且那么当我们加上 request.getRequestDispatcher("result.jsp").forward(request, response);时,

启动可以看到:

直接跳转到result.jsp页面中,但是请求还是login.jsp页面,但是那么这个就是request的作用域,在相邻两个web资源之间,如果共享同一个request对象,那么就可以通过request对象中的set或者getAttribute方法来设置获取我们request作用域中设置的值。


Session💁💁💁点击查看相关介绍

session:主要用于跟踪对话

会话就是代表用户第一次进入当前系统直到退出系统或者关闭浏览器,在此期间与服务器的一系列交互。

session作用域:会话期间

那么我们可以在我们的管理系统中,怎样吧session放置在系统中呢? 

运行看一看:

 可以看到,我们的账户信息显示在了右边

那么当添加多个页面时呢? 

我们在control的jsp页面中。添加修改的功能

然后加入可操作的信息

运行看一看

config💁💁💁点击查看相关知识

config:获取配置信息

为了方便查看配置信息,我们在web.xml中进行对login的页面的一些配置

 <servlet>//标签
  		<servlet-name>login</servlet-name>//节点名称
  		<jsp-file>/login.jsp</jsp-file>//jsp-file
  		<init-param> //配置信息
  			<param-name>age</param-name>//名称
  			<param-value>100</param-value>//子节点
  		</init-param>
  </servlet>
  <servlet-mapping>//映射
  		<servlet-name>login</servlet-name>//名称
  		<url-pattern>/denglu.do</url-pattern>//url
  </servlet-mapping>

此时在运行时,会发现,我们的页面发生了变化 

那么怎样去获取参数信息呢 ?

运行看一看效果: 

application💁💁💁点击查看相关方法介绍

application:提供了关于服务器的版本,应用及初始化参数喝应用内资源绝对路径方式

application作用域:web容器的生命周期

让我们使用application在当前系统中获取系统的访问量

运行看一看: 

 

每运行一次,我们的访问量增加一个

修改功能完善

  • URL传递数据,完成数据回显
  • 修改的核心代码

相邻两个JSP页面传递数据的时候,通过URL参数的方式来传递数据。规则:

资源?key1=value&key2=value

返回页面刷新看一看,可以看到除了反悔了地址栏外,还返回了需要修改的参数。

那么如何在目标页面传递回显的参数呢?

其实上面红框范围内的内容就是请求参数,前面我们知道了getParameter来获取参数

运行看一看

其实修改的思路是:员工的所有信息都是存放在DButil集合map中,那么我们获取了集合的key值,然后取出员工值,然后进行修改

运行可以看到: 

 

 

 


附代码:

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>HelloWeb</display-name>
  <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>
  <servlet>
  		<servlet-name>login</servlet-name>
  		<jsp-file>/login.jsp</jsp-file>
  		<init-param>
  			<param-name>age</param-name>
  			<param-value>100</param-value>
  		</init-param>
  </servlet>
  <servlet-mapping>
  		<servlet-name>login</servlet-name>
  		<url-pattern>/denglu.do</url-pattern>
  </servlet-mapping>
</web-app>

1.Emp.java

package com.kilig.staff;

public class Emp {
//	成员属性,包括账号,名称,密码和邮箱
	private String account;
	private String name;
	private String password;
	private String email;
	
//	构造方法
	public Emp(String account, String name, String password, String email) {
		super();
		this.account = account;
		this.name = name;
		this.password = password;
		this.email = email;
	}
//	get&set

	public String getAccount() {
		return account;
	}

	public void setAccount(String account) {
		this.account = account;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}
	
}

2.DBUtil.java

package com.kilig.db;

import java.util.HashMap;
import java.util.Map;

import com.kilig.staff.Emp;
import com.sun.org.apache.bcel.internal.generic.NEW;

public class DBUtil {
//	数据库信息通过集合来进行模拟
	public static Map<String, Emp> map =new HashMap<String, Emp>();
//	创建账户信息
	static {
		map.put("001", new Emp("001", "kilig", "123456", "kilig@qq.com"));
		map.put("002", new Emp("002", "Berry", "123456", "berrt@qq.com"));
		map.put("003", new Emp("003", "Coco", "123456", "co@qq.com"));
		map.put("004", new Emp("004", "Zone", "123456", "zone@qq.com"));
	}
//	判断用户名和密码是否正确
	public static boolean selectEmpAccountAndPassword(Emp emp) {
		boolean flag =false;
//		遍历map集合的key值
		for(String key :map.keySet()) {
//			Emp中账号密码与集合中的value进行比对
			Emp e=map.get(key);
			if(emp.getAccount().equals(e.getAccount())&&
					emp.getPassword().equals(e.getPassword())) {
				flag =true;
				break;
			}
		}
		return flag;
	}

}

3.login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Personnel Management System</title>
</head>
<body>
	Config对象:<%= config.getServletName() %>
	<br/>
	config获取初始化参数:<%=config.getInitParameter("age") %>
	<h3 align="center">PMS Login Page</h3>
	<hr>
	<!--  加入form表单-->
	<!-- action代表服务器端的处理程序 -->
	<form action="control.jsp">
		<table align="center">
			<tr>
				<td>
				userName:
				</td>
				<td>
				<!-- 使得服务器端的应用程序通过name属性可以获取账户信息 -->
					<input type="text" name="account"/>
				</td>
			</tr>
			<tr>
				<td>
				passWord:
				</td>
				<td>
					<input type="password" name="password"/>
				</td>
			</tr>
			<!-- 提交按钮 -->
			<tr>
				<td align="center">
					<input type="submit" value="Login"/>
				</td>
			</tr>
		</table>
	</form>
</body>
</html>

4.conrol.jsp

<%@page import="java.util.Map"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page import="com.kilig.db.*, com.kilig.staff.*, java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!-- 获取账号以及密码,并且去调用DBUtil中的方法来判断是否存在指定信息
		1、如果DBUtil返回值=true,那么需要显示成功的页面
		2、如果DButil返回值=false,那么显示错误消息
	 -->
	 
	 <%
		 String account =request.getParameter("account");
		 String password =request.getParameter("password");
		 //out.println("ACCOUNT:"+account+"  PASSWORD:"+password);
		 
		 Emp emp =new Emp(account,null,password,null);
		 boolean flag = DBUtil.selectEmpAccountAndPassword(emp);
		 
		 Map<String, Emp> map =DBUtil.map;
		 
		 if(flag == true){
			 
			 Object o= application.getAttribute("count");
			 if(o == null){
				 application.setAttribute("count", 1);
			 }else{
				 int count = Integer.parseInt(o.toString());
				 application.setAttribute("count", count+1);
				 
			 }
			 session.setAttribute("account", account);
			 //out.println("The Password and Account is correct!!!");
	 %>
	 		<h3 align="right">访问量:<%= application.getAttribute("count")%></h3>
	 		<h3 align="right"> Login Account:<%=session.getAttribute("account") %></h3>
	 		<h3 align="center"> !Welcome to visit PMS HomePage!</h3>
	 		<hr>
	 		<table align="center" border="1" wigth="300px">
	 			<tr>
	 				<td>
	 					Account
	 				</td>
	 				<td>
	 					Name
	 				</td>
	 				<td>
	 					Email
	 				</td>
	 				<td>
	 					Revise
	 				</td>
	 			 </tr>
	 			<!-- 此处就需要构建员工信息 -->
	 			<% 
	 				for(String key: map.keySet()){
	 					Emp e= map.get(key);
	 					%>
				 			<tr>
				 				<td>
				 					<%= e.getAccount() %>
				 				</td>
				 				<td>
				 					<%= e.getName() %>
				 				</td>
				 				<td>
				 					<%= e.getEmail() %>
				 				</td>
				 				<td>
				 					<a href="update.jsp?account=<%= e.getAccount()%>&name=<%= e.getName()%>&email=<%= e.getEmail()%>">revise</a>
				 				</td>
				 			 </tr>
	 					<%
	 				}
	 			%>
	 		</table>
	 <%	 
		 }else{
			 out.println("The Password and Account is Wrong!!! :((");
		 }
	 %>
</body>
</html>

5.update.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Employee information modification</title>
</head>
<body>
	<h3 align="right">Employee update page:<%= session.getAttribute("account") %></h3>
	<hr>
	<form action="update_control.jsp">
	<table align="center" border="1" width="300px">
	<tr>
		<td>Account</td>
		<td><input type="text" name="account" value="<%= request.getParameter("account")%>"/></td>
	</tr>
	<tr>
		<td>Name</td>
		<td><input type="text" name="name" value="<%= request.getParameter("name")%>"/></td>
	</tr>
	<tr>
		<td>Email</td>
		<td><input type="text" name="email" value="<%= request.getParameter("email")%>"/></td>
	</tr>
	<tr>
		<td colspan="2"><input type="submit" value="REVISE"/></td>
	</tr>
	</table>
	</form>
</body>
</html>

update_control.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
<%@ page import="com.kilig.db.*, com.kilig.staff.*, java.util.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<% 
		Map<String, Emp> map =DBUtil.map;
		Emp emp=map.get(request.getParameter("account"));
		emp.setName(request.getParameter("name"));
		emp.setEmail(request.getParameter("email"));
	%>
	<h3 align="center"> Revise successful!!!</h3>
</body>
</html>

result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
从request中获取的数据:<%= request.getAttribute("name")%>
</body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值