多模块springboot项目启动访问不了jsp页面

  被springboot项目maven打包、启动、访问折腾的头都大了,一步一个坑,在解决了所有的问题之后,那种欣喜若狂的心情只有自己能体会,决定要好好记录一下了,废话不多说了,直接进入正题。

问题和排查流程:

为了扩展和规范,搭建的springboot项目是一个多模块项目,于是,问题来了,下面一个个说:

1.项目搭建完成后,application.yml文件配置了mvc视图解析器,写了一个controller测试,发现能进controller方法,但是死活输出不了页面,浏览器报错如下:

上网查了很多资料,有些说springboot整合jsp要通过spring-boot:run方式启动,具体可以参考:https://segmentfault.com/a/1190000009785247

后来我又重新搭建了一个简单的springboot工程(注意:这一次不是多模块项目),通过main方法启动,却又能正常跳转jsp页面,我....

2.看来是多模块工程非得通过spring-boot:run启动,具体原因待有缘人补充,这时候我尝试通过spring-boot:run启动,但是打开maven结构图,发现Plugins下并没有spring-boot插件,原来是因为pom.xml中没有配置spring-boot插件导致的,兴致匆匆的配置了spring-boot plugins,很开心,maven结构图出现了亮眼的spring-boot插件

 

3.然而一切并没有那么顺利,当我执行mvn -package时,居然报错很多类找不到,我....,我就多添加了一个plugin而已啊,有必要这么折磨我么,后来参考网上的文章,添加了<classifier>exec</classifier>这么一个配置,如下:

赶紧试了一把,好了,这次package终于没报错了,然后我就匆忙点击spring-boot:run准备启动项目了,然鹅....

4.启动报错,提示我没有配置mainClass,原来是因为项目中含有main方法的class有点多,springboot有点蒙圈不知道找哪一个,于是在plugin中又加了一个配置<mainClass>com.mmz.WebApplication</mainClass>,指定了主类

 

5.然鹅,还是有问题,启动仍然报错,只不过这次报错不一样了,报classNotFundException,找不到我配置的WebApplication类。。。我很难受呀

6.查资料啊查资料,网上并没有相关文章,后来又怀疑是多模块项目惹的祸,重新用简单的项目试验了一把,结果简单的项目就好好地运行并没有报错,于是仔细检查了一下两个项目的配置,发现启动简单工程时,启动的本身就是web模块,而我启动多模块工程时,运行的是root模块下面的spring-boot插件,怀疑跟这个有关,于是尝试启动了web模块下面的spring-boot:run,妈呀,终于启动成功,并且能正常访问页面了,这一刻把我激动的。。。

 

7.你以为这样就可以了吗??下午试了一把把项目打包成jar的方式,运行java -jar xxx.jar方式启动,启动成功,但是仍然没法访问jsp页面,解压jar包发现根本没有把webapp目录以及其目录下的jsp页面打包进去,因为springboot插件打包默认不会打包自己添加的webapp目录,于是需要在pom.xml下的build标签里指定maven 打包目录如下:

 

这时候重新打包成jar解压,发现打包进了对应的目录下,赶紧访问页面试了一把,结果......嗯,还是不可以,报了同样的错误...

8.查阅资料,最后一步还需要指定spring-boot-maven-plugin的版本为1.4.2.RELEASE,其他版本都不行,据说是springboot的一个bug,于是添加了version后,再试了一把终于可以了。。至此,一个完成的spriongboot+maven,打包+启动终于完整了。最终配置如下:

<build>
		<resources>
			<!-- 打包时将jsp文件拷贝到META-INF目录下-->
			<resource>
				<!-- 指定resources插件处理哪个目录下的资源文件 -->
				<directory>src/main/webapp</directory>
				<!--注意此次必须要放在此目录下才能被访问到-->
				<targetPath>META-INF/resources</targetPath>
				<includes>
					<include>**/**</include>
				</includes>
			</resource>
			<resource>
				<directory>src/main/resources</directory>
				<includes>
					<include>**/**</include>
				</includes>
				<filtering>false</filtering>
			</resource>
			<resource>
				<directory>src/main/java</directory>
				<excludes>
					<exclude>**/*.java</exclude>
				</excludes>
			</resource>
		</resources>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<version>1.4.2.RELEASE</version>
				<configuration>
					<mainClass>com.mmz.WebApplication</mainClass>
				</configuration>
				<executions>
					<execution>
						<goals>
							<goal>repackage</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
		<pluginManagement>
			<plugins>
				<plugin>
					<artifactId>maven-compiler-plugin</artifactId>
					<configuration>
						<source>1.8</source>
						<target>1.8</target>
					</configuration>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>

  nice,接下来就是把自己的项目打好jar包放到腾讯云服务器上运行了。。。

 

转载于:https://www.cnblogs.com/xiaoming0601/p/11077491.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的SSM多模块项目: 1. 首先,创建一个Maven项目,选择一个合适的名称(例如“ssm-multimodule-project”)和位置。在创建时,选择“Create a simple project(创建一个简单的项目)”,并勾选“Create a new module(创建新模块)”选项。 2. 在项目根目录下,创建一个名为“parent”的模块。在“parent”模块下的pom.xml文件中,指定项目的groupId、artifactId和version,并添加以下内容: ```xml <packaging>pom</packaging> <modules> <module>web</module> <module>service</module> <module>dao</module> </modules> <dependencies> <!-- 添加Spring依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.8.RELEASE</version> </dependency> <!-- 添加MyBatis依赖 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.4</version> </dependency> </dependencies> ``` 在这里,我们创建了一个Maven父子模块项目,定义了三个子模块(web、service和dao),并添加了Spring和MyBatis的依赖。 3. 创建一个名为“web”的模块,用于实现Web服务。在“web”模块下的pom.xml文件中,指定项目的groupId、artifactId和version,并添加以下内容: ```xml <packaging>war</packaging> <dependencies> <!-- 添加SpringMVC依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.8.RELEASE</version> </dependency> <!-- 添加JSP依赖 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> </dependencies> ``` 在这里,我们创建了一个War包,添加了SpringMVC和JSP的依赖。 4. 创建一个名为“service”的模块,用于实现服务层。在“service”模块下的pom.xml文件中,指定项目的groupId、artifactId和version,并添加以下内容: ```xml <packaging>jar</packaging> <dependencies> <!-- 添加Spring依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.8.RELEASE</version> </dependency> </dependencies> ``` 在这里,我们创建了一个Jar包,添加了Spring的依赖。 5. 创建一个名为“dao”的模块,用于实现数据访问层。在“dao”模块下的pom.xml文件中,指定项目的groupId、artifactId和version,并添加以下内容: ```xml <packaging>jar</packaging> <dependencies> <!-- 添加MyBatis依赖 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.4</version> </dependency> <!-- 添加MySQL驱动依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.21</version> </dependency> </dependencies> ``` 在这里,我们创建了一个Jar包,添加了MyBatis和MySQL驱动的依赖。 6. 在“web”模块下的src/main/webapp目录下,创建一个名为“WEB-INF”的目录,并在其中创建一个名为“web.xml”的文件。在“web.xml”文件中,添加以下内容: ```xml <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>ssm-multimodule-project</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:application-context.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app> ``` 在这里,我们定义了SpringMVC的DispatcherServlet,并指定了SpringMVC配置文件的位置。 7. 在“web”模块下的src/main/resources目录下,创建一个名为“spring-mvc.xml”的文件,并添加以下内容: ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <mvc:annotation-driven /> <mvc:resources location="classpath:/static/" mapping="/static/**" /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> </beans> ``` 在这里,我们定义了SpringMVC的注解驱动、静态资源访问路径和视图解析器。 8. 在“web”模块下的src/main/resources目录下,创建一个名为“application-context.xml”的文件,并添加以下内容: ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"> <import resource="classpath*:application-context-*.xml" /> </beans> ``` 在这里,我们定义了应用上下文,引入了其他配置文件。 9. 在“service”模块下的src/main/resources目录下,创建一个名为“application-context-service.xml”的文件,并添加以下内容: ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"> <!-- 定义Service组件 --> <bean id="userService" class="com.example.service.UserService"> <property name="userDao" ref="userDao" /> </bean> </beans> ``` 在这里,我们定义了一个UserService组件,并注入了UserDao组件。 10. 在“dao”模块下的src/main/resources目录下,创建一个名为“application-context-dao.xml”的文件,并添加以下内容: ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd"> <!-- 配置MyBatis --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/test" /> <property name="username" value="root" /> <property name="password" value="password" /> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.example.dao" /> </bean> </beans> ``` 在这里,我们定义了MyBatis的数据源、SqlSessionFactory和MapperScannerConfigurer。 11. 在“dao”模块下的src/main/java目录下,创建一个名为“com.example.dao”的包,并在其中创建一个名为“UserDao”的接口和一个名为“UserDaoImpl”的实现类。在“UserDao”接口中定义数据访问方法,如下所示: ```java public interface UserDao { User findUserById(long id); } ``` 在“UserDaoImpl”实现类中,实现“UserDao”接口中的方法,并使用MyBatis的注解来映射SQL语句,如下所示: ```java @Repository public class UserDaoImpl implements UserDao { @Autowired private SqlSession sqlSession; public User findUserById(long id) { return sqlSession.selectOne("com.example.UserMapper.findUserById", id); } } ``` 在这里,我们使用了@Repository注解,将UserDaoImpl组件声明为Spring的Repository组件,以便在其他组件中进行依赖注入。 12. 在“service”模块下的src/main/java目录下,创建一个名为“com.example.service”的包,并在其中创建一个名为“UserService”的类。在“UserService”类中,实现业务逻辑,并注入“UserDao”组件,如下所示: ```java @Service public class UserService { @Autowired private UserDao userDao; public User findUserById(long id) { return userDao.findUserById(id); } } ``` 在这里,我们使用了@Service注解,将UserService组件声明为Spring的Service组件,以便在其他组件中进行依赖注入。 13. 在“web”模块下的src/main/java目录下,创建一个名为“com.example.web”的包,并在其中创建一个名为“UserController”的类。在“UserController”类中,实现对用户数据的访问,并使用SpringMVC的注解来处理HTTP请求和响应,如下所示: ```java @Controller public class UserController { @Autowired private UserService userService; @RequestMapping(value = "/user/{id}", method = RequestMethod.GET) public ModelAndView getUser(@PathVariable long id) { ModelAndView mav = new ModelAndView("user"); User user = userService.findUserById(id); mav.addObject("user", user); return mav; } } ``` 在这里,我们使用了@Controller注解,将UserController组件声明为SpringMVC的Controller组件,以便处理HTTP请求和响应。 14. 在“web”模块下的src/main/webapp/WEB-INF/views目录下,创建一个名为“user.jsp”的文件,并添加以下内容: ```jsp <html> <head> <title>User</title> </head> <body> <h1>User Details</h1> <p>ID: ${user.id}</p> <p>Name: ${user.name}</p> <p>Email: ${user.email}</p> </body> </html> ``` 在这里,我们定义了用户详情页面,用于显示用户的详细信息。 15. 运行项目。在控制台中输入以下命令: ``` mvn clean install tomcat7:run ``` 该命令将编译并打包项目,并启动Tomcat服务器。在浏览器中访问http://localhost:8080/ssm-multimodule-project/user/1,即可查看ID为1的用户的详细信息。 至此,我们已经完成了一个简单的SSM多模块项目。在实际项目中,可能需要添加更多的模块和功能,但是本例提供了一个SSM多模块项目的基本结构和实现方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值