Server 入门后端你要学什么

后端存储 简书

好久没有更新了, 最近一个月在入门服务端的技术栈, 所以快速学了一下java, ssm框架, 这篇文章会将我的学习思路以及一些思考进行分享, 如何将一个月的学习所得通过一篇文章进行梳理, 这对我也是一个极大的挑战.

技术选型

对于Web服务端开发, 有很多语言可供选择比如, php, java, .net, python等, 之前我也试过使用node进行服务器的开发, 但对于国内来说, java还是企业级的标配, 所以我们来学习一下java还是很有必要的.

java技术栈

学习java服务端开发, 我们需要掌握或了解以下技术栈, 所谓万丈高楼平地起, 基础知识还是有必要了解的. 我们通过以下几步来了解下整个java所需的技术流程以及关系.

  1. java环境搭建, 需要下载jdk并配置环境, 这块请自行搜索, 就和你下载Xcode是一个道理.
  2. java基础学习, 如果你有其他语言基础, 直接学习java特色的东西, 比如包结构, 静态, 接口, 注解, 反射, 注解和反射需要好好看看, ssm里面经常用, 要知其所以然.
  3. servlet, filter, listener学习, 了解一下前端和后端的交互, 如何监听过滤请求, 了解原理, jsp可以不用看, 原理和servlet相似.
  4. jdbc, mysql 学习一下如何建表以及连接数据库, 如果有其他开发经验如ios, 就对应fmdb和sqlite.
  5. spring springmvc mybatis, 俗称ssm框架, 也是比较适合上手的框架, 推荐入门.
  6. maven tomcat nginx vstpd linux 项目管理工具, 及服务器反向代理以及ftp静态服务及运维基础.
  7. intillij idea 一个ide熟悉掌握即可.

上述知识, 对于有开发经验的, 看看文档其实也就两个礼拜的时间足以, 不用特别精通, 知其大略即可.

与oc区别

  1. interface 对比 protocol, 这个是一个知识点, 虽然相似但是不同, 对于接口继承和可选的概念和设计也不一样, 可以了解下.
  2. 反射 对比 runtime, 还是不一样的, java中反射和注解是一对相辅相成的东西, 而runtime就是消息转发.
  3. javabean 与property, 一个是通过get 私有属性调用, 一个是自动生成, 还是不一样的.
  4. 包装类, 内部类, final之类的特有功能, 还是有必要学习一下.还有import的概念和oc也是大相径庭.

先列以上几点, 之后再继续补充总结.

实战为例

如果你已经花了些时间, 完成了上述基础部分的学习, 其实花时间2个星期能够看个大概了,然后我们来进行一个接口制作的实际演示.

首先我们需要安装tomcat, jdk 并集成到ide中, 这步骤虽然比较繁琐, 但自行搜索受益良多. 接下来我们就来为之前的简历项目制作接口.

页面图示

针对图示今天先实现第一部分的接口, 首先是数据表设计. 装好mysql后执行创建表sql.

/*
 Navicat Premium Data Transfer

 Source Server         : localhost
 Source Server Type    : MySQL
 Source Server Version : 50719
 Source Host           : localhost
 Source Database       : resume

 Target Server Type    : MySQL
 Target Server Version : 50719
 File Encoding         : utf-8

 Date: 11/13/2017 19:10:36 PM
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
--  Table structure for `resume_profile`
-- ----------------------------
DROP TABLE IF EXISTS `resume_profile`;
CREATE TABLE `resume_profile` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `profile_image` varchar(500) COLLATE utf8_bin NOT NULL,
  `profile_name` varchar(50) COLLATE utf8_bin NOT NULL,
  `profile_career` varchar(50) COLLATE utf8_bin NOT NULL,
  `profile_summary_title` varchar(50) COLLATE utf8_bin NOT NULL,
  `profile_summary_description` varchar(500) COLLATE utf8_bin NOT NULL,
  `profile_interest_title` varchar(50) COLLATE utf8_bin NOT NULL,
  `profile_education_title` varchar(50) COLLATE utf8_bin NOT NULL,
  `profile_location` varchar(50) COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

-- ----------------------------
--  Records of `resume_profile`
-- ----------------------------
BEGIN;
INSERT INTO `resume_profile` VALUES ('1', 'http://upload-images.jianshu.io/upload_images/1229762-23e162b9bd6b9c39.JPG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240', 'Shuangquan Zhu', 'Designer / Developer', 'Summary', 'Shuangquan Zhu is a professional developer who focuses on iOS now. He has strong knowledge of Objective-C, Swift and Javascript. With these skills, he created quite a few quickly developer tools. He also leads the J1 iOS team to promote the project process.\nHe crazy loves playing basketball with friends in spare time, He also loves traveling, writing and listening music. He is always willing to try new things, and keeping to learn from them.', 'Interest', 'Education', 'Shanghai');
COMMIT;

-- ----------------------------
--  Table structure for `resume_profile_education`
-- ----------------------------
DROP TABLE IF EXISTS `resume_profile_education`;
CREATE TABLE `resume_profile_education` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `major` varchar(100) COLLATE utf8_bin NOT NULL,
  `school` varchar(100) COLLATE utf8_bin NOT NULL,
  `year` varchar(100) COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

-- ----------------------------
--  Records of `resume_profile_education`
-- ----------------------------
BEGIN;
INSERT INTO `resume_profile_education` VALUES ('1', 'Business Management', 'East China University of Science and Technology', '2016'), ('2', 'Customs and International Freight', 'Shanghai Maritime Academy', '2013');
COMMIT;

-- ----------------------------
--  Table structure for `resume_profile_interest`
-- ----------------------------
DROP TABLE IF EXISTS `resume_profile_interest`;
CREATE TABLE `resume_profile_interest` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `interest` varchar(100) COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

-- ----------------------------
--  Records of `resume_profile_interest`
-- ----------------------------
BEGIN;
INSERT INTO `resume_profile_interest` VALUES ('1', 'Learn about high tech'), ('2', 'Play basketball'), ('3', 'Listen to music'), ('4', 'Apple products');
COMMIT;

-- ----------------------------
--  Table structure for `resume_profile_social`
-- ----------------------------
DROP TABLE IF EXISTS `resume_profile_social`;
CREATE TABLE `resume_profile_social` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `src` varchar(500) COLLATE utf8_bin NOT NULL,
  `href` varchar(500) COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

-- ----------------------------
--  Records of `resume_profile_social`
-- ----------------------------
BEGIN;
INSERT INTO `resume_profile_social` VALUES ('1', 'http://upload-images.jianshu.io/upload_images/1229762-877e3e5c2260bcf1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240', 'https://github.com/coderzsq'), ('2', 'http://upload-images.jianshu.io/upload_images/1229762-f6525252f3e8387b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240', 'http://www.jianshu.com/u/9d7fad1a4693'), ('3', 'http://upload-images.jianshu.io/upload_images/1229762-a69614a97de93f36.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240', 'http://upload-images.jianshu.io/upload_images/1229762-453920a3f4eedcd8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240'), ('4', 'http://upload-images.jianshu.io/upload_images/1229762-91b0949aec719aab.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240', 'http://coderzsq.github.io/');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

接口设计方面, 注意的就是如果是数组对象, 新建一张单独的表即可, sql语句不懂的同学, 嗯… 努力吧.

然后我们通过maven原型构建一下web-app

接下来, 我们需要创建一下包结构.

.java
└── com
    └── resume
        ├── common
        │   ├── ResponseCode.java
        │   └── ServerResponse.java
        ├── controller
        │   └── PortalController.java
        ├── dao
        │   ├── ProfileEducationMapper.java
        │   ├── ProfileInterestMapper.java
        │   ├── ProfileMapper.java
        │   └── ProfileSocialMapper.java
        ├── pojo
        │   ├── Profile.java
        │   ├── ProfileEducation.java
        │   ├── ProfileInterest.java
        │   └── ProfileSocial.java
        ├── service
        │   ├── IPortalService.java
        │   └── impl
        │       └── PortalServiceImpl.java
        ├── util
        └── vo
            ├── ProfileEducationVo.java
            ├── ProfileInterestVo.java
            ├── ProfileSocialVo.java
            └── ProfileVo.java

我们将项目分为四层, controller, service, dao, pojo, 类似于我们iOS的controller, presenter, viewmodel, model.

分完层级后, 我们来学习下xml的配置吧.

pom.xml

  4.0.0
  com.coderzsq
  resume
  war
  1.0-SNAPSHOT
  resume Maven Webapp
  http://maven.apache.org

  
    UTF-8
    UTF-8
    UTF-8

    4.0.0.RELEASE
    3.4.1
    1.3.0
  

  
    
      org.apache.tomcat
      tomcat-servlet-api
      7.0.64
      provided
    

    
      org.springframework
      spring-webmvc
      ${org.springframework.version}
    

    
      org.springframework
      spring-oxm
      ${org.springframework.version}
    

    
      org.springframework
      spring-jdbc
      ${org.springframework.version}
    

    
      org.springframework
      spring-tx
      ${org.springframework.version}
    

    
      org.springframework
      spring-test
      ${org.springframework.version}
    


    
      org.aspectj
      aspectjweaver
      1.7.3
    

    
      org.mybatis
      mybatis-spring
      ${org.mybatis.spring.version}
    
    
      org.mybatis
      mybatis
      ${org.mybatis.version}
    

    
      org.aspectj
      aspectjrt
      1.6.11
    

    
      org.codehaus.jackson
      jackson-mapper-asl
      1.9.12
    

    
      commons-dbcp
      commons-dbcp
      1.4
      <!--runtime-->
    


    
      ch.qos.logback
      logback-classic
      1.1.2
      compile
    
    
      ch.qos.logback
      logback-core
      1.1.2
      compile
    

    
      mysql
      mysql-connector-java
      5.1.6
    

  
  
    resume
    
      
        org.mybatis.generator
        mybatis-generator-maven-plugin
        1.3.2
        
          true
          true
        
        
        
          
            mysql
            mysql-connector-java
            5.1.40
          
        
      

      
      
        org.apache.maven.plugins
        maven-compiler-plugin
        
          1.8
          1.8
          UTF-8
          
            ${project.basedir}/src/main/webapp/WEB-INF/lib/
          
        
      

      
        org.apache.tomcat.maven
        tomcat7-maven-plugin
        2.2
        
          8080
          /
          UTF-8
        
      
    
  

一些基本的依赖和运行时配置及插件, 类似package.json以及cocoapods.

web.xml


    Archetype Created Web Application

    
        characterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
        
            forceEncoding
            true
        
    
    
        characterEncodingFilter
        /*
    


    
        org.springframework.web.context.request.RequestContextListener
    

    
        org.springframework.web.context.ContextLoaderListener
    
    
        contextConfigLocation
        
            classpath:applicationContext.xml
        
    

    
        dispatcher
        org.springframework.web.servlet.DispatcherServlet
        1
    



    
        dispatcher
        *.do
    

这个文件就管理servlet的监听及过滤的配置, 可以看到使用的是spring的dispatcher.

dispatcher-servlet.xml


    

    
        
            
                
                    
                        text/plain;charset=UTF-8
                        text/html;charset=UTF-8
                    
                
            
            
                
                    
                        application/json;charset=UTF-8
                    
                
            
        
    



    
    
         
        
        
    


这个文件告诉springmvc如何扫描注解,之前有讲到注解的本质就是打好标记通过反射实现逻辑.

applicationContext.xml


    

    
        
        
        
            
                classpath:datasource.properties
            
        
        
    


    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
         <!---->
        
        
         <!---->
        
         <!---->
        
        

        
        
        
        
        
        
    

    
        
        

        
        
            
                
                    
                        
                            dialect=mysql
                        
                    
                
            
        

    

    
        
    

    
    
    
    
        
        
    


这个文件告诉了我们如何配置spring的注解以及一些其他的配置.

以上的其实对于前端都有脚手架工具可以自动生成, 而spring迟迟没有, 只能人肉脚手架, 有点感到spring boot的好了 hhhhhh.

这一篇我们讲解了学习后端你要学什么, 并搭建起了基本框架, 下一篇我们就来实际讲讲如何进行接口开发.

About:

点击下方链接跳转!!

:star2: 项目源码 请点这里:star2: >>> 喜欢的朋友请点喜欢 >>> 下载源码的同学请送下小星星 >>> 有闲钱的壕们可以进行打赏 >>> 小弟会尽快推出更好的文章和大家分享 >>> 你的激励就是我的动力!!

简书稿源:简书 (源链) | 关于 | 阅读提示

本站遵循[CC BY-NC-SA 4.0]。如您有版权、意见投诉等问题,请通过eMail联系我们处理。
酷辣虫 » 后端存储 » Server 入门后端你要学什么

喜欢 (0)or分享给?

专业 x 专注 x 聚合 x 分享 CC BY-NC-SA 4.0

使用声明 | 英豪名录