课程设计问题总结

一些部署到阿里云的问题

一直在阿里云上部署项目,但是只是以ip:端口的形式去进行访问部署到阿里云的项目,个人觉得很丑,之前也有申请过一个.top的域名,但是迟迟过不了认证,后来也一直没有纠结过这个事情,直到课设和前端合作了一个web项目。发现其实还是有许多问题等着解决

80/8080有什么区别

之前访问一个项目不论是在本地使用localhost形式还是部署到阿里云后使用ip形式访问,始终都要带上tomcat的默认端口8080,这让我觉得真的很丑,并且也心生疑问,为什么访问诸如百度阿里腾讯这类大型网站不需要带上项目部署的端口

80端口是为 HTTP(HyperText Transport Protocol)即超文本传输协议开放的,此为上网冲浪使用次数 最多的协议,主要用于WWW(World Wide Web)即万维网传输信息的协议。可以通过HTTP地址(即常说的“网址”)加“:80”来访问网站,因为浏览网页服务默认的端口号都是80,因此只要输入网址即可

看了这句话不难理解,其实 www.baidu.com 也就相当于 www.baidu.com:80

之前在跟安卓交互的时候,因为没有添加host请求头,所以我在这边看我的tomcat日志一直都没有拦截到请求的迹象,项目中在关键地方打了log之后才发现,没有加host的时候,使用我提供的接口请求的默认端口是80端口,也就更能证明上面说的80端口是HTTP协议默认的端口了

之前在阿里云配置域名解析之后,访问的结果是这样的
img_9164f7f29baf02bd383a2aca07a8f418.png
使用tomcat默认端口8080访问

实在是觉得:8080这个东西既不好看又累赘,所以修改了阿里云tomcat的配置

进入tomcat下conf目录编辑server.xml


img_35b3b18a71c9252401654b68dcfe36ca.png

找到Connector结点


img_cc3a32c9a64fc1ce0603503b8da7c821.png

修改port从8080变为80
重启tomcat就可以发现我们可以通过省略tomcat默认端口8080去访问云上的项目


img_49ab0ff05eae19d62b26ba33cef22bd6.png
不使用8080端口访问项目

DNS是什么

DNS 是域名系统 (Domain Name System) 的缩写,它是由解析器和域名服务器组成的。

域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。其中域名必须对应一个IP地址,而IP地址不一定有域名。 域名系统采用类似目录树的等级结构。

域名服务器为客户机/服务器模式中的服务器方,它主要有两种形式:主服务器和转发服务器。将域名映射为IP地址的过程就称为 “域名解析”

在Internet上域名与IP地址之间是一对一(或者多对一)的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。

DNS 命名用于 Internet 等 TCP/IP 网络中,通过用户友好的名称查找计算机和服务。当用户在应用程序中输入 DNS 名称时,DNS 服务可以将此名称解析为与之相关的其他信息,如 IP 地址。因为,你在上网时输入的网址,是通过域名解析系统解析找到了相对应的IP地址,这样才能上网。其实,域名的最终指向是IP。

以百度为例 打开win10 cmd

img_0d1fd5a2d2a1fcd745bb4c0a856747cc.png
ping命令

简单来说,我们最常用就是的DNS域名解析服务。比如上网时输入 www.baidu.com计算机通过DNS服务器将 www.baidu.com 解析成百度对应的服务器IP地址,220.181.112.244

编码时候的问题

Spring Boot篇

SSM用得已经很熟了,这次课设本来想使用Spring Boot 写一个正儿八经的web服务端,还准备尝试着去使用一下Rest风格,可最后因为前端的问题,课设最后也才算刚刚完成,最后将web和后端放在了一个项目

Spring Boot使用的时候出现的问题:

  • 因为我是用的是gradle构建的项目,在部署的时候迟迟找不到idea的gradle中的war选项,后来了解到需要在项目的build.gradle中添加如下属性

      apply plugin: 'war'
    

并且在执行打包之前,需要对整个程序的启动类进行一定的操作

@MapperScan("com.bsb.mapper")
@SpringBootApplication
public class SpringBootMybaitsApplication extends SpringBootServletInitializer {

  public static void main(String[] args) {
      SpringApplication.run(SpringBootMybaitsApplication.class, args);
  }

  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
      return builder.sources(SpringBootMybaitsApplication.class);
  }
}

修改启动类,继承 SpringBootServletInitializer 并重写 configure 方法,注意这里要指向原先用main方法执行的Application启动类

  • 因为Spring Boot在idea项目初始化的时候会让开发者自己选择项目所需要的模块,真的很方便,但是,在部署到阿里云的时候出现了问题。因为Spring Boot是使用的内嵌的tomcat,所以在部署到阿里云tomcat的时候需要尤其注意在build.gradle中加入如下属性
    providedRuntime('org.springframework.boot:spring-boot-starter-tomcat')

这句话的意思是,在执行项目打包的时候,内嵌的tomcat不会被打包进最后的.war中
这样就可以在阿里云的tomcat中部署,并且使用阿里云tomcat作为web服务器进行正常工作

后来还是使用了SSM,这也让我回顾了一些东西

Mybaits动态SQL

比如现在有一个需求,需要批量插入一组数据进数据库,会怎么做,循环一条一条做吗

Mybaits 提供了动态SQL功能
MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑。
MyBatis中用于实现动态SQL的元素主要有:

  • if
  • where
  • set
  • choose(when,otherwise)
  • trim
  • foreach

下面看几个例子
向数据库中插入批量数据

 <insert id="buyTicket" parameterType="com.bsb.pojo.Ticket">
    INSERT INTO ticket_table
    (
        movieId, hallId, startTime, seatRow, seatColumn, ticketPrice, userId
    )
    VALUES
    <foreach collection="list" item="ticket" index="index" separator=",">
     (
        #{ticket.movieId}, #{ticket.hallId}, #{ticket.startTime}, #{ticket.seatRow},
        #{ticket.seatColumn}, #{ticket.ticketPrice}, #{ticket.userId}
     )
    </foreach>
</insert>

批量更新数据

<update id="updateSelectedMovie" parameterType="java.util.List">
    <foreach collection="list" item="movie" index="index" separator=";">
        UPDATE movies_table
        <set>
            scm = #{movie.update}
        </set>
        WHERE id = #{movie.movieId} AND status = 1
    </foreach>
</update>

批量删除数据

  <delete id="returnTickets" parameterType="java.util.List">

    DELETE FROM ticket_table WHERE userId = #{userId} AND id IN

    <foreach item="id" collection="ticketsIds" index="index" open="(" separator="," close=")">
        #{id}
    </foreach>

</delete>

其实可以看出,这些加入了<foreach>标签的SQL语句其实和普通的语句没有什么区别,区别在于,foreach标签能够对Mapper接口传入的集合参数进行遍历,并且对SQL语句进行拼接,也正是因为这样才能实现批量增删改查的功能

数据库篇

数据库的结构设计真的对后期编码十分影响,这次我们的课设项目的数据表结构设计得在我看来是相当合理的,其中使用到了一些视图、触发器和定时任务,觉得设计得不错并且练了手也对数据库的基本操作有了更好地熟悉和回顾

课程设计github地址 https://github.com/challengerzsz/TTMS-RestfulApi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值