发表于: 2018-01-10 16:16:18
2 675
今天完成的事情:
用json taglib完成json解析
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="json" uri="http://www.atg.com/taglibs/json" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>12</h1>
<json:array>
<c:forEach items="${requestScope.allFruits}" var="f" varStatus="vs">
<json:object>
<json:property name="id" value="${f.id}"/>
<json:property name="name" value="${f.fruitName}"/>
<json:property name="price" value="${f.fruitPrice}"/>
</json:object>
</c:forEach>
</json:array>
</body>
</html>
页面:
使用jetty部署
使用maven插件部署
<build>
<finalName>ssmcrud</finalName>
<plugins>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.8.v20171121</version>
</plugin>
</plugins>
</build>
使用idea部署
使用resin部署
过程就不写了。
深度思考
1 什么是http协议?Get和post请求有什么区别?http请求content-Type有几种,有什么区别?http适合什么场景?http状态码有哪些?
HTTP构建于TCP/IP协议之上,默认端口号是80,HTTP是无连接无状态的(解决办法)
客户端和服务器端之间数据传输的格式规范,格式简称为“超文本传输协议”。
application/x-www-form-urlencoded | 原生格式 | 原生支持 |
multipart/form-data | 上传文件 | |
application/json |
|
|
text/xml |
|
|
|
|
|
200、301、302、304、400、401、403、404、500、503
2 Http的Header里面包含哪些字段,每个字段都有哪些含义?
Cache-Control
Connection
Cookie
请求:
Accept、Accept-Charset、Accept-Encoding、Accept-Language、Host、User-Agent
响应:
Accept-Ranges、Location、Server
实体相关字段:
Allow、Content-Type、Content-Encoding、Content-Language、Content-Length
Content-Range
3 web.xml里的主要配置都包括什么,都代表什么含义,比如怎么加载Spring 配置的?
加载spring容器、spring监听器、、配置springmvc DispatcherServlet (加载springmvc容器)、各种拦截器、字符处理等。
4 Annotation和XML两种配置的差别,为什么更喜欢使用Annotaion来配置Spring MVC?
注解: 更间接、方便、直观。
xml: 更解耦、灵活、修改方便。
直观,只要看@RequestMapping后面的参数就知道,处理器处理的哪个请求。
5 什么是Filter,什么是Interceptor,他们的区别是什么,和AOP又是什么关系?
过滤器和拦截器,过滤器是符合条件的请求进来,不符合的不进来,拦截是某些处理方法、数据类型,要在处理器处理之前、之后,有一些操作。
过滤掉的直接就不往下进行了,没拦截的只是没有执行拦截器prehandler,posthandler等一系列方法。
都是AOP思想的一种体现。
6 生成Json有几种方式,他们之间的好处和坏处分别是什么,为什么推荐使用JsonTaglib来处理Json?
各种第三方包:在jsp中用标签语法写,用js(jquery)来写
7 一份规范的接口文档应该包括什么内容,衡量接口(API)设计好和坏的准则是什么?
项目元数据:公司、项目组、项目名/代号、类型(web/ios/安卓)、版本、日期、地址
接口说明:
整体概览、各个接口之间的关系
每个接口的说明
方法、URI、返回资源、状态码及含义、接口说明、接口示例、修改组、所有修改者/最近修改者、修改详情、更新日期等
试试RAP http://rap.taobao.org/org/index.do 、eolinker
8 使用Annotaion的时候需要有哪些配置,他的加载过程是怎么样的?
9 Put请求在Linux下的Tomcat或者是Resin中会收不到数据,怎么解决这个问题,原因是什么?为什么本地使用Jetty的时候往往是正常的?
这个数据是请求体中的数据
tomcat首先将请求体中的数据存进map里,然后服务器可以利用request.getParameter("")拿到map中的数据,但是这只对get或post请求有效。
在org.apache.catalina.connector.Request中的parseParameters函数中,有一句判断:
这里主要看isParseBodyMethod:
是主要看parseBodyMethodsSet是否包含方法。
而默认的parseBodyMethods="POST":
所以,tomcat、resin默认情况下,只会转换POST请求体中的参数,不会转换put、delete请求中的请求体的参数。而springMVC封装POJO的时候,只是调用tomcat的request对象,使用request.getParameter("")拿到数据。
解决办法,两种:
在tomacat的conf/server.xml中的Connect标签中,添加自定义的parseBodyMethods属性
或者在web.xml(springmvc框架支持)中,添加拦截器
jetty支持put、detele方法
10 War包是什么,为什么WEB服务通常打出来的都是War包?除了War包,还有几种打包格式,他们之间的区别呢?
WAR(Web Archive)文件。WAR是Sun提出的一种Web应用程序格式,与JAR类似,也是许多文件的一个压缩包。这个包中的文件按一定目录结构来组织:通常其根目录下包含有Html和Jsp文件或者包含这两种文件的目录,有一个WEB-INF目录,很重要。在WEB-INF目录下有一个web.xml文件和一个classes目录,web.xml是这个应用的配置文件,而classes目录下则包含编译好的Servlet类和Jsp或Servlet所依赖的其它类(如JavaBean)。一般来说,web应用依赖的JAR包放在WEB-INF/lib目录下。
11 maven常用的打包插件有哪些?有什么区别?如何使用 ?
maven-jar-plugin
maven-war-plugin
maven-assembly-plugin
maven-shade-plugin
12 jetty,resin,tomcat的差别在哪里,在线上服务应该选择哪一种WEB服务器?
1、速度方面,Resin比Tomcat快2倍以上,不过Tomcat也很快,所以差别几乎感受不到。
2、开关机制上方面,Resin要比Tomcat好,比如修改了配置文件之后,Resin是会自动重启的,而Tomcat需要人工手动关闭并重启。
3、报错方面,Tomcat比较详细,一个小小的错误也会用大篇幅来描述,而Resin则相对简洁明确一些。
Tomcat和Jetty的区别
相同点:用java编写,一种Servlet容器,都支持标准的servlet规范和JavaEE的规范。
不同点:
1、架构方面,Jetty的架构是基于Handler来实现的,主要的扩展功能都可以用Handler来实现,扩展简单。 Tomcat的架构是基于容器设计的,进行扩展是需要了解Tomcat的整体设计结构,不易扩展。
2、灵活性方面,Jetty更灵活,体现在其可插拔性和可扩展性,更易于开发者对Jetty本身进行二次开发,定制一个适合自身需求的Web Server。 相比之下,重量级的Tomcat因为本来就支持过多J2EE特性,要对其精简,比对jetty进行拓展都更难。
3、处理性能方面,Tomcat适合处理少数非常繁忙的链接,也就是说链接生命周期短的话,Tomcat的总体性能更高。另外,Jetty在处理静态资源时,性能优于Tomcat。
这些服务器各有优劣,选择服务器时应该先参考项目,预估规模大小等。比如大规模的企业级应用,Tomcat自身扩展了大量JEE特性可满足企业级应用的需求,所以这种情况下应选用Tomcat。
13 对Service返回的结果是否要判空,为什么?
返回null是很不好的习惯。
如果一个函数可能返回null(就是在最开始,一个变量赋值为空,函数最后反悔这个变量,这种情况),就必须判空。
这可以说是语言设计者的失误了。
解决方案:使用java8中的optional、抛出异常(自定义异常)
14 对Service返回的结果是否要打日志,应该打什么样的日志,为什么?
要打
抛错误时(try catch)打error、正常运行打info
catch (Exception e) {log.error(e.getMessage());}
15 PostMan是什么,为什么要使用他来测试接口,除了Postman,还有哪些工具可以测试?
测试接口工具,方便。
DHC、Restlet Client、fiddler
16 端口是什么含义,怎么判断一个端口是否被占用了,如何判断一个端口是否被防火墙拦截,怎么用Telnet判断端口号是否打开?
传输层与网络层最大的区别是传输层提供进程通信能力,网络通信的最终地址不仅包括主机地址,还包括可描述进程的某种标识。所以TCP/IP协议提出的协议端口,可以认为是网络通信进程的一种标识符。
http://blog.csdn.net/san_mu_000/article/details/69943257
Linux下查看本地进程占用端口:
查看程序对应进程号:ps –ef|grep 进程名
查看进程占用端口号:netstat -anp|grep 进程pid/端口号
查看防火墙端口
iptables –L
telnet查看远程端口
telnet 120.79.47.191 22 ip和端口之间是空格
nmap ip -p 端口号,可以看到状态是open
17 WEB服务器通常要配置哪几个端口,如果一台服务器上有多个不同的WEB服务,该怎么规划端口的使用,修真院的端口分配是怎么样的?
80、22、443
18 C标签是什么,为什么要使用C标签,有哪些常见的指令?
http://blog.csdn.net/jueblog/article/details/10814259
jsp的核心标签库 c → core http://java.sun.com/jsp/jstl/core
1. 表达式控制标签:out、set、remove、catch
2. 流程控制标签:if、choose、when、otherwise
3. 循环标签:forEach、forTokens
4. URL操作标签:import、url、redirect
明天计划的事情:
任务3、svn学习、任务1、2复习(spring、mvc、mybatis、mysql)、aop。
遇到的问题:
深度思考有很多还是不懂,从网上搜了不少,有很多还是一知半解。
收获:
见上面。
评论