JavaWeb基础

Nginx

Nginx是一个Web服务器

在Nginx安装目录下,包含一下文件目录结构:

Nginx
└───conf
└───contrib
└───docs
└───html
└───logs
└───temp
│   nginx.exe

conf:服务器配置

html:存放前端网页静态资源,index.html为入口文件

nginx.exe:启动服务器,Nginx服务器默认占用80端口。如果想切换端口,去 conf/nginx.conf 文件中的 http 里面的 server 中的listen切换,把80改成其他端口号

maven

maven是一个项目管理工具,可以对Java项目进行构建、依赖管理等

在Nginx安装目录下,包含一下文件目录结构:

maven
└───bin
└───boot
└───conf
└───lib
│   LICENSE
│   NOTICE
│   README.txt

bin:存放可执行文件

conf:存放maven的配置文件

lib:存放maven依赖的jar包

安装

配置本地仓库:修改 conf/settings.xml 中的 <localRepository>为一个指定目录,在maven安装目录下建一个store目录,当做仓库,并配置这个目录的绝对地址。在<mirrors>中写入一下配置:

<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    <mirrorOf>central</mirrorOf>
</mirror>

把bin目录加入环境变量

配置

创建项目

在一个空项目中,创建maven模块,填写模块名称,坐标信息

坐标信息就是由GroupId(组织名)、ArtifactId(模块名)、Version(版本号)组成

它是资源的唯一标识,通过该坐标可以唯一定位资源位置。

使用坐标定义项目或引入项目中需要的依赖

如果在项目中需要第三方依赖,依赖在pom.xml中写,例:

<dependency>  
  <groupId>junit</groupId>  
  <artifactId>junit</artifactId>  
  <version>3.8.1</version>
</dependency>

依赖

依赖管理

一个项目默认会依赖传递,如果A依赖B,B依赖C,那么A间接依赖C

排除依赖:主动断开依赖的资源,被排除的资源不需要指定版本

<dependency>  
  <groupId>com.eb</groupId>  
  <artifactId>projectB</artifactId>  
  <version>1.0-SNAPSHOT</version>
  <exclusions>
	  <exclusion>
		  <groupId>com.eb</groupId>  
		  <artifactId>projectC</artifactId>  
	  </exclusion>
  </exclusions>
</dependency>

这时,A项目就不会依赖com.eb的projectC项目或jar等

依赖范围

在dependency中写<scope></scope>设置它的作用范围

作用范围:

  • 主程序范围内有效(main文件夹中)
  • 测试程序范围内有效(test文件夹中)
  • 是否参与打包(package指令范围内)
scope值 主程序 测试程序 打包(运行)
compile(默认) Y Y Y
test N Y N
provided Y Y N
reuntime N Y Y

生命周期

Maven的声明周期就是为了对所有的maven项目构建过程进行抽象和统一。

maven有三类阶段:clean、default、site

每类阶段中有很多小的阶段,阶段是有顺序的,后面的阶段依赖于前面的依赖

有几个重要的阶段:

  • clean:移除上一次构建生成的文件
  • compile:编译项目源代码成字节码文件
  • test:使用合适的单元测试框架运行测试
  • package:将编译后的文件打包(jar、war等)
  • install:安装项目到本地仓库

因为后面的阶段依赖于前面的依赖,如果test阶段执行,那么clean和compile都会执行

还可以在命令行中执行,mvn testmvn package

在idea中可以选择跳过指定模式

maven的这些声明周期都是抽象的概念,并不执行具体的插件,具体的事情由绑定的插件来做,因为maven是插件执行框架,所有的工作都由插件做

Web后端开发

Spring框架

Spring是一个开源框架的家族

创建一个简单的SpringBoot项目,然后在src/main/java/包中写一个类,给这个类加上@RestController注解,给里面的方法加上@RequestMapping("请求地址")请求地址是站点绝对路径,访问请求地址的时候,springboot会调用这个方法。

注解 含义
@RequestMapping("地址") 指定请求地址
SpringMVC是Spring框架中的web开发模块,用于简化原始servelt的开发

SpringMVC中包含接收请求、响应数据、拦截器、全局异常处理

Spring framework中还包含IOC、DI、AOP、事务处理

SSM就是SpringMVC+Spring framework+Mybatis

请求和响应

简单参数

一、通过HttpServletRequest的对象手动getParameter()获取数据

@RestController  
public class RequestController {
     
    @RequestMapping("/test")  
    public String test(HttpServletRequest request) {
     
        System.out.println("name: " + request.getParameter("name") + "age: " + request.getParameter("age"));  
        return "success";  
    }  
}

二、根据传递的参数写方法参数

@RequestMapping("/test")  
public String test(String name, Integer age) {
     
    System.out.println("name: " + name + "age: " + age);  
    return "success";  
}

@RequestParam注解可以限制必须传递的参数,他的required属性默认为true,例:

@RequestMapping("/test")  
public String test(@RequestParam(name = "name") String name, Integer age) {
     
    System.out.println("name: " + name + "age: " + age);  
    return "success";  
}

@RequestParam(defaultValue = "1")可以规定默认值为1

这时,"name"属性就是必须要传递的参数,不传递会请求失败

实体参数

根据传递参数自动组装成一个指定类的对象

Student类中有name和age属性:

@RequestMapping("/test")  
public String test(Student s) {
     
    System.out.println("name: " + s.getName() + "age: " + s.getAge());  
    return "success";  
}

如果涉及多个类,传递的时候键要用.分割,例:

User中有个属性是Address类型的,Address类型又有两个属性,那么传递参数的时候要:

....../name=Tom&age=18&address.province=bj&city=bj,这里address.province就是多个类型的传递方式

规则:请求参数名与形参对象属性名相同,即可直接通过POJO接收

数组集合参数

请求参数名与形参数组名称相同请求参数为多个,定义数组类型即可接收参数

....../hobby=game&hobby=java

这里有两个hobby参数,可以用数组接收

@RequestMapping("/test")  
public String test(String[] hobby) {
     
    for (String s : hobby) {
     
        System.out.println(s);  
    }  
    return "success";  
}

用集合接收需要@RequestParam注解绑定参数关系

@RequestMapping("/test")  
public String test(@RequestParam List<String> hobby) {
     
    for (String s : hobby) {
     
        System.out.println(s);  
    }  
    return "success";  
}

日期参数

通过注解@DateTimeFormat(pattern="yyyy"),例:

传参:time=1978-10-28 10:28:05

@RequestMapping("/test")  
public String test(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime time) {
     
    System.out.println(time);  
    return "success";  
}

JSON参数

JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要@RequestBody标识

例:

{
   
	"name": "Tom",
	"address": {
   
		"province": "bj",
		"city": "bj"
	}
}
public class User {
   
	private String name;
	private Address address;
}
public class Address {
   
	private String province;
	private String city;
}

所以可以这样接收:

@RequestMapping("/test")  
public String test(@RequestBody User user) {
     
    System.out.println(user);  
    return "success";  
}

路径参数

通过URL直接传递参数,使用{...}来标识该路径参数,需要使用@PathVariable注解

@RequestMapping("/test/{id}")  
public String test(@PathVariable Integer id) {
     
    System.out.println(id);  
    return "success";  
}

可以写多个路径参数:

@RequestMapping("/test/{id}/{num}")  
public String test(@PathVariable Integer id, @PathVariable Integer num) {
     
    System.out.println(id);  
    System.out.println(num);  
    return "success";  
}

响应数据

在方法名或直接在类前面加@RestController,相当于加了@ResponseBody@Controller注解

这个类里面的方法都是功能接口,@RequestMapping中的是接口路径

功能接口的返回值可以是一个String或一个JavaBean类、集合。如果是JavaBean类,就返回一个JSON格式的键值对对象,如果是集合,就返回一个JSON格式的数组

响应结构格式不统一会给开发带来不便。

建议返回一个Result类:

public class Result {
   
	private Integer code
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值