首页 > 其他分享 >第一个简易ssh项目分析,基于ssh的简易教师信息管理系统

第一个简易ssh项目分析,基于ssh的简易教师信息管理系统

时间:2024-06-04 16:00:21浏览次数:25  
标签:xml teachinfo teacherService 项目分析 简易 jsp ssh Teachinfo public

#这是一个关于新手的ssh项目,以及首次对ssh的配置启动复盘#

1.项目结构介绍

1.1大致结构图展示

1.2整体说明

1.2.1:配置

ssh项目使用maven,在pom.xml中将ssh相关插件进行配置,当然,不管使  用maven还是直接下载ssh三部分的相关插件通过导入的方式进行ssh环境配置,其最终结果都是ssh环境的配置,不过要注意的是使用maven 需要注意版本一致性,否则会报错,很麻烦

即:

1.2.2:大致分类

整体分为java包,resource包,以及前端jsp的web包

2.项目运行过程

2.1服务器启动

服务器启动,一般也就是当你启动Tomcat(应用服务器软件,也可以说是中间件,也可以说是Servlet容器,Web服务器)时

实例化Struts2控制器时,加载struts.xml,struts-default.xml,等相关struts文件

实例化Spring容器时,加载applicationContext.xml

2.2浏览器请求

客户浏览器发送请求,请求到达Struts2的Filter控制器,如果是Action请求,Struts2控制器根据struts.xml的配置, 要调用一个Action对象处理

如例:

当运行该jsp文件,点击提交按钮后,请求是action请求,则Struts2的Filter控制器就会根据struts。xml配置文件

如图:

会根据你的action找到name ="addTeacher"的action,根据所在的class属性值,从而找到所在的类,这里会执行method 属性值里的方法,也就是说执行如图AddTeacherAction类的execute方法,执行这个方法,会return 结果,之后就根据return 的结果跳转相应的jsp界面

2.3部分代码执行机制

接上,细说,当执行了如图AddTeacherAction类的execute方法会发生什么?

即:

这里的主要就是 teacherService.addTeacher(teachinfo);这一代码,

那么如果我要实现添加信息,那么teacherService.addTeacher(teachinfo)括号里面的“teachinfo”就是前端jsp界面用户输入的信息了吧,可是前端用户输入的信息是如何传到这里的呢?

解释:当提交后,提交的信息会由 Struts2中的拦截器(interceptors)在Action执行之前处理HTTP请求数据。默认情况下,Struts2使用params拦截器,它会将请求参数映射到Action类的属性中,这里我用了Teachinfo teachinfo=new Teachinfo();

当表单提交时,params拦截器会将输入字段的值填充到teachinfo对象的相应属性中。然后,AddTeacherAction类的execute方法会被调用,teachinfo对象已经包含了从前端传递来的属性值。

2.4部分代码执行结果

调用teacherService.addTeacher(teachinfo),其运行逻辑就是将把封装在teachinfo内的信息,导入数据库

3.spring实现

3.1applicationContext.xml配置文件分析

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">


    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="mappingResources">
        <list>
            <value>Teachinfo.hbm.xml</value>
        </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                    org.hibernate.dialect.MySQL5Dialect
                </prop>
            </props>
        </property>
    </bean>
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/strutstest1"/>
        <property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
        <property name="user" value="root"/>
        <property name="password" value="@y123456"/>
    </bean>




    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    <!-- 事务管理器配置 -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>
    <!-- 启用注解驱动的事务管理 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>




    <bean id="teacherDaoBean" class="p1.dao.TeacherDaoBean">
        <property name="hibernateTemplate" ref="hibernateTemplate"/>
    </bean>
    <bean id="teacherService" class="p1.service.TeacherService">
        <property name="teacherDaoBean" ref="teacherDaoBean"/>
    </bean>

    <bean id="addTeacherAction" class="p1.action.AddTeacherAction">
        <property name="teacherService" ref="teacherService"/>
    </bean>
    <bean id="deleteTeacherAction" class="p1.action.DeleteTeacherAction">
        <property name="teacherService" ref="teacherService"/>
    </bean>
    <bean id="findTeacherAction" class="p1.action.FindTeacherAction">
        <property name="teacherService" ref="teacherService"/>
    </bean>
    <bean id="lookTeacherAction" class="p1.action.LookTeacherAction">
        <property name="teacherService" ref="teacherService"/>
    </bean>
    <bean id="updateTeacherAction" class="p1.action.UpdateTeacherAction">
        <property name="teacherService" ref="teacherService"/>
    </bean>
</beans>

如上分为三个部分,

3.1.1对于 <bean>属性见解

id:唯一标识符 也就是说如果把<bean>比作一个人的话,那么id 就是它的名字,不可重复,也就是多个<bean> 不可重名,要不然进行ref="id"时,谁知道到底依赖的是哪一个<bean> class

class:属性在Spring配置文件中用于指定要实例化的具体类

name:就是把class类里面的name 属性进行赋值

ref:一般是赋值内容 ,ref就是(依赖)用别的<bean>里面的值

3.1.2具体举例理解(就是spring ioc 的setter注入)

<bean id="addTeacherAction" class="p1.action.AddTeacherAction">
<property name="teacherService" ref="teacherService"/>
</bean>

这里我要对路径p1.action.下的AddTeacherAction类进行实例化(这里的实例化就是把ref="teacherService"的属性值传给name="teacherService"),那么name="teacherService"如何接收的呢?

如图

name="teacherService"里的teacherService对应的就是图中的teacherService。 set方法接受的

总的来说就是setter注入

3.1.3接着分析applicationContext.xml

<bean id="addTeacherAction" class="p1.action.AddTeacherAction">
<property name="teacherService" ref="teacherService"/>
</bean>其注入属性值依赖于ref="teacherService",

找到id=teacherService的bean


<bean id="teacherService" class="p1.service.TeacherService">
<property name="teacherDaoBean" ref="teacherDaoBean"/>
</bean>

而其值又依赖id=teacherDaoBean的Bean

<bean id="teacherDaoBean" class="p1.dao.TeacherDaoBean">
<property name="hibernateTemplate" ref="hibernateTemplate"/>
</bean>

以此找下去...

会发现最终依赖的是

 <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="mappingResources">
        <list>
            <value>Teachinfo.hbm.xml</value>
        </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                    org.hibernate.dialect.MySQL5Dialect
                </prop>
            </props>
        </property>
    </bean>
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/strutstest1"/>
        <property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
        <property name="user" value="root"/>
        <property name="password" value="@y123456"/>
    </bean>

第一个id="sessionFactory",这个是关于数据库的,第二个 id="dataSource"这个是关于数据库连接的这样不就和对数据库的操作扯上关系了,还有不要忘记了一连串的依赖,需要在其对应的类下依次进行setxxx()进行接受(实例化)

3.1.4对application.xml中事务管理器配置分析

也就是以下两段

<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- 启用注解驱动的事务管理 -->
<tx:annotation-driven transaction-manager="transactionManager"/>

为什么要进行事务管理器的配置呢?

回答:事务管理器的配置是为了确保在执行数据库操作时能够保持数据的一致性和完整性。通过事务管理器,可以控制事务的开始、提交、回滚等操作,使得多个数据库操作要么全部成功要么全部失败

主要原因是运行后,报错了,大致意思就是只能进行读的操作,无法修改,所以进行注解(readOnly=false)

注解位置:

4.如上实例源码展示

<!--全码:v:ershiqijian -->

addTeacher.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <style>
        .login-form {
            width: 240px;
            height: 350px;/*登录框大小*/
            flex-direction: column;/*竖排列*/
            padding: 40px;/*内边框距离*/
            text-align: center;
            position: relative;
            z-index: 100;
            border-radius: 18px;/*设置外边框圆角*/
            overflow: hidden; /* 隐藏多余的模糊效果*/
            background: darkcyan;

        }
        .container {
            width: 20vw;
            height: 20vh;
            position: fixed;
            right: 40%;
            top: 20%;
        }
        .login-form h2 {
            font-size: 18px;
            font-weight: 400;
            color: #ebd3d3;
        }

        .login-form input
        {
            margin: 6px 0;
            height: 36px;
            border: none;
            background-color: white;
            border-radius: 4px;
            padding: 0 14px;
            color: #3d5245;
        }
        .login-form button{
            margin: 6px 0;
            height: 36px;
            border: none;
            background-color: #09a3dc;
            border-radius: 4px;
            padding: 0 14px;
            color: #3d5245;
        }

    </style>
</head>
<body>
<%@include file="TopHead.jsp"%>
<div class="container">
    <form method="post" action="addTeacher"class="login-form">
        <h2> 添加教师信息</h2>
        <input  type="text" name="id" placeholder="id"/>
        <input  type="text" name="name" placeholder="name"/>
        <input  type="text" name="sex" placeholder="sex"/>
        <input  type="text" name="age" placeholder="age"/>
        <input  type="text" name="department" placeholder="department"/>
        <button type="submit">提交</button>
    </form>
</div>

</body>
</html>




strtts.xml:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>

    <constant name="struts.i18n.encoding" value="UTF-8"></constant>
    <constant name="struts.objectFactory" value="spring"/>
    <package name="test01" extends="struts-default">
        <action name="lookTeacher" class="p1.action.LookTeacherAction">
<!--            这里class属性值报错-->
            <result name="success">lookTeacher.jsp</result>
            <result name="error">/error.jsp</result>
        </action>
        <action name="addTeacher" class="p1.action.AddTeacherAction" method="execute">
            <result name="success" type="redirect">lookTeacher.action</result>
            <result name="error">/error.jsp</result>
        </action>
        <action name="deleteTeacher" class="p1.action.DeleteTeacherAction">
            <result name="success" type="chain">lookTeacher</result>
            <result name="error">/error.jsp</result>
        </action>
        <action name="findTeacher" class="p1.action.FindTeacherAction">
            <result name="success">/updateTeacher.jsp</result>
            <result name="error">/error.jsp</result>
        </action>
        <action name="updateTeacher" class="p1.action.UpdateTeacherAction">
            <result name="success" type="chain">lookTeacher</result>
            <result name="error">/error.jsp</result>
        </action>
    </package>

</struts>




addTeacherAction:

package p1.action;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import p1.pojo.Teachinfo;
import p1.service.TeacherService;

public class AddTeacherAction extends ActionSupport implements ModelDriven<Teachinfo> {
    Teachinfo teachinfo=new Teachinfo();
    TeacherService teacherService;
    public TeacherService getTeacherService() {
        return teacherService;
    }

    public void setTeacherService(TeacherService teacherService) {
        this.teacherService = teacherService;
    }


    public String execute(){
        String message="error";
        teacherService.addTeacher(teachinfo);
        message="success";
        return message;
    }

    public Teachinfo getModel() {
        return teachinfo;
    }
}


TeacherDaoBean

package p1.dao;


import org.springframework.orm.hibernate5.HibernateTemplate;

import p1.pojo.Teachinfo;

import java.util.List;

public class TeacherDaoBean {


    private HibernateTemplate hibernateTemplate;

    public HibernateTemplate getHibernateTemplate() {
        return hibernateTemplate;
    }

    public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
        this.hibernateTemplate = hibernateTemplate;
    }


    //添加操作
    public void addTeacher(Teachinfo teacher) {

        hibernateTemplate.save(teacher);

    }

    //查询某个教师操作
    public Teachinfo findTeacher(int teacher) {

        Teachinfo t1 = hibernateTemplate.get(Teachinfo.class, teacher);
        return t1;
    }

    //更新操作
    public void updateTeacher(Teachinfo teacher) {

        hibernateTemplate.update(teacher);
    }

    //删除操作
    public void deleteTeacher(Teachinfo teacher) {
        hibernateTemplate.delete(teacher);

    }

    //得到全部教师信息
    public List<Teachinfo> getTeacher() {
        return (List<Teachinfo>)hibernateTemplate.find("from Teachinfo ");
    }
}


TeacherService

package p1.service;

import org.springframework.transaction.annotation.Transactional;
import p1.dao.TeacherDaoBean;
import p1.pojo.Teachinfo;

import java.util.List;

public class TeacherService {
    private TeacherDaoBean teacherDaoBean;
    public TeacherDaoBean getTeacherDaoBean() {
        return teacherDaoBean;
    }

    public void setTeacherDaoBean(TeacherDaoBean teacherDaoBean) {
        this.teacherDaoBean = teacherDaoBean;
    }
    @Transactional(readOnly = false)
    public void addTeacher(Teachinfo teachinfo){
        teacherDaoBean.addTeacher(teachinfo);
    }
    public Teachinfo findTeacher(int teachinfoid){
       return teacherDaoBean.findTeacher(teachinfoid);
    }
    @Transactional(readOnly = false)
    public void updateTeacher(Teachinfo teachinfo){
        teacherDaoBean.updateTeacher(teachinfo);
    }
    @Transactional(readOnly = false)
    public void deleteTeacher(Teachinfo teachinfo){
        teacherDaoBean.deleteTeacher(teachinfo);
    }
    public List<Teachinfo> getTeacher(){
        return teacherDaoBean.getTeacher();
    }
}


applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="mappingResources">
        <list>
            <value>Teachinfo.hbm.xml</value>
        </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                    org.hibernate.dialect.MySQL5Dialect
                </prop>
            </props>
        </property>
    </bean>
    <!-- 事务管理器配置 -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <!-- 启用注解驱动的事务管理 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>


    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/strutstest1"/>
        <property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
        <property name="user" value="root"/>
        <property name="password" value="@y123456"/>
    </bean>

    <bean id="teacherDaoBean" class="p1.dao.TeacherDaoBean">
        <property name="hibernateTemplate" ref="hibernateTemplate"/>
    </bean>
    <bean id="teacherService" class="p1.service.TeacherService">
        <property name="teacherDaoBean" ref="teacherDaoBean"/>
    </bean>

    <bean id="addTeacherAction" class="p1.action.AddTeacherAction">
        <property name="teacherService" ref="teacherService"/>
    </bean>
    <bean id="deleteTeacherAction" class="p1.action.DeleteTeacherAction">
        <property name="teacherService" ref="teacherService"/>
    </bean>
    <bean id="findTeacherAction" class="p1.action.FindTeacherAction">
        <property name="teacherService" ref="teacherService"/>
    </bean>
    <bean id="lookTeacherAction" class="p1.action.LookTeacherAction">
        <property name="teacherService" ref="teacherService"/>
    </bean>
    <bean id="updateTeacherAction" class="p1.action.UpdateTeacherAction">
        <property name="teacherService" ref="teacherService"/>
    </bean>
</beans>




5.运行截图

6.致此,如有误解,不吝斧正,与君共勉

标签:xml,teachinfo,teacherService,项目分析,简易,jsp,ssh,Teachinfo,public
From: https://blog.csdn.net/y25861/article/details/139423318

相关文章

  • tg机器人怎么做简单:快速上手tg机器人制作的简易指南
    对于初学者来说,制作一个TG机器人可能会显得有些复杂。但是,只要掌握了一些基本的步骤和技巧,你就可以轻松地上手并制作出属于自己的TG机器人。本文将为你提供一个简易的指南。一、明确需求在开始制作机器人之前,你需要明确你的需求。专属定制前往TG&broang,&改成@即可打造你的完......
  • C++代码实现一个简易http服务端,返回给客户端一张图片
    注意事项sprintf读取字符串时,遇到\0会结束,所以不能用sprintf来读取*pictureBuffervoid*memcpy(void*str1,constvoid*str2,size_tn),str2会覆盖str1里的内容代码#include<func.h>charpictureBuffer[150*1024];charbuffer[200*1024];intmain(){in......
  • 简易PC蜜罐
    蜜罐(PC终端版):从防守方的视角,利用欺骗伪装技术,实现主动对抗,及时诱捕、发现、处置、溯源,甚至反制攻击者。蜜罐作用一般是直接放入恶意程序,点击运行的,所以PC蜜罐需要起到的作用:1. 查看攻击者的操作行为,比如是否上传一些扫描工具、漏洞利用工具,进行攻击者画像。2.获取攻击......
  • PsShutdown 工具的基本用法和操作流程,帮助他们在远程管理中更方便地实现计算机的关机
    PsShutdown是PSTools工具集中的一款工具,用于远程关闭或重启计算机。以下是PsShutdown工具的初级应用大纲示例:PsShutdown初级应用大纲工具介绍简要介绍PsShutdown工具的作用和功能,以及如何使用它来远程关闭或重启计算机。安装与配置指导用户如何下载、安装和......
  • VS Code / Pycharm配置SSH远程开发(免密登录)
    概述下载vscode:微软官方自行安装配置服务器ip、设置免密登录;生成公钥私钥本地电脑打开CMD窗口,输入ssh-keygen-trsa-C任意字符命令后,一路回车,就会生成RSA密钥对例如ssh-keygen-trsa-Cking在本地电脑的C:\Users\[user_name]\.ssh文件夹下可以查看到刚生成的RSA......
  • SSH远程连接Linux服务器
    1.1SSH(SecureShell)是一种网络协议,用于加密方式远程登录到服务器。以下是通过SSH连接Linux服务器的基本步骤:安装SSH客户端:Windows10及以上版本自带了OpenSSH客户端安装SSH服务端:在服务器端安装OpenSSH,需要在服务器终端进行。#安装sshsudoaptinstallopenssh-server......
  • 前端环境配置(后端使用前端版,简易版非专业前端)
    声明本人不是专业做前端的,只是平常开发有时候需要运行前端代码,记录一下配置环境。安装nvmnvm即(nodeversionmanager),好处是方便切换node.js版本。自己网上下载安装包即可,傻瓜式安装。安装注意事项要卸载掉现有的nodejs提示选择nvm和nodejs目录时,一定要避......
  • SSH批量连接改密码
    改ip范围#-*-coding:gbk-*-importparamikoimportsysname=sys.argv[1]passwd=sys.argv[2]new_passwd=sys.argv[3]ip_list=[]foriinrange(1,255):#[1,254]ip_list.append(f"192.168.1.{i}")foripinip_list:try:......
  • 轻松学AI:数字人系统源码部署简易教程“
    随着短视频领域的迅猛发展,数字化概念已经成为我们生活中不可或缺的一部分。在数字化的大潮中,数字人源码部署(源码部署:ai6ai69)成为了一个热门的商业风口项目。很多企业和个人创业者开始关注并探索如何选择适合自己的数字人源码部署方案。在选择数字人系统源码厂家时,我们需要明......
  • python pip install git+ssh
    网上比较容易找到的是pipinstallgit+https://github.com/waketzheng/fastapi-cdn-host.git这种方式如果电脑未配置或没启用外网加速器,这种方式简直慢得像蜗牛,改用ssh则会块很多很多:一般情况pipinstallgit+ssh://[email protected]/waketzheng/fastapi-cdn-host.git即:只需把h......