servlet的生命周期是初始化(init)、服务(service)、销毁(destroy)
1.初始化(init):当服务器启动时进行初始化,只初始化一次
2.服务(service):方法被调用时进行服务,在项目启动期间可以进行多次服务
3.销毁(destory):当服务器关闭时进行销毁。只销毁一次
Servlet是服务器端的程序
JSP是服务器页面程序
JSP本质上就是一个Servlet,在访问jsp时,在服务器端会将jsp先转换成servlet,再将生产的servlet的结果响应给浏览器。
jsp是html页面中内嵌Java代码,侧重页面显示;Servlet是中书写Java代码,侧重逻辑控制;
1.init(ServletConfig):初始化方法,第一次请求前执行,完成servlet初始化工作
2.service(ServletRequest,ServletResponse):执行方法,一次请求执行一次。
3.destroy():销毁方法,Servlet对象应该从服务中被移除的时候,容器会调用该方法进行销毁操作
4.getServletConfig():获得ServletConfig配置对象,包括初始化参数等。
5.getServletInfo():获得Servlet描述,一般没有用。
异步处理允许Servlet重新发起一条新线程去调用 耗时业务方法,这样就可以避免等待
1、request.getParameterValues(“参数”); //获得指定参数名的一组参数值 (String[])
2、request.getParameter(“参数”); //获得指定参数名的一个参数值(String) , UserServlet?username=jack , 通过username获得值jack
1、doGet():地址栏url方式访问、超链接访问、以及form表单中的method属性值为get方式访问,则调用doGet()方法
2、doPost():form表单中的method属性值为post方式访问,则调用doPost()方法
ServletContext对象是上下文对象 Servlet直接调用getServletContext方法返回ServletContext对象
Servlet不是线程安全的。Servlet 默认是单例模式,如果提供成员变量,多个线程对成员变量进行操作,将发生并发问题,所以不安全。
如果不提供成员变量,或提供成员变量但不使用,可以解决并发问题
1.地址栏是否改变:forward浏览器端网址不会发生变化,redirect浏览器端地址会变成;
2.是否可共享请求参数:forward是转发,属于同一个请求,数据可以传递;redirect是两次请求,数据不能传递;
3.是否可站外跳转:forward一般用于网站内部跳转,redirect可在站内跳转,也可跳转到其它网站。
request:请求对象
response:响应对象
session:回话对象
pageContext:页面上下文对象
application:类型是ServletContext,表示servlet上下文对象,可以在整个web项目中共享资源。
out 输出对象
page JSP网页本身
config Servlet的配置对象
exception 异常对象
session属性:表示当前页面是否支持session,如果为false,则在JSP页面中不能使用session对象。属性的默认值为true。
info属性:设置JSP页面的相关信息。
contentType属性:设置JSP的MIME类型和字符编码。
application:在当前web项目中有效
session:在当前会话中有效
request:在当前请求中有效
page:在当前页面有效
通过page指令设置<%@ page isThreadSafe=“false”%>,默认Servlet支持多线程模式
<% %> 用于编写Java代码,语法与方法体一致。
<%= %>将结果输出到浏览器,语法与方法的实际参数一致。
1.JSP页面显示中文乱码:JSP页面设置为项目对应编码:contentType=“text/html; charset=UTF-8”
2.URL传递参数中文乱码:修改Tomcat的conf目录下的server.xml配置文件, 元素中添加 URIEncoding=“UTF-8” 属性解决;
3.表单提交中文乱码:采用过滤器Filter统一解决乱码问题
cookie是浏览器技术, 是服务器发送过来的, 保存在浏览器
session是服务器技术, 数据保持在服务器,通过cookie与浏览器建立联系, 保证用户在切换页面时保持会话
区别:
1, cookie只能存储英文字符串, session可以存储任意数据
2. cookie只能存储少量数,session可以存储大量数据
3, cookie默认生命周期是当前会话, 关闭浏览器自动销毁, session默认生命周期是30分钟
session.setMaxInactiveInterval(设置时间/秒)
cookie信息存储在浏览器端,不同浏览器存储在硬盘的具体位置会不同。
如果限制cookie的使用
1.提示用户不要禁用cookie;
2.使用URL重写技术解决cookie被禁用,session不能使用的问题:
3.使用html5的localStorage替代cookie
参考:https://blog.csdn.net/m0_38039437/article/details/76718541
url重写是修改响应给用户的访问地址,在url中拼接session id,。
Url重写解决是浏览器端cookie禁用,session无法使用的问题。
1xx(请求进行中):用于表示临时响应并需要请求者执行操作才能继续的状态代码;
2xx(请求成功):用于表示服务器已成功处理了请求的状态代码;
3xx(请求被重定向):通常这些状态代码是用于重定向的;
4xx(客户端错误):用于指出客户端的错误;
5xx(服务器错误):这些状态代码表示,服务器在尝试处理请求时发生内部错误
token是服务器写到浏览器的用户标识, 一般是使用32位的UUID,为自定义数据。
session是浏览器与服务器的一次会话,是web服务器创建的对象。
session可以用于单机web服务,记录用户登录。
token可以用于集群web服务,完成单点登录。
localStorage 用于在浏览器本地存储服务器响应的数据。
localStorage 是 HTML5 的新特性。
用于解析cookie存储空间不足的问题。
localStorage中一般浏览器支持的是5M大小,这个在不同的浏览器中localStorage会有所不同。
1.是什么:Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术
2.使用ajax的好处有:
①通过异步模式,提升了用户体验;
②优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用;
③Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工作,从而减少了大用户量下的服务器负载
3.如何使用
①jQuery中发送ajax请求:
$.ajax({
type: “POST”,url: “”,data: “name=John”,success: function(msg){}
});
②Vue发送ajax请求:
get请求:axios.get(url[,options]);
post请求:axios.post(url,data,[options]);
JSON 语法规则:
1.数据在名称/值对中
2.数据由逗号分隔
3.花括号保存对象
4.方括号保存数组
JSON对象:{“key”:“value”,“key”:“value”,…}
JSON数组:[ obj , obj , obj , …]
基于TCP的应用层协议,它不关心数据传输的细节,主要是用来规定客户端和服务端的数据传输格式,最初是用来向客户端传输HTML页面的内容
HTTP:超文本传输协议,基于TCP/IP通信协议来传递数据网络协议,数据不安全,没有加密。默认端口号80
HTTPS:超文本传输安全协议,是HTTP协议 + SSL证书协议,证书需要到ca申请,传输过程中数据需要加密。默认端口号443
参考:https://www.cnblogs.com/wudaoyongchang/p/6253451.html
短链接:客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。
长连接:用以保持连接特性。 长连接多用于操作频繁,点对点的通讯,而且连接数不能太多。因为用短连接频繁的通信会造成socket错误 WEB网站的http服务一般都用短链接。因为长连接对于服务端来说会耗费一定的资源
MVC设计模式: Model-View-Controller简写。
MVC是软件工程中的一种软件架构模式,它是一种分离业务逻辑与显示界面的设计方法。它把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
SpringMVC是一个MVC框架,springmvc的工作流程:
Spring框架的核心控制器(前端控制器)是DispatherServlet
他的核心功能就是分发请求,请求会被分发给对应处理的类handler。
使用@ResponseBody注解,将返回json数据。
1.如果在方法使用该注解,当前方法返回json数据。
2.如果在类上使用该注解,当前类中所有的方法,都将返回json数据。
springmvc默认用jackson对json数据进行转换,但需要添加jackson的包
扩展阅读:
消息转换器原理解析:https://blog.csdn.net/shadabing/article/details/84664402
SpringBoot配置Fastjson:https://blog.csdn.net/cjq2013/article/details/76421101
SpringMVC配置Fastjson:https://blog.csdn.net/do_bset_yourself/article/details/51324186
优点:
1、开发人员可以只关注整个结构中的其中某一层;
2、可以很容易的用新的实现来替换原有层次的实现;
3、可以降低层与层之间的依赖;
4、有利于标准化;
5、利于各层逻辑的复用
缺点:
1、降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。
2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。
1.1)声明bean的注解
@Component 通用注解,用于声明bean。可以配置任意组件。
@Repository 派生注解,与@Component等效,Dao实现类推荐使用的注解,不仅可以声明bean,而且提高可读性。
@Service 派生注解,与@Component等效,Service实现类推荐使用的注解,不仅可以声明bean,而且提高可读性。
@Controller 派生注解,与@Component等效,Controller实现类推荐使用的注解,不仅可以声明bean,而且提高可读性。
1.2)bean注入的相关注解
@Autowired:按类型注入,
@Resource(name=""):按名称注入
@Resource():先按名称注入,如果没有再按照类型。
1.3)配置类相关注解
@Bean 注解在方法上,声明当前方法的返回值为一个bean。
@Configuration 声明当前类为配置类,内部常使用@Bean进行详细配置。取代了xml文件配置。
@ComponentScan 用于对Component进行扫描,可以配置扫描的包路径
1.4)@Value注解:为属性注入简单值
@RequestMapping 修饰方法,将请求路径映射到Controller对应的处理方法上。
修饰类,给请求路径添加访问前缀(二级路径)
@ResponseBody 将返回值转换成json数据,并响应给浏览器。
@RequestBody 将json格式的请求参数,封装到指定的JavaBean中。
@PathVariable 用于接收路径参数,比如@RequestMapping(“/hello/{name}”)申明的路径,参数前使用注解@PathVariable(“name”),就可以获取name对应的值。
@RestController 该注解为一个组合注解,相当于@Controller和@ResponseBody的组合,注解在类上,意味着,该Controller的所有方法都响应JSON格式数据。
1.地址栏参数或普通表单请求,如:age=18&gender=man,SpringMVC方法参数需要使用@RequestParam(“参数名”)获得参数值。
2.提交json类型数据,SpringMVC 方法参数需要使用@RequestBody 将数据封装到java对象中。
3.路径占位符:如 http://localhost:8080/user/findById/1,使用@RequestMapping(“findById/{id}”)匹配路径,使用@PathVariable(“id”)获得对应的参数值。
4.文件上传,修改表单请求为"multipart/form-data"方式,SpringMVC采用MultipartFile参数类型接收数据
@Controller 是@Component的派生注解,功能就是将被修饰的类添加到spring容器。
字面意思,用于修饰Controller层的组件,提高可读性。
修饰方法,将请求路径映射到Controller对应的处理方法上。
修饰类,给请求路径添加访问前缀(二级路径)
使用 @ResponseBody 注解将Java集合转换json数组,并将结果响应给浏览器。