Java Spring 项目建立

Spring 相关网站

  1. 官方文档
  1. github例子

  2. 新建项目
    可以选择想要的工具如Web,Templating Engine,AOP,DevTools打包成一个zip下载即可

  3. 官网


MVC模型

Model View Controller


超级简单网站制作

  1. 不用模板返回字符串,在函数最后return 字符串即可
    API说明
    • 最前面用 @Controller 表示是一个网页的入口
    • 函数前面 @RequestMapping(path={"路径/{变量}"})
      表示网址路径的后缀名,路径中{}包裹的是 @PathVariable 路径变量,可以用在下面的函数中作为参数传递使用
    • @ResponseBody 返回字符串时需要,返回模板时不用
    • @RequestParam(value = "type",defaultValue = "1",required=false) int type 这是函数传递给网址的参数——也叫请求变量,value表示值的Key,defaultValue表示为空时的值,required表示是否为必须的,false表示可以没有,没有时为NULL,true表示必须要有,否则报错
    • 最后一个函数完整的请求网址为
      localhost:8080/profile/admin/erika?type=10&id=100
      其中type和id都因为required=false而可以省略
@Controller
public class IndexController 
{
    @RequestMapping(path = {"/", "/index"})
    @ResponseBody
    public String index() 
    {
        return "Hello AskMe";
    }

    @RequestMapping(path = {"/profile/{groupname}/{userName}"})
    @ResponseBody
    public String profileuserID(
    @PathVariable("userName") String username,
    @PathVariable("groupname") String groupname,
    @RequestParam(value = "type",defaultValue = "1",required=false) int type,
    @RequestParam(value = "id",defaultValue="10",required = false) Integer id) 
    {
        return String.format("Profile page of %s from %s \n Request for type %d of %d",username,groupname,type,id);
    }

}

HTTP Method

写入数据POST 获取数据 GET

  1. GET
    获取接口信息
  2. HEAD
    紧急查看接口HTTP的头
  3. POST
    提交数据到服务器
  4. PUT
    支持幂等性的POST——发多次和成功发一次的效果是一样的,去重版本的POST
  5. DELETE
    删除服务器上的资源
  6. OPITIONS
    查看支持的方法

静态和模板文件

这里使用的是Freemaker的模板引擎,所以在HTML中用到变量或者一些语句,必须要按照Freemarker的语法,下面会有简单介绍

  1. 首先java函数部分的改动

    • 不再需要ResponseBody
    • 参数中添加 Model型变量,用来给模板传递参数
    • model.addAttribute(变量名,变量值) 添加变量,这里添加了字符串变量,List变量,Map变量和自定义的User类型变量
    @RequestMapping(path={"/template"},method = {RequestMethod.GET})
    public String template(Model model)
    {
        model.addAttribute("name","Erika");
        List<String> list= Arrays.asList(new String[]{"oasis","blur","the libertines"});
        model.addAttribute("band",list);
        Map<String,String> map=new HashMap<String,String>();
        for(int i=0;i<3;i++)
            map.put(String.valueOf(i+1),list.get(i));
        model.addAttribute("map",map);
        model.addAttribute("user",new User("Erika"));
        return "home";
    }
    
  2. Freemarker基本语法

    • 注意这里面表示相等关系是用=而不是==
    • 变量引用 ${变量名?if_exists} 如果存在输出,不再就不输出,而不会将该式作为字符串输出
    • if 判断
    <#if (判断语句)>
        你的操作
    </#if>
    
    • 遍历list
    <#list 你的List变量的名字 as k>
    ${k}
    </#list>
    
     这里的遍历是不能continue的但是可以<#break>,如果需要continue可以if,else其中一个设置为空语句来实现continue 的效果
    
  • 遍历map
 <#list 你的Map变量的名字?keys as k>
 ${k}
 ${Map[k]}
 </#list>
  • 设置变量或者赋值
<#assign x=10>
  • 调用方法或属性(下面两种方法等效)
${user.getDescription()}
${user.description}
  • 注释
<#--注释-->
  • 字符串连接
<#assign x="${title}+something"

就在双引号中用美元符号和大括号括起来

  • 定义函数
  <#function 函数名 参数1 参数2 参数3>
  <#一些语句>
  <#return 返回值>
  </#fuction>
  ${函数名(实参1,实参2,实参3)} <#-- 调用 -->
  • 包含其他的html文件
  <#include "xxx.html" />
  <#import "xxx.html" as a>

这两者有一定的区别,include是将模板直接表示出来,import是导入后继续使用,且如果import的模板中有和当前一样的变量,可以用a.变量名和不加前缀的变量名来区分,但是include就是直接将导入的模板中的值覆盖当前的值,即自己本来的值丢失


IOC

定义类时前面加@service表示是一种服务,在controller中@Autowired 类名 对象名 即可自动创建一个对象,且可以用在任何地方

AOP

面向切面编程,即在定义类的时候表明想在什么地方执行,那在执行某个程序之前之后会自动执行这些切面代码,适合用于日志记录,系统安全等,即不论什么功能什么用户使用都会需要用到的功能适合用面向切面编程,编写方式如下

Before字段表示在执行这些文件路径中的函数之前会执行下面的代码,After同理,这里的代码表示在日志中添加信息,可用通配符*来匹配更多路径更多文件

@Aspect
@Component
public class testaop {
    private static final Logger logger= LoggerFactory.getLogger(testaop.class) ;
    @Before("execution(* com.erika.askme.controller.IndexController.*(..))")
    public void start()
    {
        logger.info("Before the execution");
    }

    @After("execution(* com.erika.askme.controller.IndexController.*(..))")
    public void end()
    {
        logger.info("finished");
    }
}

Error 处理

    @ExceptionHandler()
    @ResponseBody
    public String error(Exception e)
    {
        return "error "+e.getMessage();
    }

重定向

重定向有两种分别为301,302
301:永久转移 下面代码中将status设为MOVED_PERMANENTLY表示是301
302:临时转移

    @RequestMapping(path="/redirect/{code}")
    public RedirectView redirect(@PathVariable("code") int code)
    {
        RedirectView red=new RedirectView("/",true);
        if(code==301)
            red.setStatusCode(HttpStatus.MOVED_PERMANENTLY);
        return red;
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,838评论 19 139
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 9,711评论 0 13
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,492评论 18 399
  • 我就是一个小人物,没有什么经历,没有什么阅历。 自从大学梦实现后,就没有了目标。总是想着自己干,但又不知道干什么,...
    雨后扫雪阅读 1,360评论 0 0
  • 1.妈宝男 大学闺密嫁了一个这样的。 她老公在家是这样的:孩子都会叫爸爸了,还只穿着内裤在妈妈面前溜达。说“抱抱”...
    刘秀玲阅读 8,350评论 68 58

友情链接更多精彩内容