предисловие
В этой статье в основном говорится оSpringBootИнтегрироватьJspа такжеSpringBootИнтегрироватьThymeleaf, чтобы реализовать простой пример проекта добавления, удаления, изменения и запроса пользователей. Как было сказано ранее, существует три проекта, два из которых интегрируются отдельно, а один объединяет их вместе. Если вам нужен один из них, просто прочитайте введение в соответствующем разделе. Если вам нужен исходный код проекта, вы можете перейти прямо вниз и скачать код проекта по ссылке.
SpringBoot интегрирует Jsp
подготовка к разработке
Требования к окружающей среде JDK: 1,7 или вышеSQL: MySql
Здесь нам нужно создать пользовательскую таблицу в mysql для хранения информации о пользователе.Скрипт базы данных выглядит следующим образом:
CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',
`name` varchar(10) DEFAULT NULL COMMENT '姓名',
`age` int(2) DEFAULT NULL COMMENT '年龄',
`password` varchar(24) NOT NULL COMMENT '密码',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8
После создания новой таблицы давайте создадим проект. Наш проект заключается в создании обычного веб-проекта через maven. После создания проекта нам нужно скачать соответствующий jar-пакет, а затем выполнить соответствующую разработку. Для этих пакетов jar мы можем добавить jar-файлы, связанные с SpringBoot и Jsp, в файл pom.xml. В нем написаны соответствующие примечания, поэтому я не буду вдаваться здесь в подробности.Зависимости Maven следующие:
<dependencies>
<!-- Spring Boot Web 依赖 核心 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot 热部署 class文件之后会自动重启 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<!-- Spring Boot Test 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Spring Boot JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- Spring Boot Mybatis 依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--fastjson 相关jar -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson}</version>
</dependency>
<!--JSP 依赖 -->
<!-- servlet依赖. -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- tomcat的支持.-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
После загрузки соответствующего пакета Jar давайте подтвердим структуру проекта. Во-первых, это описание пакета, связанного с фоном:
src/main/java
com.pancm.web - Controller 层
com.pancm.dao - 数据操作层 DAO
com.pancm.pojo- 实体类
com.pancm.service - 业务逻辑层
Application - 应用启动类
src/main/resources
application.properties - 应用配置文件,应用启动会自动读取配置
Инструкции по хранению файлов, связанные с внешним интерфейсом:
src/main/webapp
WEB-INF - web.xml web相关的核心配置
WEB-INF/jsp - JSP文件的存放路径
Общая схема структуры проекта:
После подтверждения структуры проекта мы добавим соответствующую конфигурацию. только что вapplication.propertiesПросто добавьте соответствующую конфигурацию. Настройка источника данных аналогична предыдущей, следует отметить, чтоJspсоответствующая конфигурация. Поскольку шаблон по умолчанию, поддерживаемый SpringBoot,Thymeleaf, поэтому здесь нам нужно внести соответствующие изменения.
Конфигурация выглядит следующим образом:
## 编码
banner.charset=UTF-8
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8
## 端口
server.port=8088
## 数据源
spring.datasource.url=jdbc:mysql://localhost:3306/springBoot?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
## JSP配置
# 页面默认前缀
spring.mvc.view.prefix=/WEB-INF/jsp/
# 响应页面默认后缀
spring.mvc.view.suffix=.jsp
написание кода
По сути, код здесь в основном такой же, как и в предыдущей статье, с той лишь разницей, что здесь я использую JPA для работы с базой данных (то есть, кстати, использование фреймворка JPA).
Первый — это класс сущностей, поскольку здесь используется JPA, он немного отличается от предыдущего и добавлены некоторые аннотации.Entity: указывает, что это класс сущностей.Table: имя таблицы данных, отображаемой этим классом сущностей.Column: задает свойства поля, nullable указывает, не является ли оно пустым, а unique указывает, является ли оно уникальным.
Тогда код класса сущности выглядит следующим образом:
@Entity
@Table(name = "t_user")
public class User {
/** 编号 */
@Id
@GeneratedValue
private Long id;
/** 姓名 */
@Column(nullable = false, unique = true)
private String name;
/** 密码*/
@Column(nullable = false)
private String password;
/** 年龄 */
@Column(nullable = false)
private Integer age;
//getter和setter略
}
Поскольку используется JPA, слой dao должен наследовать толькоJpaRepositoryЭтого класса достаточно, вам нужно указать класс сущности и тип первичного ключа.Код слоя dao выглядит следующим образом:
@Mapper
public interface UserDao extends JpaRepository<User, Long>{
}
Бизнес-уровень можно вызывать, как и раньше.Хотя используется JPA, метод также очень прост.Для добавления и изменения используйте save,delete – удаление, findOne – поиск по идентификатору, findAll – запрос всех и так далее.
Код службы выглядит следующим образом:
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public boolean addUser(User user) {
boolean flag=false;
try{
userDao.save(user);
flag=true;
}catch(Exception e){
System.out.println("新增失败!");
e.printStackTrace();
}
return flag;
}
@Override
public boolean updateUser(User user) {
boolean flag=false;
try{
userDao.save(user);
flag=true;
}catch(Exception e){
System.out.println("修改失败!");
e.printStackTrace();
}
return flag;
}
@Override
public boolean deleteUser(Long id) {
boolean flag=false;
try{
userDao.delete(id);
flag=true;
}catch(Exception e){
System.out.println("删除失败!");
e.printStackTrace();
}
return flag;
}
@Override
public User findUserById(Long id) {
return userDao.findOne(id);
}
@Override
public List<User> findAll() {
return userDao.findAll();
}
}
Когда дело доходит до уровня управления, здесь по-прежнему предоставляется интерфейс для вызова Jsp, но аннотации классов здесь не могут использовать предыдущие.RestControllerЭта аннотация, эта аннотация возвращает данные в формате JSON, но нам нужно перейти интерфейс, когда мы возвращаем его, поэтому вы должны использоватьControllerэта аннотация. Если формат данных, который вы хотите вернуть в методе, — json, добавьте его в метод.ResponseBodyЭта аннотация подойдет.
Код уровня управления выглядит следующим образом:
@Controller
public class UserRestController {
@Autowired
private UserService userService;
@RequestMapping("/hello")
public String hello() {
return "hello";
}
@RequestMapping("/")
public String index() {
return "redirect:/list";
}
@RequestMapping("/list")
public String list(Model model) {
System.out.println("查询所有");
List<User> users=userService.findAll();
model.addAttribute("users", users);
return "user/list";
}
@RequestMapping("/toAdd")
public String toAdd() {
return "user/userAdd";
}
@RequestMapping("/add")
public String add(User user) {
userService.addUser(user);
return "redirect:/list";
}
@RequestMapping("/toEdit")
public String toEdit(Model model,Long id) {
User user=userService.findUserById(id);
model.addAttribute("user", user);
return "user/userEdit";
}
@RequestMapping("/edit")
public String edit(User user) {
userService.updateUser(user);
return "redirect:/list";
}
@RequestMapping("/toDelete")
public String delete(Long id) {
userService.deleteUser(id);
return "redirect:/list";
}
}
функциональный тест
Внедрение back-end кода здесь, про front-end JSP код много говорить не буду (главная причина в том, что интерфейс слишком уродлив...), мы непосредственно запускаем проект и проверяем эффект. Запустите проект и введите в браузере: http://localhost:8088/listОсновной интерфейс:
Интерфейс после добавления части данных:
Другие модификации и удаления также могут быть реализованы, поэтому я не буду отображать их здесь по одному. Это конец интеграции SpringBoot с Jsp.
SringBoot интегрирует Thymeleaf
Ссылка на проект: http://www.ityouknow.com/springboot/2017/09/23/spring-boot-jpa-thymeleaf-curd.html
Введение в Тимелеаф
Thymeleaf — это механизм шаблонов, который можно использовать для веб-приложений и других приложений, он может работать с XML/XHTML/HTML5, JavaScript, CSS и даже с текстовыми файлами.
Использование тимьяна
Thymeleaf не очень хорошо подходит для личного использования, и это не является основным содержанием этой статьи.Подробности вы можете найти в официальной документации. https://www.thymeleaf.org/documentation.html
подготовка к разработке
В основном это похоже на описанную выше интеграцию SringBoot с Jsp, поэтому я не буду здесь вдаваться в подробности.
Поскольку механизм шаблонов SpringBoot по умолчанию — Thymeleaf, зависимости Maven нужно только добавить зависимость Thymeleaf к исходному проекту springBoot.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
application.propertiesКонфигурация этой части может быть в основном такой же, как и предыдущий проект, и нужно только обратить внимание наspring.thymeleaf.cacheКонфигурация, когда она ложна, кеш Thymeleaf закрывается.После изменения интерфейса он автоматически перезапустится и вступит в силу.
Большая разница между интеграцией SringBoot Thymeleaf и интеграцией SringBoot Jsp заключается в том, что файлы ресурсов Thymeleaf помещаются вsrc/main/resourcesкаталог, Jsp помещается вsrc/main/webappПод содержанием. Статический каталог в каталоге ресурсов используется для размещения статического содержимого, такого как изображения css, js и jpg. Каталог templates используется для размещения шаблонов страниц, используемых проектом, то есть файла **.html**.
Схема структуры проекта выглядит следующим образом:
Код в основном такой же, как и Jsp интеграции SringBoot, поэтому я не буду здесь вдаваться в подробности.
функциональный тест
Запустите проект и введите в браузере: http://localhost:8085Основной интерфейс:
После изменения данных пользователя:
Могут быть реализованы и другие функции, поэтому текстур здесь больше не будет. Это конец интеграции SpringBoot с Thymeleaf.
SpringBoot интегрирует Jsp и Thymeleaf
Примечание:Это новый проект, добавленный позже. SpringBoot интегрирован отдельноJspиThymeleafВсе отлично, без проблем. Но после того, как мы вместе, есть изменения, потому что механизм шаблонов SpringBoot по умолчаниюThymeleaf, плюсJSPПосле этого механизм шаблонов JSP не вступит в силу. Но если вы хотите использовать шаблон JSP, отключите его, чтобыThymeleaf, хотя это может быть достигнуто путем полиморфного изменения конфигурации, но это кажется слишком громоздким. Поэтому я исследовал и нашел способ сосуществовать.
Отличия от предыдущих двух проектов заключаются в следующем:
- предыдущийJspиThymeleafконфигурация находится вapplication.propertiesфайл, здесь я изменил их конфигурацию на код, чтобы получить его.
2. ДоThymeleafСоответствующие документы размещены вsrc/main/resourcesкаталог, перейдите сюда в каталог WEB-INF на том же уровне, что и предыдущая папка jsp.
3. Добавьте контрольный слой, чтобы строго разграничить доступJspиThymeleafмаршрут из. доступJspпрефикс пути плюсjsp,доступThymeleafпрефикс плюсtemplates.
Тогда новый код конфигурации выглядит следующим образом:
@Configuration
@EnableWebMvc
@ComponentScan
public class WebConfig extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/");
resolver.setSuffix(".jsp");
resolver.setViewNames("jsp/*");
resolver.setOrder(2);
return resolver;
}
@Bean
public ITemplateResolver templateResolver() {
SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
templateResolver.setTemplateMode("HTML5");
templateResolver.setPrefix("/WEB-INF/");
templateResolver.setSuffix(".html");
templateResolver.setCharacterEncoding("utf-8");
templateResolver.setCacheable(false);
return templateResolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
return templateEngine;
}
@Bean
public ThymeleafViewResolver viewResolverThymeLeaf() {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine());
viewResolver.setCharacterEncoding("utf-8");
viewResolver.setViewNames(new String[]{"thymeleaf/*"});
viewResolver.setOrder(1);
return viewResolver;
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
super.addResourceHandlers(registry);
}
}
Структура проекта следующая:
функциональный тест
Введите в браузере: http://localhost:8089/list ПроверятьThymeleafИнтерфейс шаблона
Введите в браузере: http://localhost:8089/list2 ПроверятьJSPИнтерфейс шаблона
Видно, что он успешно интегрирован
разное
На этом интеграция Jsp и Thymeleaf со SpringBoot завершена. SpringBoot интегрирует адрес проекта проекта Jsp: https://github.com/xuwujing/springBoot-study/tree/master/springboot-jsp-jpa SpringBoot интегрирует адрес проекта Thymeleaf: https://github.com/xuwujing/springBoot-study/tree/master/springboot-thymeleaf Адрес проекта SpringBoot, объединяющего Jsp и Thymeleaf: https://github.com/xuwujing/springBoot-study/tree/master/springboot-jsp-thymeleaf
Оригинал не просто, если вы чувствуете себя хорошо, я надеюсь дать рекомендацию! Ваша поддержка - самая большая мотивация для моего письма! Уведомление об авторских правах: Автор: ничтожество Источник блога сада: http://www.cnblogs.com/xuwujing Источник CSDN: http://blog.csdn.net/qazwsxpcm Источник личного блога: http://www.panchengming.com