华清远见重庆中心—JavaWeb总结/个人总结


HTTP状态码

常见状态码说明
200成功
404要访问的资源不存在
500服务器内部错误
405方法不允许

表单提交数据注意

  • 表单如果是get方式提交,无法在action中使用?提交数据。

  • 表单如果是post方式提交,可以在action中使用?提交数据

    <!--只会提交username的值,action中?后的str无法提交-->
    <form action="URL?str=hello" method="get">
        <input type="text" name="username">
        <input type="submit">
    </form>
    
    <!--参数都会提交,但地址栏只显示str,不显示username-->
    <form action="URL?str=hello" method="post">
        <input type="text" name="username">
        <input type="submit">
    </form>
    
  • 使用表单的隐藏域提交,无论get还是post方式,都能提交参数

    <form action="URL?参数=值" method="post">
        <!--该input不显示,但能提交str=hiddenStr-->
        <input type="hidden" name="str" value="hiddenStr">
        <input type="text" name="username">
        <input type="submit">
    </form>
    

web.xml文件中常用标签

web.xml是web模块的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

     <!--设置欢迎页面-->
    <welcome-file-list>
        <!--页面路径-->
        <welcome-file>login.html</welcome-file>
    </welcome-file-list>
    

    <!--设置全局错误页面-->
    <error-page>
        <!--如果遇到404状态码-->
        <error-code>404</error-code>
        <!--跳转指定页面-->
        <location>/404.html</location>
    </error-page>

    <error-page>
        <!--如果遇到空指针异常-->
        <exception-type>java.lang.NullPointerException</exception-type>
        <!--跳转指定页面-->
        <location>/error.html</location>
    </error-page>

   

    <!--声明Servlet-->
    <servlet>
        <servlet-name>test</servlet-name>
        <servlet-class>com.hqyj.hero_sys.servlet.TestServlet</servlet-class>
        <!--定义在该servlet中的初始化参数-->
        <init-param>
            <param-name>initParam</param-name>
            <param-value>保存在该servlet中的字符串</param-value>
        </init-param>
    </servlet>
    <!--映射Servlet-->
    <servlet-mapping>
        <servlet-name>test</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>

    <!--上下文参数,全局参数。以key-value保存-->
    <context-param>
        <param-name>contextParam</param-name>
        <param-value>保存在全局的字符串</param-value>
    </context-param>


    <!--
    配置过滤器,一个特殊的servlet
    <filter>
        <filter-name></filter-name>
        <filter-class></filter-class>
    </filter>

    <filter-mapping>
        <filter-name></filter-name>
        <url-pattern></url-pattern>
    </filter-mapping>
    -->

    <!--配置session,会话-->
    <session-config>
        <!--设置会话超时时间-->
        <session-timeout>5</session-timeout>
    </session-config>

</web-app>

Servlet的生命周期

构造方法一次–>init()一次–>service()–>destroy()一次

在第一次访问某个servlet时,执行

1.构造方法一次

2.init()方法一次

3.有service()方法执行service()方法,没有则执行doXXX()方法,如果都没有,报405状态码,表示请求不允许

4.当服务器停止时,执行destroy()方法一次

JSP

Java Server Pages

使用Java开发,运行在服务器上的页面,称为JSP。

JSP页面的后缀名为.jsp

由于最初由Servlet编写页面,会在Servlet中出现大量的HTML代码,使用极不方便,

由SUN公司主导推出JSP,在HTML页面中嵌入Java代码,简化了页面的编写过程,页面也成为动态页面。

JSP实际是一个java类,具体为一个Servlet,第一次访问某个JSP页面,相当于编译运行Servlet,所以会慢一些。

访问JSP的流程:编译对应的Servlet–>运行Servlet。

JSP的生命周期同Servlet。

使用JSP时,可以导入该依赖,在JSP中方便提示

<dependency>
    <groupId>javax.servlet.jsp</groupId>
    <artifactId>javax.servlet.jsp-api</artifactId>
    <version>2.3.3</version>
    <scope>provided</scope>
</dependency>

JSP的组成

1.HTML元素*

2.Java脚本*

<%
	java代码;
%>

3.表达式*

用于在页面中输出变量或字符串。

无需分号。

<%=变量%>

4.注释

jsp注释在访问jsp时不会在浏览器中看到

html注释在访问jsp时会再浏览器中看到

<%--注释--%>

5.指令

<%@ 指令名 属性="值"%>
  • page指令
    • 用于设置当前页面的属性
  • include指令
    • 用于嵌入其他页面
  • taglib指令
    • 用于导入其他标签库

6.声明

可以在这里定义方法、全局变量等

<%! 
    void fun(){}
%>

7.动作

使用标签定义一些功能。

<jsp:单词></jsp:单词> 
//包含另一张页面
<jsp:include page="路径"></jsp:include> 

路径问题

绝对路径

完整路径

相对路径

  • /

    从项目根目录出发。即域名+端口号

  • ./

    从当前位置出发

  • …/

    退出当前目录后出发

Servlet/JSP to Servlet/JSP/HTML

请求转发

request.getRequestDispatcher("目的路径").forward(request,response)
  • 使用请求转发跳转到目的地后,浏览器的地址栏是最初访问的路径
  • 可以在请求转发时,在request对象中保存数据,如request.getParameter()、request.setAttribute()
  • 在执行查询时,通常将查询后的结果保存在request对象中后,使用请求转发跳转到页面中

重定向

response.sendRedirect("目的路径");
  • 使用重定向跳转到目的地后,浏览器的地址栏是最终访问的目的地路径
  • 如果在重定向时使用request对象保存数据,后续无法获取保存的内容
  • 在执行增删改后使用重定向跳转到目的地,防止重复提交

跳转过程中传递参数

  • 由页面发送数据到servlet或jsp,通常使用表单元素或在某个URL后使用"?参数=值"方式提交参数,获取时使用request.getParameter(“参数”)获取

    <a href="xxxx?id=11">删除</a>
    
    <form action="xxxx" >
        <input type="hidden" name="id" value="11">
    </form>
    
    
    //返回值为String
    String str=request.getParameter("id");
    
  • 由servlet发送数据到页面,使用request.setAttribute(String str,Object obj)保存obj到请求对象中,命名为str,获取时使用request.getAttribute(String str)

    public class XXXServlet extends HttpServlet{
        protected void service(HttpServletRequest req,HttpServletResponse resp){
            List obj = new ArrayList();
            req.setAttribute("list",obj);
            req.getRequestDispatcher("xxx.jsp").forward(req,resp)
        }
    }
    
    <%
    	//返回值为Object类型
    	Object obj = request.getAttribute("obj");
    	List list = (List) obj;
    %>
    

    四大作用域对象

    作用域:共享数据的区域。

    如request就是一个作用域对象,request.setAttibute(String str,Object obj)在请求作用域中保存数据,request.getAttibute(String str)在请求作用域中获取数据

    pageContext

    当前页对象。共享数据的范围为当前页面。

    如果不在一个页面,数据无法读取。

    request

    请求对象。共享数据的范围为一次请求。

    只要请求不改变(不重定向),数据一直保存在请求对象中。

    session

    会话对象。共享数据的范围为指定的会话时间内。

    默认会话超时为30分钟,表示如果30分钟没有对该站点进行访问,自动销毁会话。

    application

    应用程序(项目)对象。共享数据的范围为整个项目中。

    作用域范围

    最大到最小

    application>session>request>pageContext

    以上的作用域对象,都有这几个方法

    //向作用域中保存数据
    作用域对象.setAttribute(String str,Object ojb);
    //读取作用域中保存的数据
    作用域对象.getAttribute(String str);
    //移除作用域中保存的数据
    作用域对象.removeAttribute(String str);
    

    在servlet中使用

    • pageContext

      servlet中不会使用pageContext,它本身就是一个类,定义成员变量即可

    • request

      使用doGet()/doPost()/service()等方法的HttpServletRequest参数即可

      protected void service(HttpServletRequest req, HttpServletResponse resp){
          //req即是request对象  
      }
      
    • session

      protected void service(HttpServletRequest req, HttpServletResponse resp){
          //通过req对象调用getSession()方法获取session对象
          HttpSession session = req.getSession();
      }
      
    • application

      protected void service(HttpServletRequest req, HttpServletResponse resp){
          //通过getServletContext()方法获取application对象
          ServletContext application = getServletContext();
      }
      

    总结

    • pageContext对象用于jsp页面中,保存的数据只能在当前页面使用
    • request对象常用于servlet中保存查询后的集合,使用请求转发跳转到jsp页面中输出集合
    • session对象常用于登录后保存登录的用户,在其他页面中共享用户对象
    • application对象保存共享于整个项目中的数据

Ajax

AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。

AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。

任何的浏览器都支持ajax。通过原生的js使用ajax极不方便,这里使用jquery封装后的ajax使用。

使用

1.在页面中引入jquery文件

<script src="jquery文件路径"></script>

2.给某个节点绑定事件后使用ajax提交数据

<script>
	$("#btn").click(()=>{
        $.ajax({
            //访问的地址
            url:'URL地址',
            //提交的数据,以键值对的形式提交,也可以提交单个数据
            data:{
                id:123,
                op:"xxx"
            },
            //提交方式
            type:"post",
            //访问成功后的回调函数
            succuss:(res)=>{//res为访问URL地址后的返回值
                
            },
            //访问失败后的回调函数
            error:(res)=>{}
        });
    });
</script>

EL

Expression Language 表达式语言

是为了使JSP中的输出写起来更加简便,替换JSP中的<%=%>,即表达式。

主要输出保存在某个作用域中的数据。

特点

  • 减少代码(获取对象、转换对象、获取对象属性)

    • 如果通过"某个作用域对象.setAttribute(String str,Object obj)"方法保存的对象,

      在JSP页面中,如果用表达式,写为<%=str>;如果使用EL,写为${str}。

      会依次从pageContext–>request–>session–>application中获取指定对象,如果一旦从某个作用域中获取到了对象,就不再判断后续作用域。

      也可以指定从某个作用域中获取对象,如${session.str}表示从session作用域中获取对象。

  • 免去非空判断

    • 如果要使用的某个对象不存在,不会输出null,而是输出空字符串""

使用

1.获取保存在作用域中的对象

  • 获取保存在某个作用域中的对象:${对象名}

  • 从指定的作用于中获取对象

    作用域单词对应作用域代码
    pageScope当前页pageContext${pageScope.对象}
    requestScope请求request${requestScope.对象}
    sessionScope会话session${sessionScope.对象}
    applicationScope项目application${applicationScope.对象}
  • 输出对象的属性

    ${对象名.属性名}   
    ${对象名["属性名"]}    
    
    要保证该属性有对应的get方法    
    
  • 输出对象的方法返回值

    ${对象名.方法名()}   
    

JSTL

Java Server Page Standarded Tag Library JSP标准标签库

可以使用JSTL中的特定标签,来替换JSP中常见的java代码,如循环判断等。减少JSP中的java代码,提高页面的可读性。

使用

  • 导入jstl依赖

    <!-- jstl -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    
  • 在JSP页面中,加入标签库指令

    <!--在当前页面中使用jstl,以c为标签前缀-->
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    

    这句话可以在使用循环时自动生成

  • 具体使用

    • 定义变量或给变量赋值

      <c:set var="变量名" value="值"></c:set>
      <c:set var="name" value="admin"></c:set>
      
    • if判断

      <c:if test="判断条件">
      	满足时执行
      </c:if>
      
      session.setAttribute("user",用户对象);
      
      <c:if test="${empty user}">
      	<span>请登录</span>
      </c:if>
      
      <c:if test="${!empty user}">
      	<span>${user.username}</span>
      </c:if>
      
    • 遍历List集合

      //如在servlet中,将查询到的集合保存在request对象中
      request.setAttribute("list",查询到的集合)
      <table>
          <!--<c:forEach items="要遍历的集合" var="遍历出的每个对象">-->
          <c:forEach items="${list}" var="obj"> 
              <tr>
                  <td>${obj.属性}</td>
              </tr>
          </c:foreach>
      </table>
      
    • 遍历Map集合

      <%
          HashMap<String,String> hm = new HashMap();
          hm.put("yyds","永远单身");
          hm.put("awsl","阿伟死了");
          hm.put("u1s1","有一说一");
          application.setAttribute("hm",hm);
      %>
      <c:forEach items="${hm}" var="kv">
          <%--${键值对.key} 获取键   ${键值对.value} 获取值   --%>
          <h2>${kv.key}--${kv.value}</h2>
      </c:forEach>
      

JSP内置对象

在JSP中,可以不用定义,就能直接使用的对象,称为内置对象。

一共有9个内置对象

“rrppsoace”

  • pageContext

    作用域对象,当前页面作用域。

  • request

    作用域对象,请求作用域。

  • session

    作用域对象,会话作用域。

  • application

    作用域对象,项目作用域。

  • response

    响应对象

  • out

    输出对象,相当于Servlet中的response.getWriter()方法的返回值对象

  • page

    表示当前页面自身对象,相当于servlet中的this

  • config

    配置对象,获取servlet的配置信息

  • exception

    异常对象,只能使用在有isErrorPage="true"声明的jsp页面中,用于获取异常对象

Session和Cookie

session

session称为会话,是一个作用域,使用session.setAttribute()保存数据,使用session.getAttribute()获取数据。

默认session会话有效期为30分钟,可以更改,超时或关闭浏览器,session失效。

保存在session中的数据,可以在同一个站点下的不同页面中共享。

session共享数据的原理

  • 访问任意JSP页面时,默认都会创建一个JSESSIONID(可以取消自动创建),是一段session编号,保存在一个cookie文件中

    <%--所有jsp页面中,默认开启了session--%>
    <%@ page session="true"%>
    
    <%--让页面默认不使用session--%>
    <%@ page session="false"%>
    

    自动生成的cookie文件信息,可以看出,随着浏览器关闭,session到期

  • 再次访问该页面时,会查询JSESSIONID是否存在,如果存在,直接使用,如果不存在,重新创建新的JSESSIONID

  • 保存该JSESSIONID的cookie文件,有效期为浏览会话结束。所以关闭浏览器,session失效

session对象常用方法

常用方法说明
getAttribute(String str)获取session中保存的数据,返回值为Object类型
setAttribute(String str,Object obj)将obj保存在session中,命名为str
removeAttribute(String str)移除保存在session中的对象str
invalidate()销毁session
getId()获取JSESSIONID
getMaxInactiveInterval()获取session有效时长,单位为秒,默认为1800
setMaxInactiveInterval(int second)设置session有效时长,单位为秒
getCreationTime()获取session创建时间,返回值为时间毫秒
getLastAccessedTime()获取最后一次访问session的时间,返回值为时间毫秒

设置项目全局session有效时长

在web.xml文件中设置,单位为分钟

<!--设置项目中所有session的有效时长,单位分钟-->
<session-config>
    <session-timeout>5</session-timeout>
</session-config>

cookie

cookie是一个用于保存数据的对象,实际是一个保存在客户本地的文件。关闭浏览器,cookie依然存在。手动清理或自动超时清理后,数据随之消失。

cookie通常用于更久地保存数据,即便关闭浏览器,也能一直存在。如登录信息、购物车信息等

cookie中保存的数据有上限(4kb),

cookie在浏览器中保存的数量也有上限(30~300根据浏览器不同略有变化)。

创建cookie

//Cookie(String name,String value);
Cookie ck = new Cookie("str","hello");
//设置有效时长,单位为秒,如果不设置,关闭浏览器,cookie失效
ck.setMaxAge(7*24*3600);//7天

保存cookie

response.addCookie(ck);

遍历cookie

Cookie[] cks = request.getCookies();
for(Cookie ck : cks){
    ck.getName();//获取name
    ck.getValue();//获取value
}

session和cookie的对比

  • session中保存的数据可以是任意类型,没有大小限制;cookie中保存的是键值对,单个值大小上限为4kb

  • session中保存的数据存在服务器中,cookie中保存的数据存在浏览器中。

  • session到期或随着浏览器关闭而失效,cookie如果设置了有效时长,即使关闭浏览器也会存在,在到期或手动清理时失效

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值