gpt4 book ai didi

java - 使用 Maven 构建 Spring Boot 项目

转载 作者:行者123 更新时间:2023-12-02 03:17:50 25 4
gpt4 key购买 nike

更新:

谢谢大家的回答。我仍然有问题,因为它没有返回我希望的结果。是不是文件放置的问题?它们的组织方式如下:i63.tinypic.com/2by8g2.png

提前再次感谢。

<小时/>

我正在学习如何使用 Spring Boot 和 JDBC(不使用 JPA)创建一个 Web 应用程序;我在做这件事时遇到了几个问题。我不明白如何正确创建 Controller ,以及如何使其返回我想要的 .jsp 页面。我搜索了很多很多解决方案,但就是找不到合适的解决方案。这是我的 pom.xml:

    <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>---myprojectname</groupId>
<artifactId>tesieasy</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>

<name>tesieasy</name>
<description>Demo project for Spring Boot</description>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.1.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>


</project>

我的应用程序属性:

> spring.h2.console.enabled=true
server.port=8000
spring.view.prefix=/WEB-INF/jsp/
spring.view.suffix=.jsp

我的ServetInizializer:

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;

public class ServletInitializer extends SpringBootServletInitializer {

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(TesieasyApplication.class);
}

}

我的实体:

import java.util.Date;
import java.text.SimpleDateFormat;

public class Journal {

private Long id;
private String title;
private Date created;
private String summary;
private SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");

/** costruttori**/
public Journal() {}

public Journal(Long id, String title, String summary, Date date){
this.id = id;
this.title = title;
this.summary = summary;
this.created = date;
}

/** getters and setters omitted **/

我的服务:

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

import name of my package-.entity.Journal;


@Service
public class JournalService {
private static final Logger log = LoggerFactory.getLogger(JournalService.class);

@Autowired
JdbcTemplate jdbcTemplate;

public void insertData() {
log.info("> Table creation");
jdbcTemplate.execute("DROP TABLE JOURNAL IF EXISTS");
jdbcTemplate
.execute("-cut for brevity-");
log.info("> Done.");
}

public List<Journal> findAll() {
List<Journal> entries = new ArrayList<>();
jdbcTemplate
.query("SELECT * FROM JOURNAL",
new Object[] {}, (rs, row) -> new Journal(rs.getLong("id"), rs.getString("title"),
rs.getString("summary"), new Date(rs.getTimestamp("created").getTime())))
.forEach(entry -> entries.add(entry));
return entries;

}

public int countEntries() {
int rowCount = this.jdbcTemplate.queryForObject("SELECT count(*) FROM JOURNAL", Integer.class);
return rowCount;

}

public Journal insertJournal() {
Journal journal = null;
this.jdbcTemplate.update(
-cut for brevity-");
return journal;

}
}

我的 .jsp 页面之一:

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>A title</title></head>
<body>
Hello! JSP is working fine!
</body>
</html>

最后是我的 Controller :

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import *my package name.entity.Journal;
import *my package name.service.JournalService;

@RestController
public class HelloController {

@Autowired
private JournalService journalService;

@RequestMapping(value="/")
public String home() {
return "home";
}

@RequestMapping("/greeting")
public String greeting() {
return "greeting";
}


@RequestMapping("/findAll")
public String index() {
List<Journal> all;
all = journalService.findAll();
return all.toString();
}

@RequestMapping("/count")
public int countElements() {
int count;
count = journalService.countEntries();
return count;
}

@RequestMapping("/insert")
public Journal insertElements() {
Journal insert;
insert = journalService.insertJournal();
return insert;
}

}

我的理解:

  • 我不需要 web.xml 文件
  • 如何将服务与 Controller 连接(即使我的 findAll 方法将我的数据返回到 {},我也必须了解如何正确编写它)

我不明白的是:

  • 为什么它没有正确链接到我的 JSP 页面 - 我需要什么?
  • 我需要模型和 View 吗?

我希望您能给我一些适合我的范围的建议和/或一些例子。预先感谢并致以最诚挚的问候!

最佳答案

解决方案:

第1步:将@RestController更改为@Controller

第2步:对于要返回 View 的URL(例如greeting.jsp)

@RequestMapping("/greeting")
public String greeting() {
return "greeting";
}

第三步:对于要返回 JSON 对象的 URL,没有 View (可能是 AJAX 调用)

@RequestMapping("/findAll")
@ResponseBody
public List<Journal> index() {
List<Journal> all = journalService.findAll()
return all;
}

或者这个

@RequestMapping("/findAll")
@ResponseBody
public Model index(Model model) {
List<Journal> all =journalService.findAll();
model.addAttribute("journalList", all);
return model;
}

第四步:输入您想要 View 和模型的 URL(例如 java 对象)

ref Rob Baily sample code

@RequestMapping("/findAll")
public String index(Model model) {
List<Journal> all;
all = journalService.findAll();
model.addAttribute("journalList", all);
return "listall";
}

您可以使用 ${journalList} 访问 listall.jsp 中的对象

说明:当您在类上使用@RestController时,相当于为类中的每个方法添加@ResponseBody。因此,它将始终在页面上返回一个 object.toString(),而不链接到您的 JSP。

This code uses Spring 4’s new @RestController annotation, which marks the class as a controller where every method returns a domain object instead of a view. It’s shorthand for @Controller and @ResponseBody rolled together. ref: https://spring.io/guides/gs/rest-service/

jsp示例引用:https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-web-jsp

关于java - 使用 Maven 构建 Spring Boot 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40046687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com