javaWeb基础知识点

javaWeb基础


前言

本文是学习javaWeb时的一些知识点总结:

一、配置tomcat环境变量

  • JAVA_HOME=jdk的根
  • CATALINA_HOME=tomcat服务器的根
  • PATH=%JAVA_HOME%\bin;%CATALINA_HOME%\bin

二、Servlet对象的生命周期

  • servlet对象的生命周期是由tomcat服务器负责
  • 用户发送第一次请求的时候servlet对象被实例化,servlet对象被创建出来以后,tomcat服务器马上调用servlet对象的init方法,init方法执行以后,tomcat对象立马调用servlet对象的service方法
  • 注意:无参构造方法和init方法只在用户发送第一次请求的时候执行,只执行一次
  • 在以后发送请求后,servlet对象并没有新建,还是使用之前创建好的servlet对象,直接调用servlet对象的service方法
  • 关闭服务器之后,Servlet的destroy方法被tomcat服务器调用一次。destroy方法执行的时候,servlet对象依旧存在,当destroy方法执行完成以后,sevlet对象才被tomcat服务器销毁

三,ServletConfig接口:

  • ServletConfig对象被翻译为Servlet对象的配置信息对象,一个Servlet对象匹配一个配置信息对象
  • ServletConfig对象包装的对象为web.xml文件中标签的配置信息
  • ServletConfig的常用方法:
// 通过初始化参数的name获取value
public String getInitParameter(String name);
// 获取所有的初始化参数的name
public Enumeration<String> getInitParameterNames(); 
// 获取ServletContext()对象
public ServletContentext getServletContext();
//获取servlet的name
public String getServletName(); 

四,servletContext接口:

  • ServletContext是由tomcat服务器实现的,并且是在服务器启动的时候创建的,ServletContext对象只有一个,在关闭服务器时ServletContext对象被销毁。
  • ServletContext对象对应的是整个web.xml文件
  • ServletContext接口中的常用的方法:
// 通过初始化参数的name获取value
public String getInitParameter(String name);   
// 获取所有的初始化参数的name
public Enumeration<String> getInitParameterNames(); 
// 获取上下文的根
String path = application.getContextPath(); 
// 获取文件的绝对路径
public String getRealPath(String path);
// 记录日志
public void log(String message);
public void log(String message,Throwable t);

// 从servletContext中存
public void setAttribute(String name,Object value);
// 测试
User u = new User("jack",123);
application.setAttribute("userObj",user);

// 取
public Object getAttribute(String name);
//测试
Object userObj = application.getAttribute("userObj");

// 删除数据
public void removeAttribute(String name);

五,GET与POST

get和post请求的使用时机:
  • 只有使用form表单,并且form表单中的method属性值为:method="post"使用post请求发送数据。
  • 在浏览器地址栏上输入URL直接响应的都是GET请求,点击超链接的也是GET请求,使用form表单提交数据的时候没有method属性的时候都使用get请求。
GET请求和POST请求的区别

1.get请求发送数据的时候,数据会在URI后面,并且URI后面有个?,?后面为数据,get请求在请求行上发送数据

  • post请求发送数据在请求体当中发送数据。
  • 不论是get还是post请求,发送数据的格式是相同的,只是发送数据的位置不同
    4.get请求只能发送普通的字符串,并且发送字符串的长度有限制。get请求是安全的,它只是为了从服务器上获取数据,并且支持缓存。
    5.post请求可以发送任何类型的字符串,可以发送大数据量,它适合向服务器端发送数据,post请求不支持缓存

六,HttpServletRequest接口

  • 用户发送请求的时候,遵循了Http协议,发送的说http的请求协议,tomcat服务器将http协议中的信息数据全部解析出来,服务器再将这些信息封装到HttpServletRequest对象当中。
  • HttpServletRequest接口中的常用方法:
    • 获取用户提交的数据:
ring getParameter(String name)  // 获取value这个一维数组的第一个元素
Map<String,String[]> getParameterMap() //获取map
Enumeration<String> getParameterNames()  // 获取map集合中的key
String[] getParameterValues(String name)  //根据key获取map集合中的value
  • 请求域对象
    请求域对象比应用域对象范围小很多,生命周期短很多。请求域只在一次请求内有效。
  • 请求域对象的常用方法
void setAttribute(String name,Object obj);
Object getAttribute(String name);
void removeAttribute(String name);

//其他常用方法:
// 获取客户端的ip地址
request.getRemoteAddr();

//设置请求体的字符集(tomcat10以后,request请求体当中默认的为:utf-8)
request.setCharacterEncoding("UTF-8"); // 处理post请求的乱码问题

//get请求处理乱码问题:get请求的数据出现在请求行上的,
get请求不会出现乱码,默认的URI的编码为utf-8
    
    
// 获取应用的根路径,使用次数较多
String contextPath = request.getContextPath();

// 获取前端的请求方式
String method = request.getMethod();

// 获取请求的URI    结果: /servlet/testRequest  带项目名
String requestURI = request.getRequestURI();

// 获取Servlet路径  结果: /testRequest   不带项目名	
String servletPath = request.getServletPath();

域的选用原则:尽量选择小的域对象,因为占用的资源少

  • 实现两个Servlet之间的数据共享
    • 可以将数据放在请求域对象中,然后实现两个Servlet的跳转,保证两个servlet在同一个请求当中。
	// 在Servlet01当中转发给Servlet02
 // 第一步:获取请求转发器对象 (参数为path,也就是web.xml文件中的<url-pattern>标签对象)
    RequestDispatcher requestDispatcher = request.getRequestDispatcher("/servlet02");
    // 第二步:调用RequestDispatcher对象的forward()方法,进行转发
    requestDispatcher.forward(request,response);

注意:转发的时候的path是以"/"开始,但是不加项目名

七,会话机制

Session

  • 用户打开浏览器到最后关闭浏览器,叫做一次会话
  • session是将会话状态保存在服务器端上
  • request请求的生命周期太短不能保存会话状态
  • session的实现原理(b站javaWeb老杜总结):
    • 在web服务器中有一个session列表,类似于map集合。这个map集合的key存储的是sessionid,value存储的是对应的session对象
    • 用户发送第一次请求的时候,服务器会创建一个新的session对象,同时给session对象生成一个id,然后web服务器会将session的id发送给浏览器,浏览器将sessionid保存在缓存中
    • 用户发送第二次请求的时候:会自动将浏览器中缓存的sessionid发送给服务器,服务器获取到sessionid,然后从session列表中查找对应的session对象。
    • 关闭浏览器会话结束,浏览器中的保存的sessionid消失。重新打开浏览器之后,浏览器中没有这个sessionid,也就找不大对应的session对象,等同于会话结束。
  • 使用java获取session对象。
// 从服务器当中获取session对象,如果session对象步存在,就新建一个session对象
Httpsession s = request.getSession();
// 作用:保存会话状态

// 向会话域当中绑定数据
session.setAttribute();
// 从会话域当中取出数据
session.getAttribute();
  • session的手动销毁:
    • session.invalidate();
    • 安全退出,告诉服务器浏览器关闭

Cookie

  • cookie最终保存在浏览器客户端上
  • cookie是http协议的一部分,cookie是由name=value这种形式组成的,都是String。
  • 例子:
Cookie k = new Cookie("proid","6564654");
例子:
        Cookie c = new Cookie("proid","6544114858");
		c.setPath("路径");  // 表示只要是这个路径下的请求路径都会提交cookie给服务器
        c.setMaxAge(-1);
        response.addCookie(c);

// 设置有效时间: 一个小时,没有设置有效时间,默认保存在浏览器运行内存中,只要设置了,cookie一定存储到硬盘文件当中
k.setMaxAge(60 * 60);
// 设置cookie的有限期为0,表示该cookie被删除,作用:删除浏览器上的同名cookie
k.setMaxAge(0);
// 设置cookie的有限期小于0,表示cookie不会被存储,不会存储在硬盘中,会保存在浏览器的运行内存中
  • 通过request对象返回cookie数组:
Cookie[] cookies = request.getCookies();
// 注意:这个方法的返回null,如果浏览器没有提交cookie,这个方法返回值就是null
// 服务器程序接收cookie
Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            for (Cookie c:
                 cookies) {
                String name = c.getName();
                String value = c.getValue();
                System.out.println(name + "=" + value);
            }
        }

八,JSP

  • jsp实际上为一个Servlet,jsp的生命周期与Servlet的生命周期完全一致
  • 在浏览器上访问jsp文件的时候,实际上底层执行的是这个jsp文件的class文件。jsp文件会被服务器翻译为java文件,然后服务器又会将java文件编译为class文件。
  • jsp和Servlet的区别:
    • Servlet: 收集数据(逻辑处理,业务处理)
    • jsp: 数据的展示
  • jsp的基础语法总结
 - jsp直接编写普通字符串:
 - 翻译到service方法的out.write("这里");
 - <% %>
 - 翻译到service方法体内部
 - <%! %>
 - 翻译到service方法体的外部
 - <%=%>
 - 翻译到service方法体内部,翻译为out.print();  = <%=%>
 - <%@page contentType="text/html;charset=UTF-8"%>
 - page指令,contentType设置相应的内容类型
  • jsp的指令
    • 指令的使用语法:<%指令名 属性名=属性值 属性名=属性值%>
    • page指令的常用属性:
<%page session="false"%>  
jsp的内置对象session。true表示启动jsp的内置对象session,没有的话会创建session对象。如果为false,表示不启用session内置对象,并且无法使用内置对象
 
<%page contentType="text/html" pageEncoding="utf-8"%> contentType属性用来设置响应的内容类型
														pageEncoding设置响应时采用的字符集

<%@page import=""%> 导包

<%@page errorPage="/error.jsp"%>  
当前页面出现异常之后,跳转到error.jsp页面。指定出错以后的调转页面
<%--使用error.jsp跳转以后对我们开发人员就极不友好,所以使用9大内置对象之一:Exception--%>
<%@page isErrorPage="true" %>  isErrorPage=true 确保Exception有效
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>error page</title>
</head>
<body>
<h1>网络繁忙</h1>
<%
    exception.printStackTrace();   <%--打印异常信息到后台控制台--%>
%>
</body>
</html>

九,EL表达式

  • EL表达式的作用:
    • 替带jsp文件中的java代码
    • 从域中取出数据,转换为字符串,输出到浏览器
  • EL表达式的语法:
    • ${}
    • EL表达式优先从小的域中取出数据
    • pageContext < request < session < application
  • 使用EL表达式的注意事项:
<%
    request.setAttribute("username","张三");   
%>
<%=request.getAttribute("username")%>  =  ${username}
<%
	<%--可以存储引用类型的数据--%>
	User user = new User();
	user.setUsername("jack");
	user.setPassword("123456");
	request.setAttribute("userobj",user);
%>
${userobj.username}  底层调用的是:User对象的:getUsername();方法
<%--[] 没有加双引号的话,会将其看作变量。如果带双引号,就去user对象寻找username属性--%>
${userobj["username"]} 


<%--在el表达式中指定范围来读取数据--%>
<%--四个隐式对象  pageScope,requestScope
	sessionScope applicationScope
--%>
${pageScope.username}
${requestScope.username}
${sessionScope.username}
${applicationScope.username}

<%--EL表达式从Map中取数据--%>
${map.key}

<%--EL表达式从数组中取数据,不会出现数组下标越界的问题--%>
${ArrayName[下标]}

<%--EL表达式从集合中取出数据--%>
${myList[下标]}  会输出集合所有的元素,也可以使用下标

EL表达式对于NULL进行了预处理,在页面展示的时候为空白

  • page指令忽略EL表达式
<%@page isElIgnored="true"%>  
忽略整个页面的el表达式

<%--忽略其中某一个表达式--%>
\${username}
  • EL表达式中的隐含对象

    • pageContext

      • <%=pageContext.getRequest()%>
        
        ${pageContext.request}   <%-- 获取request对象--%>
        
        <%--通过EL表达式获取应用的根--%>
        ${pageContext.request.contextPath}
        
    • param

      • <%--获取用户提交的数据 , 获取的是一维数组中的第一个数据--%>
        用户名:${param.username }
        
    • paramValues

      • <%--获取的是数组,采用【】取出数据--%>
        爱好:${paramValues.aihao[0]} 
        
    • initParam

      • <%--获取servlet上下文对象--%>
        ${initParam.pageSize}   pageSize是xml文件中的name属性中的值
        
  • EL表达式中的运算符

    • 加号运算符只能做求和运算,不能进行字符串的拼接
    • EL中的 == 和 != 都调用了equals()方法
    • empty 判断是否为空,为空结果为true,不为空结果围为false
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值