JAVA:后端框架-将servlet+jsp改为springboot+jsp需要做什么

目录

POJO(作为实体): 添加注释@Entity @Id

 DAO(作为存储库):使用Spring Boot时,不需要具体的DAO实现或JdbcUtils

COMMON(应用配置):JdbcUtils 与 JdbcTemplate bean(放入config包)

exception(自定义异常)

sercurity

servlet :换为controller


操作                         servlet                          springboot
改包名(可改可不改)commonconfig
添加注解pojopojo
添加注解serviceservice
添加注解exceptionexception
替换servletcontroller
添加注解daodao
添加注解sercuritysercurity

POJO(作为实体): 添加注释@Entity @Id

import javax.persistence.Entity;
import javax.persistence.Id;@Entity
public class EasUser {@Idprivate Long id;private String username;private String password; // 考虑使用散列存储密码以提高安全性// getters 和 setters
}

 DAO(作为存储库):使用Spring Boot时,不需要具体的DAO实现JdbcUtils

在Spring Boot中使用Spring Data JPA时,你通常不需要像传统方式那样实现数据访问对象(DAO)的具体实现类,例如你提到的`EasUserDaoImpl`。Spring Data JPA通过使用接口继承`JpaRepository`或`CrudRepository`来自动化许多常见的数据访问模式,从而使得手动实现DAO层变得多余。下面我将介绍如何用Spring Data JPA接口替代`EasUserDaoImpl`的实现。

### 步骤 1: 创建接口继承JpaRepository

(DAO包)你首先需要创建一个接口,这个接口将继承`JpaRepository`,该接口提供了丰富的数据访问方法,包括基本的CRUD操作和分页支持。

import org.springframework.data.jpa.repository.JpaRepository;public interface EasUserDao extends JpaRepository<EasUser, Long> {// 在这里可以添加自定义的查询方法
}

### 步骤 2: 定义实体类

POJO包:确保你的`EasUser`类使用了JPA注解,正确映射到数据库表。

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;@Entity
@Table(name = "eas_user")
public class EasUser {@Idprivate Long id;private String username;private String password;// getters 和 setters
}

### 步骤 3: 使用Repository

(Service包)一旦你定义了`EasUserDao`接口,你可以在服务层直接自动注入这个接口,并使用它来进行数据库操作,而无需编写任何实现代码。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class EasUserService {@Autowiredprivate EasUserDao easUserDao;public EasUser findUserById(Long id) {return easUserDao.findById(id).orElse(null);}public EasUser saveUser(EasUser user) {return easUserDao.save(user);}// 其他业务逻辑方法
}

这样,你就可以删除原有的`EasUserDaoImpl`类,因为所有的数据访问逻辑现在都通过Spring Data JPA自动处理了。这种方式简化了代码,减少了错误,并提高了开发效率。

### 步骤 4: 配置数据源

最后,确保在你的Spring Boot应用程序中配置了合适的数据源和JPA属性,通常这些配置在`application.properties`或`application.yml`文件中设置。

spring.datasource.url=jdbc:mysql://localhost:3306/yourDatabase
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

这样,你的Spring Boot应用就会使用Spring Data JPA来管理`EasUser`的数据访问逻辑,无需手动实现任何DAO层的代码。如果有任何特定的查询需求,可以在`EasUserDao`接口中定义自定义查询方法。

COMMON(应用配置):JdbcUtils 与 JdbcTemplate bean(放入config包)

JpaRepository处理了大多数常见的数据访问模式,如果需要针对JDBC的特定配置或工具,可以在配置中配置一个JdbcTemplate bean(一般不需要,可以不用增加)

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;import javax.sql.DataSource;@Configuration
public class JdbcConfig {@Beanpublic DataSource dataSource() {DriverManagerDataSource dataSource = new DriverManagerDataSource();dataSource.setDriverClassName("com.mysql.jdbc.Driver");dataSource.setUrl("jdbc:mysql://localhost:3306/yourDatabase");dataSource.setUsername("username");dataSource.setPassword("password");return dataSource;}@Beanpublic JdbcTemplate jdbcTemplate(DataSource dataSource) {return new JdbcTemplate(dataSource);}
}

exception(自定义异常)

要将一个自定义异常,如`EasUserNotFoundException`,整合到你的Spring Boot应用程序中,你可以在服务层或控制器层使用它来处理特定的异常情况。例如,在用户查询中,如果找不到指定的用户,可以抛出这个异常。这种方法可以帮助你的应用程序更清晰地处理错误和异常情况。

### 步骤 1: 定义自定义异常类

(exception包)假设你已经有一个名为`EasUserNotFoundException`的异常类。这个类应该是`RuntimeException`的子类,并且可以包含一个接受错误信息的构造函数。例如:

public class EasUserNotFoundException extends RuntimeException {public EasUserNotFoundException(String message) {super(message);}
}

### 步骤 2: 在服务层使用异常

在你的服务层,特别是在需要抛出异常的地方,你可以使用这个自定义异常。例如,在查找用户时,如果用户不存在,则抛出`EasUserNotFoundException`。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class EasUserService {@Autowiredprivate EasUserDao easUserDao;public EasUser findUserById(Long id) {return easUserDao.findById(id).orElseThrow(() -> new EasUserNotFoundException("User with ID " + id + " not found."));}
}

### 步骤 3: 异常处理

在Spring Boot中,你可以使用`@ControllerAdvice`或`@RestControllerAdvice`来创建一个全局异常处理器。这个处理器可以捕获`EasUserNotFoundException`并返回适当的响应。

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;@RestControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(EasUserNotFoundException.class)@ResponseStatus(HttpStatus.NOT_FOUND)public String userNotFoundExceptionHandler(EasUserNotFoundException ex) {return ex.getMessage();}
}

这样,每当`EasUserNotFoundException`被抛出时,你的Spring Boot应用将会捕获这个异常并返回一个HTTP 404状态码,以及一个描述性的错误消息。

### 步骤 4: 配置和测试

确保你的Spring Boot应用程序配置正确,并进行适当的测试,以验证当用户不存在时,异常能够被正确地捕获和处理。

通过这种方式,你可以将`EasUserNotFoundException`有效地整合进你的Spring Boot应用程序中,增强错误处理的清晰度和效率。

sercurity

在Spring Boot中整合Apache Shiro安全框架,以下是一个使用Spring Boot和Shiro的示例配置。

### 1. Shiro配置类(ShiroConfig.java)增加注解@Configuration @Bean

(config包)这个配置类负责设置Shiro的核心组件,如安全管理器、会话管理器和自定义Realm。

import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.spring.web.config.DefaultShiroFilterChainDefinition;
import org.apache.shiro.spring.web.config.ShiroFilterChainDefinition;
import org.apache.shiro.spring.web.config.ShiroWebConfiguration;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class ShiroConfig {@Beanpublic SecurityManager securityManager(MyCustomRealm myCustomRealm) {DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();securityManager.setRealm(myCustomRealm);return securityManager;}@Beanpublic ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();shiroFilterFactoryBean.setSecurityManager(securityManager);shiroFilterFactoryBean.setLoginUrl("/login");shiroFilterFactoryBean.setUnauthorizedUrl("/unauthorized");ShiroFilterChainDefinition filterChainDefinition = new DefaultShiroFilterChainDefinition();filterChainDefinition.addPathDefinition("/logout", "logout");filterChainDefinition.addPathDefinition("/**", "authc");shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinition.getFilterChainMap());return shiroFilterFactoryBean;}
}

### 2. 自定义Realm类(MyCustomRealm.java)增加注解@Component

(sercurity包)这个类是Shiro进行身份验证和授权的核心。你需要继承`AuthorizingRealm`并实现相应的方法来进行用户的身份验证和授权。

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.springframework.stereotype.Component;@Component
public class MyCustomRealm extends AuthorizingRealm {@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {// 实现用户授权逻辑return null;}@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {// 实现用户身份验证逻辑String username = (String) token.getPrincipal();// 从数据库或其他地方获取用户信息if ("known-user".equals(username)) {return new SimpleAuthenticationInfo(username, "password", getName());}throw new AuthenticationException("User not found");}
}

servlet :换为controller

@RestController
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/login")public ResponseEntity<?> loginUser(@RequestParam String username, @RequestParam String password) {EasUser user = userService.loginUser(username, password);if (user != null) {return ResponseEntity.ok(user);} else {return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法学习(5)-图的遍历

目录 什么是深度和广度优先 图的深度优先遍历-城市地图 图的广度优先遍历-最少转机 什么是深度和广度优先 使用深度优先搜索来遍历这个图的过程具体是&#xff1a; 首先从一个未走到过的顶点作为起始顶点&#xff0c; 比如以1号顶点作为起点。沿1号顶点的边去尝试访问其它未…

TensorFlow轻松入门(二)——小案例:ANN构建一个异或运算的模型

异或运算&#xff1a; 位与位进行比较&#xff0c;相同则结果为0&#xff1b;不同则结果为1。 实现步骤 构建Feature与Label数据 创建顺序模型 指定模型的第一层&#xff0c;线性模型 添加激活函数&#xff08;需要增加多个隐藏层&#xff09; 模型编译 模型训练 模型预…

提升编码技能:学习如何使用 C# 和 Fizzler 获取特价机票

引言 五一假期作为中国的传统节日&#xff0c;也是旅游热门的时段之一&#xff0c;特价机票往往成为人们关注的焦点。在这个数字化时代&#xff0c;利用爬虫技术获取特价机票信息已成为一种常见的策略。通过结合C#和Fizzler库&#xff0c;我们可以更加高效地实现这一目标&…

2024年---蓝桥杯网络安全赛道部分WP

一、题目名称&#xff1a;packet 1、下载附件是一个流量包 2、用wireshark分析&#xff0c;看到了一个cat flag的字样 3、追踪http数据流&#xff0c;在下面一行看到了base64编码。 4、解码之后得到flag 二、题目名称&#xff1a;cc 1、下载附件&#xff0c;打开是一个html …

Docker构建LNMP部署WordPress

前言 使用容器化技术如 Docker 可以极大地简化应用程序的部署和管理过程&#xff0c;本文将介绍如何利用 Docker 构建 LNMP 环境&#xff0c;并通过部署 WordPress 来展示这一过程。 目录 一、环境准备 1. 项目需求 2. 安装包下载 3. 服务器环境 4. 规划工作目录 5. 创…

ubuntu查看libc版本

查看版本 查看ldd ldd --version查看libcxx strings /usr/lib/x86_64-linux-gnu/libstdc.so.6 | grep GLIBCXX查看libc getconf GNU_LIBC_VERSION # 或 strings /usr/lib/x86_64-linux-gnu/libc.so.6 | grep GLIBC参考 glibcubuntu20.04升级GLIBC高版本方法gcc编译静态库到…

CAPS Wizard for Mac:打字输入辅助应用

CAPS Wizard for Mac是一款专为Mac用户设计的打字输入辅助应用&#xff0c;以其简洁、高效的功能&#xff0c;为用户带来了全新的打字体验。 CAPS Wizard for Mac v5.3激活版下载 该软件能够智能预测用户的输入内容&#xff0c;实现快速切换和自动大写锁定&#xff0c;从而大大…

APP广告变现,开发者对接百度广告联盟,广告变现收益如何?

百度广告联盟属于广告整合平台&#xff0c;类似的还有穿山甲、优量汇、快手联盟等。 百度广告联盟注册流程&#xff1a; 创建账户&#xff1a;填写用户基本信息&#xff0c;如&#xff1a;用户名、密码、邮箱、手机号&#xff1b; 完善财务信息&#xff1a;填写银行账号、开…

OmniReader Pro for Mac:强大且全面的阅读工具

OmniReader Pro for Mac是一款专为Mac用户设计的强大且全面的阅读工具&#xff0c;它集阅读、编辑、管理等多种功能于一身&#xff0c;为用户提供了卓越的阅读体验。 OmniReader Pro for Mac v2.9.5激活版下载 该软件支持多种文件格式的阅读&#xff0c;包括PDF、Word、Excel、…

pycharm配置wsl开发环境(conda)

背景 在研究qanything项目的过程中&#xff0c;为了进行二次开发&#xff0c;需要在本地搭建开发环境。然后根据文档说明发现该项目并不能直接运行在windows开发环境&#xff0c;但可以运行在wsl环境中。于是我需要先创建wsl环境并配置pycharm。 wsl环境创建 WSL是“Windows Su…

新时代写作与互动:《一本书讲透 Elasticsearch》读者群的创新之路

1、《一本书讲透 Elasticsearch》销售最近进展汇报 给大家同步一下《一本书讲透 Elasticsearch》图书的进展情况&#xff0c;本周五&#xff08;2024年4月26日&#xff09;&#xff0c;出版社编辑老师反馈图书相关销量进展&#xff1a; 预计全网销量 1000 册&#xff0c;发货量…

计算机系统概述试题

01&#xff0e;完整的计算机系统应包括()。 A.运算器、存储器、控制器 B.外部设备和主机 C.主机和应用程序 D.配套的硬件设备和软件系统 02.冯诺依曼机的基本工作方式是()。 A.控制流驱动方式 B.多指令多数据流方式 C.微程序控制方式 D.数据流驱动方式 03.下列()是冯诺依曼机…

OpenHarmony语言基础类库【@ohos.xml (xml解析与生成)】

将XML文本转换为JavaScript对象、以及XML文件生成和解析的一系列接口。 说明&#xff1a; 本模块首批接口从API version 8开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import xml from ohos.xml; XmlSerializer XmlSerializer接口…

FPGA实现图像处理之【直方图均衡-寄存器版】

FPGA实现直方图统计 一、图像直方图统计原理 直方图的全称为灰度直方图&#xff0c;是对图像每一灰度间隔内像素个数的统计。即对一张图片中每隔二灰度值的像素数量做统计&#xff0c;然后以直方图的形式展现出来。图下的亮暗分布在直方图中就可以一目了然&#xff0c;直方图…

Spark核心名词解释与编程

Spark核心概念 名词解释 1)ClusterManager&#xff1a;在Standalone(上述安装的模式&#xff0c;也就是依托于spark集群本身)模式中即为Master&#xff08;主节点&#xff09;&#xff0c;控制整个集群&#xff0c;监控Worker。在YARN模式中为资源管理器ResourceManager(国内…

paddlehub的简单应用

1、下载安装 pip install paddlehub -i https://pypi.tuna.tsinghua.edu.cn/simple 报错&#xff1a; Collecting onnx<1.9.0 (from paddle2onnx>0.5.1->paddlehub)Using cached https://pypi.tuna.tsinghua.edu.cn/packages/73/e9/5b953497c0e36df589fc60cc6c6b35…

Redux数据流架构

Redux的难点是理解它对于数据修改的规则, 下图动态展示了在整个数据的修改中&#xff0c;数据的流向 Redux代码被分为三个核心的概念&#xff0c;三个概念分别是: state: 一个对象 存放着我们管理的数据action: 一个对象 用来描述你想怎么改数据reducer: 一个函数 根据action的…

万兆以太网MAC设计(11)完整UDP协议栈仿真

文章目录 前言一、模块接口二、IP模块与ARP模块之间的联系三、整体协议栈仿真总结&#xff1a; 前言 目前除了巨帧处理逻辑之外&#xff0c;所有的准备工作都已经结束了&#xff0c;先进行整体的功能验证。 一、模块接口 所有模块接口皆采用AXIS数据流的形式&#xff0c;其中…

leetcode03-Longest Substring Without Repeating Characters

题目 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 分析 很直观的思路就是遍历字符串&#xff0c;如果子串中没有重复元素…

Golang实现一个批量自动化执行树莓派指令的软件(9)辅助模块-调用Ping指令判定在线

简介 基于 Golang实现一个批量自动化执行树莓派指令的软件(8)辅助模块-远程IP端口是否开放连接(TCP) 和 Golang实现一个批量自动化执行树莓派指令的软件(7)辅助模块-本地活动网络&#xff0c; 这两篇&#xff0c; 再新增使用系统ping指令判定设备是否在线。 环境描述 运行环境:…