大多数人,都低估了编程学习的难度,而高估了自己的学习能力和毅力。
当前系列: 从JSP到Spring 修改讲义

课程说明

基础:已学完其他所有课程内容

内容包括:

  • JSP:简单介绍页面组织呈现
  • SpringMVC:重点讲解的核心内容。因为它有UI,所以可以演示数据从前端到后台再到数据库(以及再反过来)的全部流程,架构、性能、安全都在这一部分集中体现。
  • SpringBoot:作为纯后端Restful框架使用。没有UI,内容相对于MVC更少,但理解起来难度更大。

希望同学们以精益求精的态度,完成作业,实现一个简化版的一起帮。

并体会:

  • 软件工程的复杂度
  • 架构的作用


JSP:Dynamic Web Project

前提:已完成JDK和eclipse安装,能跑普通的Java Project。

JST Server Adapters Extensions

JST是J2EE Standard Tools的缩写,顾名思义:J2EE标准工具。

Server Adapters Extensions:服务器适配器扩展,意味着它提供针对服务器(比如:Apache和tomcat)的适配和扩展。

查看eclipse中preferences,如果没有server项,需要通过:help - install new software 安装

使用的远程下载地址为:http://download.eclipse.org/releases/kepler(或eclipse内置的同版本的work with)

Apache Tomcat

这里apache是tomcat的修饰,apache tomcat其实就是tomcat。

PS:apache有很多含义,它

  • 既指apache基金会,
  • 也可以指一种开源协议,
  • 还可以指(只能处理静态内容的Apache服务器。

tomcat前加apache,表明它是遵守apache开源协议、并受apache基金会支持的。

tomcat是一个:

  • 使用Java开发的(所以下载下来的tomcat里面全是.jar)
  • 符合JavaEE的Servlet规范的应用服务器(Servlet容器,后文详述)

在安装JST之后可以通过:Window - Preferences - Server - Runtime Environment - Add 添加到eclipse。

可以看到:tomcat已经下载到本地:

创建项目

最后,要能在eclipse上新建一个动态web项目,需要:file - new - Dynamic Web Project。

如果没有该选项,需要help - install new software安装:

注意:work with要和当前eclipse版本匹配(比如:2020-03,通过 help - about eclipse IDE 查看)

安装完成之后重启eclipse,就可以:file - new - Dynamic Web Project

注意这里有一个原因不明的超级大坑:不能使用默认的4.0,要降得3.0:

然后根据提示一步一步的设置:

  • Java类源代码路径:src
  • Java类编译后路径:build
  • Web相关内容路径:WebContent

直到生成Dynamic Web Project,在WebContent下面添加

一个静态HTML页面

Ctrl+F11既可以跑起来了。

一般为了方便调试,我们用外部浏览器调试。在preferences中搜索browser,选择一个你喜欢的即可。

注意Servers提示:

Tomcat v7.0 Server at localhost

以及console控制台输出:

七月 26, 2021 5:30:11 下午 org.apache.catalina.startup.Catalina start
信息: Server startup in 379 ms

表明tomcat已经自动启动。再添加

一个jsp页面

页面上会有错误:

这是因为解析JSP的sevlet还没有配好,需要在项目的properties中找到Build Path,然后:

Add Libary:Server Runtime - Apache Tomcat v7.0

最后,在jsp页面上右键preferences,修改编码格式为utf-8,完美!

其他注意事项

根据eclipse版本不同,maven的archetype不同,可能还需要调整/统一runtime

  • 项目右键 - build path……略

  • window - preferences - server - new server runtime environment


默认tomcat会使用项目名作为根目录,比如:,不喜欢的话可以在perferences中修改:


SpringMVC

为了演示/教学,我们先建一个web-app项目,然后再将其转变成Spring MVC……

利用archetype新建maven项目

复习:第三方类库/框架依赖管理

archetype是一个maven的项目模板工具箱,通常存放在(通过url访问的)远程仓库(catelog/repository)中,依据archetype我们可以按照archetype样式方便的创建各种maven项目(比如spring mvc)。

演示:preferences - maven - archetypes中查看

依次:file - new - project - maven project,next -> select archetype

使用spring-mvc进行filter,选择:webapp

填写:

  • groupId:团队id,一般是域名倒写
  • artifactId:作品id,一般驼峰命名

finish,观察console:

  • 从catelog(和mirror网址)下载相应的jars
  • 保存到本地repository(地址可在preferences - maven - user setting中查看和更改)

生成的maven项目,自动带着:

  • 文件夹目录结构:src/target/controller/views……
  • maven dependency:一系列spring mvc相关的jar包
  • 基础java类:
  • 配置文件,如:pom.xml
此时的项目类似于一个JSP项目,配置tomcat之后可以把.jsp跑起来。但我们的目标是SpringMVC,所以还需要引入

SpringMVC

pom.xml中添加SpringMVC的dependency:
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-webmvc</artifactId>
	<version>5.0.2.RELEASE</version>
</dependency>

commons-logging经常和Spring合用,但似乎可以没有?
<dependency>
	<groupId>commons-logging</groupId>
	<artifactId>commons-logging</artifactId>
	<version>1.2</version>
</dependency>

Servlet

然后在src\main\webapp\WEB-INF\web.xml中指定了DispatcherServlet

    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
DispatcherServlet是SpringMVC的核心类(演示:F3转到定义),这样所有的HTTP请求才会被DispatcherServlet而不是默认Servlet处理。

load-on-startup=1:在项目启动时加载

然后,和上述servlet并列的加入mapping配置:

	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
指定根目录(/)下所有的请求都会被springmvc的servlet处理。

至此,SpringMVC的开发环境就基本搭建完成。只剩最后一项:

调整一致

检查maven、Project Facets和Java Build Path中的Java版本是否一致:
  • pom.xml
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  • Project Facets

  • Java Build Path
PS:通过project facets将其他项目改造成web项目

MVC:hello,world

接下来,首先配置route,在WEB-INF下添加一个springmvc-servlet.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<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.xsd">
    <!-- LoginController控制器类,映射到"/login" -->
    <bean name="/login" class="LoginController"/>
</beans>

指定不同的HTTP请求由谁(Controller)处理

于是,声明一个

public class LoginController implements Controller {
    public ModelAndView handleRequest(HttpServletRequest arg0,
            HttpServletResponse arg1) throws Exception {
        return new ModelAndView("views/login.jsp");
    }
}
views/login.jsp指定的是View。在webapp下添加:


SpringBoot

首先,在eclipse上Help-Eclipse Markets中安装Spring Tools

此后一直按提示默认选项next直到finish,重启eclipse。

再新建一个Spring starter的项目:

  1. 指定项目名称等
  2. 选中DevTools和Spring Web:

    PS:SpringBoot使用了内置tomcat,能较好的解决项目build后tomcat重启/更新的问题,所以可以auot build……

演示:

  • 已导入maven引用:springboot以外还有log4j、jackson、junit……
  • 有一个内置(embed)的tomcat
  • Application中的main()作为入口函数
  • 没有web.xml、springmvc-servelet.xml等配置文件
  • pom.xml

新建Rest Controller,直接返回JSON数据:

@RestController
@RequestMapping("/user")
public class UserController {
	@GetMapping("/hasName")
	public boolean hasName(String username) {
		return false;

说明:@RestController = @Controller + @ResponseBody

演示:

  • Run as Spring Boot App启动项目(含内置tomcat)
  • 控制台输出显示内置tomcat成功启动:
    TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
  • 浏览器输入地址获得正确响应

学习笔记
源栈学历
大多数人,都低估了编程学习的难度,而高估了自己的学习能力和毅力。

作业

觉得很 ,不要忘记分享哟!

任何问题,都可以直接加 QQ群:273534701

在当前系列 从JSP到Spring 中继续学习:

上一课: 已经是第一课了……

多快好省!前端后端,线上线下,名师精讲

  • 先学习,后付费;
  • 不满意,不要钱。
  • 编程培训班,我就选源栈

更多了解 加:

QQ群:273534701

答疑解惑,远程debug……

B站 源栈-小九 的直播间

写代码要保持微笑 (๑•̀ㅂ•́)و✧

公众号:源栈一起帮

二维码