从零开始搭建JavaSpringMVC(一)

从零开始搭建JavaSpringMVC(一)

本来具有一定的Django开发、和网络攻防背景,但由于工作中确实有许多接触JavaWeb的情况——主要是各位老师傅们的反序列化骚操作拿shell,那个内存马看得我头秃,但想学。所以考虑好好学一波Java。编程向来都是实战中学习来的最快,也就考虑干脆架一个SpringMVC试试,搭个和Django官方教程那样差不多的Web就Ok了。

但Java环境配置看起来一直都是一个头疼的问题,而且网上零零碎碎的也有各种各样的SpringMVC的教程,但都比较零散,网课虽然有却又要花不少银子,所以我这边想干脆就边搜资料边实战,弄出个能工作的WebMVC的实战文章,从零开始搭建,整就行了。

估计编程的中途又会出现一些需要补充Java基础知识的情况,就分别写一些博客来进行补充。

此次搭建主要参考的还是jpwz的博客,当然在搭建的时候也会加入一下自己的理解,如果有误也希望各位师傅指正,感谢感谢。相关的文章如下:

https://www.cnblogs.com/jpwz/p/10538635.html

环境配置

  • JDK8 + Intellj
  • maven 3.6.2

先说说JDK

这玩意儿直接去官网上下载即可,如果是因为xx上网问题导致下载不了。那就尽量找资源吧,总之下载好了之后进行安装即可,需要配置环境变量。JDK我在搭建前就已经有了,所以也就不赘述如何安装JDK。粗略找了几个有用的url,各位看看应该就能配置好了。以下两个链接二选一即可。

再说说Maven

这东西就是个依赖包的管理器,贼好用。一开始接触java项目对于maven这个玩意儿也是很懵逼的,后来发现这东西真的好用,具体的话可以参考慕课网的《Maven项目依赖管理》的免费课程学一波即可。

把前三章开个1.5倍速看完,在本地配置一下就懂了。至少够用,如果不够用的话,我后续再更新这个博客。链接如下:

  • https://www.imooc.com/learn/1282
  • 注意maven可以配置国内的镜像源,这个可以让你的项目下载变得极其的快,前三章的课内有提到如何配置,务必配上。

再说说Intellj

这东西就是个IDE了,说白了就是让你写代码方便一些。Intellj可以在官网下载,有资源的可以考虑直接买一个,学生应该还能用学生邮箱免费使用pro版到毕业,目前来说Java开发都比较喜欢使用Intellj或者Eclipse来进行开发。我这边就用的Intellj了。

不废话了,项目开始

第一步:初始化项目

首先运行Intellj,新建项目,按照如下图所示选择:

image-20201023204743982

选择项目所在的文件夹,我就新建了一个空文件夹SpringMVCPractise2作为项目的地址

image-20201023204925913

下一步后就是我的本地maven配置了,我没有用intellj的默认maven配置,这个在之前介绍的maven网课中前三章内提到过,按照老师说的配置即可,当然用Intellj默认的也没啥问题。

image-20201023205055352

初始化好的项目结构如下,部分敏感信息做了脱敏,不会影响,如果存在项目创建失败或者卡主的情况,应该是maven没有配置国内的镜像源。可以从网课那边知道怎么搞,想快一点就走下面这个url看看,也是在网上翻到的。(说白了也就是在maven的配置文件setting.xml中加一段镜像配置即可,用aliyun的镜像就挺好的,毕竟人家Java大厂,肯定不会亏待我们)

初始化的项目结构如下:

image-20201023205229136

然后在项目的src目录下添加java目录和resource目录。同时将Java目录标记成Sources root,将resource目录标记成Resources root,注意当标记成功后,Java目录的图标会变成蓝色,resource目录的图片会多一个小图标,见下图。

image-20201023205724051

随后在pom.xml中添加springmvc的依赖,然后点击右上角带着M的小图标,如下图所示。

  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>4.3.1.RELEASE</version>
  </dependency>

image-20201023210122614

第二步:构建一个简单的Servlet

Servlet说白了就是一个网页的服务,比如你网上冲浪的时候点一个url就返回一个页面。假设你点的是 hxxp://xx.xx.xx/login.jsp,那在JavaMVC中看到的就是如下的流程,:

  1. 用户点击了url: /login.jsp
  2. /login.jsp 被扔到 web.xml中找有没有匹配的配置(这也就是我们这章节需要去构建的)。
  3. web.xml中找到匹配的配置,在springMVC中是找到了spring的配置文件springmvc.xml(所以我们也要配置这玩意儿,然后在springmvc.xml中找到对应的Java代码)
  4. springmvc.xml会指向指定的Java代码(一个implement了Controller的Class,也是我们要去写的)。
  5. 这个Java代码会执行你想要执行的逻辑,比如做一些简单的运算,然后回复一个的登录窗口。

那么根据流程来看,首先就是在web.xml中添加配置了,让某个url可以指向我们想要的Java代码,添加以下配置,结果如下图所示,注意到springmvc.xml标红了,估计是还要加个配置文档,不急,慢慢走:

<servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--配置springmvc.xml的路径-->
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:springmvc.xml</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

image-20201023212200913

在resources目录下添加springmvc.xml文件,也就是上图中标红的东西。记得选spring.xml,如下图:

image-20201023212439216

结果如下,不红了。(如果发现其他地方有标红,可以注意一下右上角是不是有个m的图标,点击一下下载好依赖就解决了)

image-20201023212534560

接下来就是写代码了,我们在java目录下创建一个com.myfirstspring.controller的package,然后在该package下创建一个MyFirstController类,内置代码如下:

package com.myfirstspring.controller;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class MyFirstController implements Controller {

    @Override
    public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
        return null;
    }
}

image-20201023213935602

如上图所示,我们应该是缺了Tomcat,整!我们就弄个tomcat的plugin试试吧,看看效果。

前往maven官网地址 http://maven.apache.org/,选择Plugin。

image-20201023215742319

然后页面 http://maven.apache.org/plugins/index.html 内搜索Tomcat,找到这个位置

image-20201023215838049

就他咯,https://tomcat.apache.org/maven-plugin.html

image-20201023215941829

跳转到了https://tomcat.apache.org/maven-plugin-2.2/ 按照指南在pom.xml中添加plugin即可。

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
</plugin>

image-20201023220057660

结果如下:

image-20201023220245834

结果问题还在,如下图。但问题不大,因为Tomcat我们肯定也是要的,按照之前的步骤走下来总得装个tomcat,不然web跑不起来。现在那就下个Servlet-api吧,总应该没错了。

image-20201023220511191

前往mavenrepository,搜索Servlet,https://mvnrepository.com/search?q=servlet

image-20201023220832023

点进去选择最火的吧。

image-20201023220905070

然后把这个xml放到我们的pom.xml中,点击右上角的m进行刷新。

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

image-20201023221015872

他总算可以了!Good,继续走下一步。

image-20201023221058547

我们写一点业务逻辑到MyfirstController中去,如下代码

@Override
public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
    ModelAndView mav = new ModelAndView("index.jsp");
    mav.addObject("message", "Hello Myfirst SpringMVC");
    return mav;
}

如下图所示:

image-20201023221748428

这样子业务逻辑就ok了。让我们把index.jsp给配置一下内容,使用以下代码,如下图

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" isELIgnored="false"%>

<h1>${message}</h1>

image-20201023222121805

message这个参数应该就是我们在MyFirstController中定义的message了,不过标黄了,仔细想想应该是我们的springmvc.xml还没有配置。所以整个springmvc在一次访问的生命周期就应该是:

用户输入url --> 在web.xml中找匹配 --> 被跳转到 springmvc.xml中找匹配 --> 找到匹配的class MyFirstController --> 将message对应值放置到index.jsp中 --> 返回index.jsp 给用户。

所以应该是这个 被跳转到 springmvc.xml中找匹配 环节出了问题,因此才标黄的。那就加上吧。

<bean id="simpleUrlHandlerMapping"
      class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <!-- /hello 路径的请求交给 id 为 helloController 的控制器处理-->
            <prop key="/hello">myFirstController</prop>
        </props>
    </property>
</bean>
<bean id="myFirstController" class="com.myfirstspring.controller.MyFirstController"/>

image-20201023223953726

配置到这里网站就写好了,但我们还差一个Tomcat

第三部:把Tomcat启动起来

因为我们之前是安装的maven-plugin形式的tomcat,所以我们还要配置一下Tomcat,点击右上角的Add Configuration,然后点击加号,选择maven,如下图。

image-20201023223233108

修改一下名字,然后添加command,点击Apply,command如下图。

tomcat7:run

image-20201023223342907

这就好起来了。访问网址 http://localhost:8080/SpringMVCPractise2/hello

image-20201023223636328

总结

SpringMVC的整体流程感觉如下:

用户输入url --> 在web.xml中找匹配 --> 被跳转到 springmvc.xml中找匹配 --> 找到匹配的class MyFirstController --> 将message对应值放置到index.jsp中 --> 返回index.jsp 给用户。

但目前来说还缺少一个与数据库交互的地方,就放在第二章节吧,弄个可以访问本地数据库的Web应用。

posted @ 2020-10-23 22:45  Jingkai5174  阅读(682)  评论(0)    收藏  举报