个人知乎 ##基础二-WEB知识
来源:互联网 发布:格式工厂是什么软件 编辑:程序博客网 时间:2024/05/01 11:42
个人知乎
基础二-WEB知识
SpringBoot工程:类似Spring,但使用注解而不是配置文件
框架学习:看官方文档样例,读个大概,具体问题具体查
start.spring.io:
自动配置好一个spring项目,下载解压即可
pom.xml:
IDEA通过打开pom文件导入到文件
目录结构
java:源代码目录java.controller:入口控制java.model:数据模型,与数据表匹配java.dao:数据库接口,与数据表匹配java.service:服务接口resources:资源resources.static:静态文件resources.templates:模板
最简单的服务器:
web->Controller->Service->DAO->Database
Controller注解:
@Controllerpublic class ControllerOfindex{ @RequestMapping(path={"/","/index"}) @ResponseBody //return内容直接到页面 public String index(){ return "hello,world"; } }
参数解析
path到参数:
@Controllerpublic class ControllerOfindex{ @RequestMapping(/profile/{userId}) @ResponseBody //return内容直接到页面 //用PathVariable+{}括号的方式解析url中内容 //用RequestParam方式请求?后的参数,如/profile/1?type=1 //RequestParam方式请求表单数据 public String profile(@PathVariable("userId") int userId @RequestParm(value="type",defaultValue="100",requird=false) int type){ return String.format("page of %d",userId); } }
HTTP Method
Postman
配合360浏览器查看网页
GET/POST:表单只支持这两种方式
@Controllerpublic class ControllerOfindex{ //GET获取数据,POST提交数据 @RequestMapping(path={"/","/index"},method={RequestMethdo.GET}) @ResponseBody //return内容直接到页面 public String index(){ return "hello,world"; } }
PUT
支持幂等性的POST,只执行一次
Velocity
静态和模板
//先在template目录下创建home.html/home.vm@Controllerpublic class ControllerOfindex{ //GET获取数据,POST提交数据 @RequestMapping(path={"/vm",},method={RequestMethdo.GET}) public String template(){ return "home"; } }
数据到模板
@Controllerpublic class ControllerOfindex{ //GET获取数据,POST提交数据 @RequestMapping(path={"/vm",},method={RequestMethdo.GET}) //model:与html交互的模型,传递给模板 public String template(Model model){ model.addAttribute("value1","vvvvv"); model.addAttribute("colors",Arrays.asList(new String[]={"red", "blue","yellow"})); return "home"; } }
模板语言:velocity基础
<!-- home.html --><html>##模板语言注释## $:变量标志## {}:java传入的变量## #:控制语句## $变量能够直接调用java方法 $!{value1}##!:如果不存在强制为空 ${value2}#*不存在则显示字面值{value2}*# colors:$!{colors} ##列表数据 #foreach($color in $colors) This is Color $!{foreach.index}:$color, $!(foreach.count) #*foreach.index/foreach.count:模板自带的计数 *# #end User:$!{user.name}##会自动调用get方法 #set($title="nowcoder")##定义变量 Title:$!{title} #parse("other.html") ##解析其他模板,公共部分 #include("other1.html") ##只是文本的包含,不解析 ##函数定义 #macro (render_color,$index,$color) Color $index,$color #end #*函数调用 *# #foreach($color in $colors) render_color($foreach.index,$color) #end ## "":做解析的串连接 ## '':直接内容的连接 set($hello="!${title}hello") set($hello='!${title}hello')</html>
Request/Response/Session
Request:参数解析,cookie读取,http请求,二进制文件内容
Response:cookie下发,headers设置,页面内容
@Controllerpublic class ControllerOfindex{ @RequestMapping(path={"/request",},method={RequestMethdo.GET}) @RequestBody //形参有request response等变量,框架会自动传入 public String template(Model model,HttpServletResponse response, HttpServletRequest request,HttpSession httpsession){ //获取request方法,?参数等 request.getMethod(); request.getQueryString(); request.getPathInfo(); request.getRequestURI(); //获取request头 Enumeration<String> headnames=request.getHeaderNames(); while(headnames.hasNext()){ String a=headnames.nextElement(); } //cookie request.getCookies(); //返回的内容 response.addHeader("",""); response.addCookie(new Cookie("","")); response.getOutputStream().write(); } }
Error/重定向
301
永久性
302
临时性
@Controllerpublic class ControllerOfindex{ //GET获取数据,POST提交数据 @RequestMapping(path={"/redirect/{code}"},method={RequestMethdo.GET}) public String redirect(@PathVariable("code") int code){ //重定向语法,重定向到首页 return "redirect:/"; } @RequestMapping(path={"/redirect/{code}"},method={RequestMethdo.GET}) public RedirectView redirect(@PathVariable("code") int code){ //重定向语法,重定向到首页 RedirectView rd =new RedirectView("/",true); if(code==301){ rd.setStatusCode(HttpStatus.MOVED_PERMANENTLY); } return rd } //统一处理抛出的Exception @ExceptionHandler() @ResponseBody public String error(Exception e){ return "error:"+e.getMessage(); } }
Logger
根据类全名构造一个该类的Logger,帮助记录各种信息
IoC
按照配置文件自动的构造对象实例后依赖注入到使用的地方,而不用手动new
@Serviceclass WendaService{ public String doSomething(){ return "hi,world"; }}@Controllerpublic class ControllerOfindex{ //自动化依赖注入 @Autowired WendaServiec wenda; //GET获取数据,POST提交数据 @RequestMapping(path={"/","/index"},method={RequestMethdo.GET}) @ResponseBody //return内容直接到页面 public String index(){ return "hello,world"+wenda.doSometing(); } }
AOP/Aspect
对所有服务(一系列步骤)时,插入一个共同的步骤,关注一个切面
@Aspect@Componentpublic class LogAspect{ //用正则方式配置切面关注的方法 @Before("execution(* com.nowcoder.controller.IndexController.*(..))") public void beforeMethod(JoinPoint joinPoint){ //joinPoint得到方法的参数等内容 joinPoint.getArgs(); } @After("execution()") public void aferMethod(){ }}
阅读全文
0 0
- 个人知乎 ##基础二-WEB知识
- 个人知乎 ##基础三-数据库基础
- 个人知乎 ##功能二-问题发布
- 个人知乎 ##基础一-项目介绍
- 个人知乎 ##基础四-多线程
- 个人知乎 ##基础五-redis
- 个人知乎 ##基础七-排序显示
- 个人知乎 ##基础八—python基础
- 个人知乎 ##基础九——爬虫入门PySpider
- 个人知乎 ##基础六/功能六-异步队列实现赞踩站内信
- 知乎爬虫web系统
- 个人知乎 ##功能一-登录注册
- 个人知乎 ##功能三-评论中心
- 个人知乎 ##功能四-站内信
- 个人知乎 ##功能七-邮件发送
- 个人知乎 ##功能八-关注服务
- 知乎爬虫(二)
- 【知乎】verilog相关知识杂谈
- 剑指offer---二维数组中的查找(3)
- iOS 各种demo链接汇总~HUD与Toast
- Educational Codeforces Round 33 (Rated for Div. 2)
- SSH框架:Spring和hibernate整合时出现的异常
- 知识点
- 个人知乎 ##基础二-WEB知识
- FZU
- 知识点
- findViewById的问题和inflate(0方法
- UOJ#57:[WC2013]平面图(最小左转法+点定位)
- 计算并输出100以内所有含7的或7的倍数的数
- 关于学习生活记录的感想总结
- CSDN-markdown编辑器语法——字体、字号与颜色
- 个人知乎 ##基础三-数据库基础