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

本文主要是介绍三. 通过人事管理系统学习-----了解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&setpublic 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>

 

这篇关于三. 通过人事管理系统学习-----了解JSP的内置对象!!!(并且温习java基础的方法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/587278

相关文章

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

Java中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程