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

相关文章

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践指南

《破茧JDBC:MyBatis在SpringBoot中的轻量实践指南》MyBatis是持久层框架,简化JDBC开发,通过接口+XML/注解实现数据访问,动态代理生成实现类,支持增删改查及参数... 目录一、什么是 MyBATis二、 MyBatis 入门2.1、创建项目2.2、配置数据库连接字符串2.3、入

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick

Spring WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

Java.lang.InterruptedException被中止异常的原因及解决方案

《Java.lang.InterruptedException被中止异常的原因及解决方案》Java.lang.InterruptedException是线程被中断时抛出的异常,用于协作停止执行,常见于... 目录报错问题报错原因解决方法Java.lang.InterruptedException 是 Jav