三. 通过人事管理系统学习-----了解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

相关文章

springboot集成easypoi导出word换行处理过程

《springboot集成easypoi导出word换行处理过程》SpringBoot集成Easypoi导出Word时,换行符n失效显示为空格,解决方法包括生成段落或替换模板中n为回车,同时需确... 目录项目场景问题描述解决方案第一种:生成段落的方式第二种:替换模板的情况,换行符替换成回车总结项目场景s

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

SpringBoot中@Value注入静态变量方式

《SpringBoot中@Value注入静态变量方式》SpringBoot中静态变量无法直接用@Value注入,需通过setter方法,@Value(${})从属性文件获取值,@Value(#{})用... 目录项目场景解决方案注解说明1、@Value("${}")使用示例2、@Value("#{}"php

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。