一:使用idea创建一个springboot项目过程就不再说了,注意创建的过程中要选择web组件。直接展示创建好的项目如下:
二:在application-dev.yml 中添加如下属性:
server:
port: 8005
servlet:
context-path: /test
然后写个controller类。
@RestController
public class IndexController {
@GetMapping("hello")
public String test(){
return "Hello!";
}
}
请求测试一下:
三:下面开始JSP访问的过程。因为SpringBoot默认是不支持JSP访问的,所以要想访问JSP手动添加一些依赖:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<!--<scope>provided</scope>-->
</dependency>
注意:<artifactId>tomcat-embed-jasper</artifactId>它的scope默认是provided,因为provided表明该包只在编译和测试的时候用,如果不去掉idea中访问jsp会报404。把它去掉,默认的scope就是compile了,这样最终就会被打包进jar或war中。
四:创建webapp/WEB-INF目录。idea自动生成的项目是没有这个目录的。在其下面再创建存放jsp的目录以及一个jsp.
五:在application.properties中配置资源访问路径:
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
spring.profiles.active=dev
六:请求处理controller
@Controller
public class ProductController {
@Autowired
private PurchaseService purchaseService=null;
@GetMapping("/model")
public ModelAndView index(){
System.out.println("请求到达");
return new ModelAndView("index");
}
@GetMapping("/index")
public String stringIndex(){
System.out.println("请求到达");
return "index";
}
}
测试结果:
原本怕直接添加资源会报404,在pom中添加了如下注释掉的内容,上面所写的结果把下面的内容注释掉仍然能正常访问,所以可以暂时不用添加。
<build>
<resources>
<!--<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/**</include>
</includes>
<filtering>false</filtering>
</resource>-->
<!--<resource>
<directory>src/main/webapp/</directory>
<!–注意此次必须要放在此目录下才能被访问到 –>
<targetPath>META-INF/resources</targetPath>
</resource>-->
</resources>
</build>
-------------------------------------------------------------分割线--------------------------------------------------------------------------------------------------------------
以上为在idea中启动访问jsp,使用的是内嵌的tomcat是没有问题的,但是实际生产中需要把项目部署到外部的tomcat,直接把上面的项目打包发布是不行的。现在我们考虑把项目打成war包部署到外部tomcat中。
一:设置项目打包类型为war。
在pom.xml中添加属性:
<packaging>war</packaging>
二:注意使用外置的tomcat的话,在application-dev.yml中定义的如下属性将不再起作用,需要使用外部tomcat设置的端口和路径。
server:
port: 8005
servlet:
context-path: /test
三:我window电脑新下载了apache-tomcat-9.0.30,下载来之后需要对conf/server.xml中的端口号进行设置。不然默认的端口很容易已经被占用了。主要设置更改下面两个端口:
更改这个端口是因为我本地去访问的时候出现了:关闭tomcat端口号占用的情况。
<Server port="8995" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
还有一个就是我们访问jsp用的端口号:我改成了:8999
<Connector port="8999" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
四:设置访问路径,为了统一访问路径,我们上面设置了: context-path: /test 路径,但是外置tomcat访问可以在pom中通过:
<finalName>mystore</finalName>
来设置。
五:上面设置完外部tomcat访问的端口号和路径设置完了。但是现在不能进行打包发布,因为在构建war文件以及外部部署的时候需要用到一个类: SpringBootServletInitializer 关于此类介绍可以参考文末链接。
我们平常的入口类需要继承它重写一个方法。
@SpringBootApplication
@MapperScan(basePackages = "com.mystore.mapper")
public class MystoreApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(MystoreApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(MystoreApplication.class, args);
}
}
六:好了,终于可以打包了。 最简单的一种就是:鼠标放到idea界面的最左下角,会弹出一个工具栏,找到 Maven Projects: 可以先运行clean,然后再运行package。
打成的war包会在项目的target目录下:
七:发布,访问。
这一步不用多说了,直接copy打的war包放到tomcat的webapps下。然后到bin目录下 运行 startup.bat(window-系统)/startup.sh(linux-系统)。
因为外部部署访问,我们把端口和路径都改了,现在访问如下:
SpringServletContainerInitializer介绍