基于spring的做了二次开发的快速开发框架。
//javaweb项目从开始到运行有哪些步骤
1.创建Web项目2.导入依赖 3.编写代码 4.项目编译成war包 5. 配置Web应用服务器(Tomcat) 6.将war包,发布到tomcat上 7.启动tomcat 8.浏览器访问tomcat端口
2 常见的核心注解常见的Web应用服务器:Tomcat 、JBoss、WebLogic、IBM WebSphere
@SpringBootApplication 用于Spring主类上最最最核心的注解,自动化配置文件,表示这是一个SpringBoot项目,用于开启SpringBoot的各项能力。相当于@SpringBootConfigryation、@EnableAutoConfiguration、@ComponentScan三个注解的组合保持SpringBootApplication文件最最外层目录,不然扫描不到外层的类
@SpringBootConfiguration 所有的主键类都会被该注解给监测到
@EnableAutoConfiguration 自动加载我们整个项目Configuratio类与Component类
3 MVC在处理一个request请求的时候分为三个层次。
V 视图层------->JSP,Html(超文本标记语言),ftl
在springboot搭配mvc的时候V层用FreeMarker
C 控制层------->Servlet
C层使用DispatchServlet从而转化注解为@Controller
M 模型层------>业务逻辑处理与持久化(即数据模型处理->保存在数据库等)javabean
M层上由Service和Repository Mybatis延伸的@Mapper
4.初次配置尝试(不连接数据库)1.创建项目(略)
2.添加依赖(这一步其实在创建项目时就可以完成)
org.springframework.boot spring-boot-starter-web
3.前端界面简写
4.配置配置文件application.properties
#更改访问端口,可以解决端口被占用问题 server.port=9999 #模板能够被支持,开启freemarker对html的支持 spring.freemarker.suffix=.html #打开静态文件的权限 #在springboot2.3以前是没有带web,即spring.resources.static-locations spring.web.resources.static-locations=classpath:/templates
5.控制类创建controller
//Controller是一个springMVC中接受并处理请求的实现类,可以通过该类型的类去做请求的调度与分发,通常称为控制器类,它是SpringMVC的具体实现
@Controller//该注解声明此类是一个控制器类
public class LoginController{
@RequestMapping("/sign")
//处理所有http所有请求类型的请求
//@GetMapping、@PostMapping、@DeleteMapping、@PutMapping等 处理具体http请求类型 ,类型不匹配将报405
//get与post是http协议中提交数据的方式,
//@ResponseBody//将处理结果转化成json的形式转换出去{key:value}
public String sign(@RequestParam("username")String name, @RequestParam("password")String password){
if("admin".equals(name)&&"123456".equals(password)){return "index";}
else {return "login";}}}
http八种提交请求的方式:OPTIONS、HEAD、GET、POST、PUT、DELETE、TRACE、CONNECT
6.启动tomcat,访问 http://localhost:9999/login.html
5.SpringBoot配置文件优点:更改配置参数时,不需要重新修改逻辑代码 需要重启tomcat
1.Application.properties默认级 参数形式为key-vlaue 键值对形式
2.Application.yml
3.自定义名的properties、yml 不会默认加载,需要手工指定
@PropertySource("classpath:) String name,@RequestParam(value = "password",required = false) String pwd){return "welcome";}
//@PathVariable
@RequestMapping("/pathvar/{abc}")//{abc}占位作用 pathvar传值之后都会带上{abc}的内容 web接口传值使用pathvar 如果是前端视图层传值最好不适用pathvar
@ResponseBody
public String pathvar(@PathVariable("abc")String value){return value;}
//@ModelAttribute
@RequestMapping("/model")
@ResponseBody
//model对象会将form表单中带有name中所有值打包,注意点表单里面的name属性名字要保证一样 @ModelAttribute可以省略 默认使用该方式
public User model(User user){return user;}}
服务端往视图层页面传值的三种常用方式
@Controller
public class ResponseController {
//内置对象传值,四种作用域对象
@RequestMapping("/index")
public String returnToIndex(@RequestParam(value = "username",required = false) String name,@RequestParam(value = "password",required = false) String pwd, HttpServletRequest request, Model model){
request.setAttribute("user",name);
request.setAttribute("pwd",pwd);
request.getSession().setAttribute("usersession",name);
request.getSession().setAttribute("pwdsession",pwd);
ServletContext servletContext = request.getSession().getServletContext();//比Session保存时间更久,是要tomcat不停随时都可以取到
servletContext.setAttribute("servletcontextuser",name);
servletContext.setAttribute("servletcontextpwd",pwd);
Enumeration enumeration = servletContext.getAttributeNames();
while (enumeration.hasMoreElements()){
System.out.println("key:"+enumeration.nextElement());
System.out.println("vlaue"+servletContext.getAttribute(enumeration.nextElement().toString()));
}
System.out.println(request.getAttribute("user"));
System.out.println(request.getSession().getAttribute("usersession"));
User user =new User();
user.setId(11);
user.setUsername("Sandy");
user.setPassword("12131");
model.addAttribute(user);//默认的参数名为类名首字母小写
model.addAttribute("modeluser",name);
model.addAttribute("modelpwd",pwd);
return "welcome";}
//通过springmvc内置对象model
@RequestMapping("/nextindex")
public String returnToIndex(HttpServletRequest request,Model model){return "next";}
//springmvc ModelAndView
@RequestMapping("/modelandview")
public ModelAndView modelAndView(@RequestParam(value = "username",required = false) String name,
@RequestParam(value = "password",required = false) String pwd){
ModelAndView modelAndView = new ModelAndView("modelandview");
modelAndView.addObject("modelviewuser",name);
modelAndView.addObject("modeviewpwd",pwd);
return modelAndView;}}
ResponseController需要一个实体类(省略了get与set方法)
@Component
public class User {
private String username;
private String password;
private int id;
private String remark;}
9.视图模板技术(Freemarker)
视图模板技术有两种Themleaf , Freemarker
1.导入freemarker依赖
org.springframework.boot spring-boot-starter-freemarker
2.配置freemarker参数
spring.freemarker.suffix=.文件后缀
3.基本与复杂数据类型书写
字符串类型:${"this is string"}
数值类型:${123}
布尔类型:${true?c} or ${false?c}
利用标签的创建变量并给变量赋值:
<#assign str="string"/> ${str} <---string--->
<#assign str1>string1#assign> ${str1} <---string1-默认为字符串类型--->
<#assign intval=12/> ${intval} <---12--->
列表类型索引获取:
<#assign listval=["abc","def","hij"]/>
${listval[0]}
${listval[1]}
${listval[2]}
<#list listval as i><---遍历查询--->
${i}
#list>
<#list listval[1..2] as i>
${i}
#list>
String类型索引:
<#assign stringlist="abcdefghijklmn"/>
${stringlist[3]}<---单个查询---> ${stringlist[5]} ${stringlist[7]}
${stringlist[2..5]}
<---列表范围取值--->
Hash类型遍历:
<#assign mapval={"name":"mike","age":18}/>
<#list mapval?keys as key><---遍历查询--->
${key}==>${mapval[key]}
#list>
${mapval.age}
<---单个查询--->
字符串拼接:
${str+str1} <---stringstring1--->
string2${str} <---stringstring--->
加减乘除:
${intval+intval} <---24--->
${intval-intval} <---0--->
${intval*intval} <---144--->
${intval/intval} <---1--->
控制流语句:
gt大于,lt小于,gte大于等于,lte小于等于
<#if mapval.age gte 18>成年#if>
<#if user??>#if><---双问号为判断是否为空--->
<#if (mapval.age>=18)>成年
<#else>未成年
#if>
<#if (mapval.age=20)>
正好20岁
<#elseif (mapval.age>=18)>
成年了
<#else>
未成年
#if>
<#switch mapval.age> <#case 10>10
<#break> <#case 20>20
<#break> <#case 18>18
<#break> <#default> #switch>
创建一个5*5的表格
| sss | #list>
方法
<#function addxy x y>
<#return x+y>
#function>
调用方法运算${addxy(10,20)}<---30--->
<#function addxy x>
局部变量<#local sum=0>
<#list 1..x as i>
<#local sum = sum+i>
#list>
<#return sum>
#function>
${addxy(5)!}感叹号用来规避空值<---15--->



