JavaWeb回顾

WEB回顾:

1.servlet生命周期:
Servlet创建的时间:外界首次访问的时候被创建并且初始化,后来的只要是请求当前这个servlet程序,就由它继续来提供服务,servlet不再创建和初始化。
Servlet销毁时间:项目从服务器移除或者web服务器正常关闭。

2.ServletConfig接口:它表示的是与某个Servlet本身有关系的一些配置信息。
它可以在web.xml文件中配置servlet的初始化参数或者根据指定的key值来获取value。

3.servletContext对象:首先它是一个域对象,其次它可以获取项目运行中的路径问题,还可以获取与项目相关的一些配置信息。
当它是域对象的时候,setAttribute()存放key和value;getAttribute()根据key获取指定的value值;removeAttribute()删除key在容器中所对应的key和value值。
访问项目的根路径:ServletContext.getContextPath();
访问项目的真实路径:ServletContext.getRealPath();
将来使用什么应用打开文件:ServletContext.getMimeType();
application的数据类型:ServletContext

4.HTTP协议规定:请求和响应都是由三部分组成:请求行、请求头、请求体
响应行: 协议 状态码 描述
响应头: key : value
响应体: getWriter或getOutputStream 写出的数据。
程序处理的Request和Response都是基于HTTP协议的。

5.response对象:辅助servlet将响应发送到客户端的对象。servlet容器创建ServletrResponse对象,并把它作为参数传递给servlet的service方法。
解决响应乱码问题:resp.setContentType(“text/html;charset=utf-8”);
给客户端响应数据:resp.getWrite().write(“响应数据”);
// 不能与上边放在一起响应数据ServletOutputStream out=resp.getOutputStream();
Out.write(“你好,hello”.getBytes());
设置响应的状态码:resp.setStatus(400);

6.request对象:将客户端的请求提供给servlet的某个对象。servlet容器创建ServletRequest对象,并把该对象作为参数传递给servlet的service方法。(ServletRequest接口,它不面向任何的协议。而真正在我们自己定义的Servlet程序中,一般都是复写doXxx方法,而doXxx方法上接收的request和response都是基于HTTP协议。)
HttpServletRequest对象:
它主要封装的基于HTTP协议的请求内容:请求行、请求头、请求体的数据、请求转发。
请求行的信息获取:req.getMethod()用户当前servlet的请求方式;
req.getRequestURI()包含项目名在内的请求资源路径;
req.getRequestURL().toString();返回在stringBuffer中的请求全路径;
getServletContext().getContextPath();客户端请求的资源全路径;
uri.substring(contextPath.length());截取;
req.getRemoteAddr();获取客户端ip地址; req.getRemoteHost();主机名req.getRemotePort();端口号;
req.getQueryString();url地址?后面使用key=vslue拼接的数据;
**请求头的获取信息:**req.getHeader(“xxx”);根据指定头的key获取对应的value值;
getHeaderNames(): 请求中携带的所有头中的key值;
请求防盗链:
(根据getHeader方法获取referer头中的信息,如果获取到的referer==null<也就是没有携带url信息>一定是盗链)

resp.setContentType("text/html;charset=utf-8");
        //  获取到referer头信息
        String referer = req.getHeader("referer");
        //  判断referer中有没有值
        System.out.println("referer = " + referer);
        if( referer == null ){
            //  一定是盗链
            resp.sendRedirect("/day03/hello.html");
            return ;
        }
        //  请求头中有referer,但有可能还是盗链
        if( referer.endsWith("/day03/hello.html") ){
            // 不是盗链
            resp.getWriter().write("恭喜您!!!");
        }else{
            //  还是盗链
            resp.getWriter().write("您是盗链访问,5秒跳转到我们的首页");

7.获取客户端的请求数据:req.getParameter(“xxx”);获取指定页面下key对应的value;(在servlet中通过getParameter方法获取页面提交的数据:如果tomcat服务器使用的8.0以上的版本,这时get提交的数据不会乱码)
如果请求的是一个key对应多个value:req.getParameterValues(“xxx”);

8.Post请求的乱码解决:req.setCharacterEncoding(“utf-8”);

9.请求重定向:resp.sendRedirect(“http://baidu.com”);是客户端发送了多次请求。并且浏览器的地址栏会发生改变。请求重定向的资源可以是当前服务器中的资源,也可以别的服务器中的资源。

10.请求转发: req.getRequestDispatcher("/request5").forward(req,resp);
服务器接收到浏览器发来的请求,在服务器内部对接收到的请求进行的跳转,此时可能是别的资源将数据响应给了客户端。

**区别:**请求重定向和请求转发都可以让浏览器获得另一个url所指向的资源,都是进行资源的跳转。
1.重定向访问结束后,浏览器的地址栏url会变成新的url;而请求转发的url地址不变;
2.重定向的调用者和被调用者使用各自的request和response对象,它们是独立的请求响应过程;而请求转发的调用者和被调用者使用的时共有的request和response对象。
3.重定向不仅可以定向到当前应用程序的其他资源,还可以定向到同一个站点的其它应用程序的资源或者其它站点资源;而请求转发只能给同一个web应用中的组件。

11.request作为域对象:
req.setAttribite(“name”,”明明”);request域中存放对象;
req.getAttribite(“name”);获取name所对应的value值;
req.getServletContext.setAttribite(“name”,”明明”);存放对象;…get(“key”)

12.请求的过程

每次的请求tomcat都会创建request和response对象,所以将request作为共享对象,等到本次请求结束,它所对应的所有请求数据也都会消失。

13.web中路径问题
如果是给服务端使用就(“/资源名”);是请求转发的路径
如果是给客户端使用(“/项目名/资源名”);请求重定向、超链接、form表单(action=””)、图片、script、img、link…

14.cookie:是一小段文本信息,伴随着客端请求在浏览器和web服务器之间传递,在用户的一波操作下,某些数据会被浏览器以cookie的形式保存,等到客户端下次访问这些服务的时候,浏览器中的这些数据就会被携带引发,继而操作。
Cookie的创建和发送:
Cookie cookie = new Cookie(“name”,“明明”);
要将cookie添加到resp中:resp.addCookie(cookie);
用request方法获取cookie:req.getCookies();
临时cookie是仅在浏览器运行期间存在,关闭则消失的那种。
持久cookie是指可以人为的在程序中设置(cookie.setMaxAge(60*60));
删除cookie将setMaxAge设置为0.
Cookie设置有效域名setDomain(“域名”);
Cookie设置路径setPath(“路径”);
15.session:JavaWEB中Session的主要作用是在服务器内部来临时存储浏览器和服务器之间会话时的数据。
Session作为一个域对象,主要作用于客户端的某个浏览器下的,前提是同一浏览器访问某个网站下的任何资源,这时服务器内部就会维护着同一个session,为当前这个浏览器服务。
服务器通过访问已经存在的某个servlet程序,发现响应头中有cookie信息,是
JSESSIONID的Cookie数据,浏览器访问到服务器之后,服务器会创建出和当前浏览器对应的Session对象,并且这个Session有一个唯一的标识JSESSIONID,服务器在给这个客户端响应数据的时候,会将这个JSESSIONID作为Cookie的name,JSESSIONID的值,作为Cookie的value给客户端响应中添加这个Cookie。后续客户端浏览器访问服务器的时候,就会携带JSESSIONID的这个Cookie数据,服务器根据JSESSIONID,就能找到唯一的Session对象,从而区分是那个浏览器的session.

16.session的生命周期
Session的创建:当在程序中浏览器访问到服务器,服务器并不会立刻创建Session对象,而是在servlet中我们使用request对象调用getSession方法,这时tomcat会判断基于当前这个浏览器有没有sessoin,如果没有就会创建基于这个浏览器的sessoin对象。后续再调用getSession方法的时候,就直接获取session,而不再创建Session。
Session的销毁:当session时间过期之后;
当项目被从服务器移除之后;
当调用HTTPSession接口中的销毁方法(invalidate())时;
当session被非正常方式关闭tomcat时(session不能被序列化)。

17.tomcat的lib目录下。Jar包

18.Jsp文件不能直接给客户端响应:JSP文件在服务器内部会被服务器进行转换(翻译),最终都会被转成一个Servlet程序

19.第一次访问jsp文件慢是因为jsp文件不能直接响应给客户端,外界第一次访问JSP文件的时候,tomcat服务器需要将JSP文件翻译成java文件,然后编译成class文件,最后是整个class文件(Servlet程序)给客户端响应数据。

20.Jsp指令:它主要是规范或者指导一些行为操作。(page、include、taglib)
指令的格式:<%@ 指令名 属性名 = 值,属性名 = 值 …… %>
A:page指令是用来定义JSP页面的一些默认行为规则:页面能够使用哪些编程语言、编码、能够直接使用session、错误跳转、缓冲区大小等等。
language=“java” : 限定当前JSP页面能够使用什么编程语言。
contentType=“text/html; charset=UTF-8” : 它是告诉将来的客户端使用什么编码解析响应的数据,以及响应的数据的MIME类型.
pageEncoding=“UTF-8” : 它是告诉编辑器,当前JSP采用什么编码表保存。
import导入jsp页面上需要使用的类或接口.
B:include指令主要是用来在某个JSP页面中引用别的JSP页面。
include指令称为静态包含:不管有多少个JSP页面,如果他们都被包含在同一个JSP文件中,在JSP被翻译成Java文件的时候,就已经被嵌入到其中了,而不是将多个不同的JSP页面翻译成各自的java文件。
C:taglib指令

21.EL表达式:从JavaWEB的域对象(request、session、ServletContext)中获取数据。

22.jsp的内置对象
request:客户端的请求信息被封装到request对象中,通过它才能了解客户需求进而做出响应;
response:包含响应客户请求的有关信息,但在jsp中很少直接用它;
session:客户端与服务器的依次对话,从客户端连接到服务器的一个WebApplication开始,直到客户端与服务器断开为止;
servletConfig(config):是一个servlet初始化时,jsp引擎向它传递信息用的,包括servlet初始化所用的参数(属性名和属性值构成)以及服务器的有关信息(传递一个servletContext对象);
ServletContext(application):实现用户间数据共享,可存放全局变量,服务器的启动和关闭决定了application的生命周期,在此期间对象一直存在,可以对此对象的同一属性进行操作,每个操作都将影响其他客户对此的访问;
pageContext: 它可以获取到其他的8个内置对象,或者是给域对象中设置数据、获取数据、删除数据。
page:指向jsp页面本身,它本身代表的JSP这个对象,但是被提升Object类型,在JSP页面上将Page当做第四个域对象使用;
out:字符输出流对象,可以将数据写到JSP自己的缓冲区中。(JspWrite类的实列,是向客户端输出内容常用的对象;)
exception:异常信息,当页面运行发生了列外就产生它(jsp页面使用时要吧isErrorPage设置为true,否则无法编译)。
page作为四个域中最小的范围的域对象。
page < request < session < application
page 域:只能在当前jsp页面存在。每个page对应的都是一个独立的JSP。
request:只要是同一次请求,request共享。
session:只要是同一个浏览器。
application:当前项目全部共享。

23.EL:Expression Language 表达式语言。
它主要有:获取域中的数据 ,背后对应的Java,PageContext中的getAttribute或findAttribute
简单的运算:算术运算、比较运算等;简单的判断;操作容器或Java对象的属性值

24.获取域中的值:在Servlet中给request、session域中存放数据,转发到JSP页面上,通过.EL表达式获取数据:
el指定范围获取值等价于:pageContext.getAttribute(“key值” , 范围);
如果不知道数据在哪个域中,使用el的时候可以不指定范围,相当于pageContext.findAttribute(“key值”)

25.el获取容器中的数据:后台查询的数据存储的集合容器中,在返回到servlet中之后,将集合容器直接存储到request域中,转发到jsp上,直接通过el就可以取出集合中的数据。

26.MVC
M: model 数据模型 Java对象,主要负责数据库封装
V: view 视图 jsp、html,主要是用来展示数据(通常由jsp实现)
C: Controller 控制器 servlet,主要负责数据接收将数据封装到model上,或者将model的数据转交给view。(通常由servlet实现)

27.上传的客户端使用的浏览器:在浏览器中我们需要书写form表单。
1、form表单的提交方式必须是post
2、表单的enctype必须是multipart/from-data类型
3、form中的input标签必须包含name属性

如果客户端使用的表单enctype类型是multipart/form-data类型,在Servlet中不能使用request.getParamter方法获取客户端提交的参数。可以使用request中的getInputStream()直接获取字节输入流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值