J2EE实验二

实验二 Struts2核心组件的应用

一、目的与任务

目的:学习Action中的动态方法调用和ActionServlet API的三种访问方法,学习OGNL表达式和Struts2标签的使用

任务:实现基于Struts2的登录和注册系统,系统中练习使用Action、OGNL表达式和Struts2标签

二、内容、要求与安排方式

1、实验内容与要求:

(1)采用指定method属性方式实现调用Action中的不同方法,分别实现登录和注册功能;

在登录成功时,通过ActionContext访问session对象,并将用户名存储到session对象中;

在注册成功时,通过辅助类获取session对象,并将用户信息存储到session对象中;

最终在页面上显示用户名以及登录成功或者注册成功的信息。

(2)使用Struts2标签实现原来的注册页面。

(3)修改注册成功页面使用OGNL表达式显示所有注册信息。

2、实验安排方式:上机编码。

三、源代码如下

  1. 项目结构:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    1. 源代码:

      structs.xml

      <?xml version= "1.0" encoding= "UTF-8"?>
      <!DOCTYPE struts PUBLIC
              "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
              "http://struts.apache.org/dtds/struts-2.5.dtd">
      <struts>
          <package name="default" namespace="/" extends= "struts-default">
              <action name="login" class= "action.LoginRegisterAction" method="login">
                  <result name="success">/success.jsp</result>
                  <result name="login">/login.jsp</result>
              </action>
              <action name="register" class="action.LoginRegisterAction" method="register">
                  <result name="success">/success.jsp</result>
                  <result name="register">/register.jsp</result>
              </action>
          </package>
      </struts>
      

      web.xml

      <?xml version="1.0" encoding= "UTF-8"?>
      <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation= "http://xmlns.jcp.org/xml/ns/javaee
               http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
               version="4.0">
          <filter>
              <filter-name>struts2</filter-name>
              <filter-class>
                  org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
              </filter-class>
          </filter>
          <filter-mapping>
              <filter-name>struts2</filter-name>
              <url-pattern>/*</url-pattern>
          </filter-mapping>
          <welcome-file-list>
              <welcome-file>login.jsp</welcome-file>
          </welcome-file-list>
      </web-app>
      

      login.jsp

      <%--
        Created by IntelliJ IDEA.
        User: Lunatic
        Date: 2020/5/18
        Time: 11:42
        To change this template use File | Settings | File Templates.
      --%>
      <%@page contentType="text/html" pageEncoding="UTF-8"%>
      <html>
      <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
          <title>欢迎进入登录注册界面</title>
          <style type="text/css">
              body {
                  background-color: darkturquoise;
                  font-size: 25px;
                  text-align: center;
              }
          </style>
      </head>
      <body>
      <form action="login.action" method="get">
          用户名:<label>
          <input type="text" name="user.name">
      </label><br>
          密码: <label>
          <input type="password" name="user.pass">
      </label><br>
          <button type="submit" align="center">登录</button>
          <a href="register.jsp">
              <button type="button" align="center">注册</button>
          </a>
      </form>
      </body>
      </html>
      

      register.jsp

      <%--
        Created by IntelliJ IDEA.
        User: Lunatic
        Date: 2020/5/18
        Time: 12:13
        To change this template use File | Settings | File Templates.
      --%>
      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
          <title>欢迎进入登录注册界面</title>
          <style type="text/css">
              body {
                  background-color: cornflowerblue;
                  font-size: 25px;
                  text-align: center;
                  vertical-align: middle;
              }
          </style>
      </head>
      <body>
      <form action="register.action" method="get">
          用户名: <label>
          <input type="text" name="user.name">
      </label><br>
          密码: <label>
          <input type="password" name="user.pass">
      </label><br>
      </label>
          <button type="submit" align="center">注册并登陆</button>
      </form>
      </body>
      </html>
      

      success.jsp

      <%--
        Created by IntelliJ IDEA.
        User: Lunatic
        Date: 2020/5/19
        Time: 11:47
        To change this template use File | Settings | File Templates.
      --%>
      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <%@ taglib prefix="s" uri="/struts-tags" %>
      <html>
      <head>
          <title>登陆注册成功</title>
      </head>
      <body>
      <s:if test='#session.type=="login"'>
          <h1>登录成功,您的信息如下: </h1>
          登录名: <s:property value="user.name"/><br>
      </s:if>
      <s:elseif test='#session.type=="register"'>
          <h1>注册成功,您的信息如下:</h1>
          登录名: <s:property value="user.name"/><br>
      </s:elseif> <s:else>
          <% response.sendRedirect("fail.jsp"); %>
      </s:else>
      </body>
      </html>
      

      fail.jsp

      <%--
        Created by IntelliJ IDEA.
        User: Lunatic
        Date: 2020/5/19
        Time: 15:20
        To change this template use File | Settings | File Templates.
      --%>
      <%@ page contentType="text/html;charset=UTF-8" language="java" %>
      <html>
      <head>
          <title>很抱歉,登陆失败</title>
          <style type="text/css">
              body {
                  background-color: red;
                  font-size: 25px;
                  text-align: center;
                  vertical-align: middle;
              }
          </style>
      </head>
      <body>
      <h1>请检查登录名或密码是否正确</h1>
      </body>
      </html>
      

      Login_Register.java

      package Action;
      
      import com.opensymphony.xwork2.Action;
      import com.opensymphony.xwork2.ActionContext;
      public class LoginRegisterAction implements Action {
          private User user;
          public User getUser() {
              return user;
          }
          public void setUser(User user) {
              this.user = user;
          }
          public String login() {
              if(getUser() != null) {
                  if(getUser().getName().equals("Lunatic")&&getUser().getPass().equals("000000")&& getUser().getPass().trim().length() > 0) {
                      ActionContext.getContext().getSession().put("type", "login");
                      return SUCCESS;
                  }
              }
              return LOGIN;
          }
          public String register() {
              if(getUser() != null) {
                  if(getUser().getName() != null && getUser().getName().trim().length() > 0) {
                      ActionContext.getContext().getSession().put("type", "register");
                      return SUCCESS;
                  }
              }
              return LOGIN;
          }
          @Override
          public String execute() throws Exception {
              return null;
          }
      }
      

      User.java

      package Action;
      
      public class User {
          private String name;
          private String pass;
          public String getName() {
              return name;
          }
          public void setName(String name) {
              this.name = name;
          }
          public String getPass() {
              return pass;
          }
          public void setPass(String pass) {
              this.pass = pass;
          }
      }
      

四、实验结果

登录:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

登录成功:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注册:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注册成功:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

登录失败:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/302832.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot项目处理 多数据源问题(把本地库数据 推送 到另外一个平台的库)

一、需求梳理 把我方数据库的表中数据 ----------> 推送到第三方的数据库 相当于库对库的数据插入, 但是需要的是用代码的方式实现; 二、解决思维 (1) 首先,平台与平台之间的数据库对接; 处理点1: 字段转换 (库表之间的数据字段不一致问题) 解决方式: 挨个字段的对应,如…

每日算法打卡:数的三次方根 day 7

文章目录 原题链接题目描述输入格式输出格式数据范围输入样例&#xff1a;输出样例&#xff1a; 题目分析示例代码 原题链接 790. 数的三次方根 题目难度&#xff1a;简单 题目描述 给定一个浮点数 n&#xff0c;求它的三次方根。 输入格式 共一行&#xff0c;包含一个浮…

【SpringCloud Alibaba笔记】(4)Seata处理分布式事务

Seata 分布式事务问题 单机单库没这个问题&#xff0c;分布式之前从1: 1 -> 1:N ->N:N 分布式之后 单体应用被拆分成微服务应用&#xff0c;原来的三个模块被拆分成三个独立的应用分别使用三个独立的数据源&#xff0c;业务操作需要调用三个服务来完成。 此时每个服务…

强化学习的数学原理学习笔记 - 蒙特卡洛方法(Monte Carlo)

文章目录 概览&#xff1a;RL方法分类蒙特卡洛方法&#xff08;Monte Carlo&#xff0c;MC&#xff09;MC BasicMC Exploring Starts&#x1f7e6;MC ε-Greedy 本系列文章介绍强化学习基础知识与经典算法原理&#xff0c;大部分内容来自西湖大学赵世钰老师的强化学习的数学原理…

Hive 的 安装与部署

目录 1 安装 MySql2 安装 Hive3 Hive 元数据配置到 MySql4 启动 Hive Hive 官网 1 安装 MySql 为什么需要安装 MySql? 原因在于Hive 默认使用的元数据库为 derby&#xff0c;开启 Hive 之后就会占用元数据库&#xff0c;且不与其他客户端共享数据&#xff0c;如果想多窗口操作…

强化学习6——动态规划置策略迭代算法,以悬崖漫步环境为例

策略迭代算法 通过策略评估与策略提升不断循环交替&#xff0c;得到最优策略。 策略评估 固定策略 π \pi π 不变&#xff0c;估计状态价值函数V 一个策略的状态价值函数&#xff0c;在马尔可夫决策过程中提到过&#xff1a; V π ( s ) ∑ a ∈ A π ( a ∣ s ) ( r (…

三种解密 HTTPS 流量的方法介绍

Web 安全是一项系统工程&#xff0c;任何细微疏忽都可能导致整个安全堡垒土崩瓦解。拿 HTTPS 来说&#xff0c;它的「内容加密、数据完整性、身份认证」三大安全保证&#xff0c;也会受到非法根证书、服务端配置错误、SSL 库漏洞、私钥被盗等等风险的影响。很多同学认为只要访问…

2024最新腾讯云CVM服务器和轻量应用服务器有什么区别?

腾讯云轻量服务器和云服务器CVM该怎么选&#xff1f;不差钱选云服务器CVM&#xff0c;追求性价比选择轻量应用服务器&#xff0c;轻量真优惠呀&#xff0c;腾讯云服务器网txyfwq.com活动 https://curl.qcloud.com/oRMoSucP 轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元…

游戏、设计选什么内存条?光威龙武系列DDR5量大管饱

如果你是一位PC玩家或者创作者&#xff0c;日常工作娱乐中&#xff0c;确实少不了大容量高频内存的支持&#xff0c;这样可以获得更高的工作效率&#xff0c;光威龙武系列DDR5内存条无疑是理想之选。它可以为计算机提供强劲的性能表现和稳定的运行体验&#xff0c;让我们畅玩游…

wblogic中间件配置数据源

配置数据源 1.服务-数据源-配置-新建 2.单机选一般数据源 3.选择源名称、jndi名称、数据库类型 4.选择驱动 5.下一步 6.输入连接串信息 参考&#xff1a; 格式二&#xff1a;jdbc:oracle:thin:<host>:<port>:<SID> 数据库名称配置的sid 7.测试配置&#xff…

4.5 A TILED MATRIX MULTIPLICATION KERNEL

我们现在准备展示一个tiled矩阵乘法内核&#xff0c;该内核使用共享内存来减少对全局内存的流量。图中4.16显示的内核。实施图4.15.中所示的阶段。在图4.16中&#xff0c;第1行和第2行声明Mds和Nds为共享内存变量。回想一下&#xff0c;共享内存变量的范围是一个块。因此&#…

Kubernetes (七) service(微服务)及Ingress-nginx

官网地址&#xff1a; 服务&#xff08;Service&#xff09; | Kuberneteshttps://v1-24.docs.kubernetes.io/zh-cn/docs/concepts/services-networking/service/ 一 . 网络通信原理 …

【Flet教程】使用Flet以Python创建TODO应用程序

Flet是基于Python实现的Flutter图形界面GUI。除了使用Python&#xff0c;具备美观、简洁、易用&#xff0c;还有Flutter本身的跨平台&#xff08;安卓、iOS、Win、Mac、Web&#xff09;、高性能、有后盾的特点。下面是0.18版官方TODO APP教程&#xff0c;为了准确&#xff0c;保…

java智慧医院互联网智慧3D导诊系统源码,经由智慧导诊系统多维度计算,准确推荐科室

什么是智慧导诊系统? 简单地说&#xff0c;智慧导诊系统是一种利用人工智能技术&#xff0c;为医生提供帮助的系统。它可以通过分析患者的症状和病史为医生提供疾病诊断和治疗方案的建议。 系统介绍&#xff1a; 医院智慧导诊系统是在医院中使用的引导患者自助就诊挂号&…

git ssh key 配置

一、Profile Settings-->SSH Keys 我们点击这里会有详情的文档介绍生成sshkey。 ssh-keygen -t rsa -b 2048 -C "邮箱" --回车... 将生成的id_rsa.pub粘贴到如下保存 git config --global user.name "用户名" git config --global user.email "邮…

数据分析基础之《pandas(1)—pandas介绍》

一、pandas介绍 1、2008年Wes McKinney&#xff08;韦斯麦金尼&#xff09;开发出的库 2、专门用于数据分析的开源python库 3、以numpy为基础&#xff0c;借力numpy模块在计算方面性能高的优势 4、基于matplotlib能够简便的画图 5、独特的数据结构 6、也是三个单词组合而…

基于Kettle开发的web版数据集成开源工具(data-integration)-应用篇

目录 &#x1f4da;第一章 基本流程梳理&#x1f4d7;页面基本操作&#x1f4d7;对应后台服务流程 &#x1f4da;第二章 二开思路&#x1f4d7;前端&#x1f4d7;后端&#x1f4d7;后续补充&#xff1a;[Kettle Local引擎源码使用记录](https://renxiaozhao.blog.csdn.net/arti…

【Spring】Spring的事务管理

前言&#xff1a; package com.aqiuo.service.impl;import com.aqiuo.dao.AccountMapper; import com.aqiuo.pojo.Account; import com.aqiuo.service.AccountService; import org.springframework.jdbc.core.JdbcTemplate;import java.sql.Connection; import java.sql.SQLEx…

【QML COOK】- 000-创建Project

1. 文件->New Project... 2. Application(Qt)->Qt Quick Application(compat) 3. 填好【名称】和【创建路径】 4. 选择CMake 5. 选择QT6.2 6. 直接【下一步】 7. 直接下一步 8. 直接下一步 9. 出现工程文件 10. 点击运行 11. 出现窗口

leetcode算法题之递归--深度优先搜索总结

文章目录 1.全排列2.子集 1.全排列 全排列 class Solution {vector<vector<int>> ret;vector<int> path;bool check[7];//标记nums数组某个下标是否已访问&#xff0c;剪枝使用 public:vector<vector<int>> permute(vector<int>& n…