华清远见-重庆中心-JavaWeb阶段技术总结/个人总结

本文介绍了B/S和C/S两种模式的工作方式,重点讲解了JavaWeb的开发,包括Tomcat服务器、Maven管理工具、Servlet的创建和生命周期,以及JSP页面的构成和数据传递。还提到了HTTP状态码、页面跳转方式、请求响应乱码处理、以及JSP内置对象和EL表达式。此外,讨论了三层架构、监听器和过滤器在JavaWeb开发中的作用。
摘要由CSDN通过智能技术生成

B/S模式 和 C/S 模式

B/S模式

全称

Browser/Server浏览器/服务器模式

工作方式

用户只需要一个浏览器即可访问服务器。

C/S模式

全称

Clint/Server客户端/服务器模式

工作方式

用户需要下载客户端才能访问服务器。

JavaWeb

JavaWeb是什么?

是使用Java开发Web服务的技术,统称为JavaWeb。

JavaWeb的实质

就是B/S模式下的软件开发,开发综合性的服务网站。

Tomcat的特点

免费、开源、轻量级,在中小型系统中普遍被使用。

官网

https://tomcat.apache.org/

Maven

Maven是什么?

用于结构化管理jar文件的工具。

原理

通过在Maven项目中加入某个jar文件的依赖,让其自动从Maven云仓库中下载对应的jar文件。

使用IDEA创建基于Maven的Web项目

步骤

  1. 新建webapp模板。
  2. 设置项目名称和路径。
  3. 3.设置Maven配置文件。
  4. 从Maven云仓库中搜索所需的jar文件。
  5. 粘贴到项目中的pom.xml文件中的dependencies标签中。
  6. 在src目录下新建编写类的java目录。
  7. 修改项目的web.xml版本为4.0。
  8. 配置tomcat服务器。
  9. 部署创建好的项目到Tomcat服务器中。
  10. 验证创建及配置是否成功。

HTTP状态码

作用

用特定数字表示状态。

常见状态码

状态码说明
200成功
400资源未找到
500服务器内部错误(就是服务端的代码问题)
405方法不允许

Servlet

Servlet是什么?

Server+Applet 运行在服务器上的程序。

创建步骤

  1. 在项目中导入Servlet相关依赖。
  2. 在项目的java目录下,创建一个类,继承HttpServlet,重写doGet和doPost方法。(也可以直接创建service()替代这两个方法,但两者不能共存)。
  3. 在web.xml中设置Servlet的请求映射。
  4. 访问Servlet验证是否配置成功(启动tomcat服务器,访问"项目上下文地址/first")。

三层架构

高类聚

指每个模块内的功能不可再分。

低耦合

是指降低各个模块之间的关联程度,这样便于开发和维护,每个模块各司其职。

通常的三层架构

  • 数据访问层
    数据访问层,用于连接数据库,对数据做增删改查的操作。
  • 业务逻辑层
    业务逻辑层,用于处理业务逻辑,在适当的情况下调用数据访问层中的方法。
  • 视图表现层
    视图表现层,用于展示数据和提供用户输入数据的渠道,在适当的情况下调用业务逻辑层中的方法

获取从页面传过来的数据

//此处接受的是提交表单里有“username”的input数据(参数)
String username = req.getParamter("username");

访问方式

GET

使用这种方式提交的数据暴露在地址栏中,且数据长度有限。

  • 在浏览器的地址栏中输入对应的URL。
  • 使用a标签,在href中输入对应的URL。
  • form表单提交方式:method = “get”。

Post

使用这种方式提交的数据不会显示在地址栏中,并且数据长度不受限制。

  • form表单提交方式:method = “post”。

页面提交数据的方式

  1. 使用form表单的name属性显示提交(不安全)。
  2. 使用form表单的name属性隐式提交,也就是把input标签的tyep属性改为"hidden"(安全)
  3. 通过"?参数名=值"方式提交,有多个参数时用&连接
//链接也可以直接在地址栏中访问
	<a herf="http://localhost:8080/项目名/访问页面?参数1=值1&参数2=值2">跳转</a>

注意:
4. 获取方式都用"req.getParamter(“参数名”)"。
5. 表单通过action提交设置的路径,如果要在路径中传递参数,只能使用post方式提交(因为get方式无法识别,建议用隐藏域)。

解决请求和响应的中文乱码

	//用于在servlet中doGet()和doPost()
	req.setCharacterEncoding("utf-8");
	resp.setConttentType("text/html;charset = utf-8");

web.xml文件中常用的标签

  1. 设置项目启动的欢迎页
<welcome-file-list>
<welcome-file>login.html</welcome-file>
</welcome-file-list>
  1. 设置错误页面
<error-page>
<!--错误码-->
<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>
  1. 设置全局参数
<context-param>
<!--参数名-->
<param-name>contentParam</param-name>
<!--参数值-->
<param-value>全局参数</param-value>
</context-param>

Servlet的生命周期

基本过程

  1. 构造方法
  2. init()
  3. service()/doGet()/doPost()
  4. destory()

详细过程(访问servlet时)

  1. 执行构造方法一次。
  2. 初始化一次,调用init()方法。
  3. 调用service()方法,之后每次访问都会调用该方法。有该方法时,doGet和doPost失效。(如果没有该方法,会根据请求方式试图调用doGet或doPost,如果没有相应的方法,会出现405状态码,表示请求方式不允许)。
  4. 在当前servlet所在项目从tomcat中停止时,销毁一次,调用destory()方法。

用注解开发Servlet

//@WebServlet("/请求映射")
@WebServlet("/bookInfo")

JSP

什么是JSP

Java Server Page,使用Java开发、运行在服务器上的页面。

用途

可以在页面中加入java代码,让页面成为动态页面。

本质

是一个java文件(servlet)。

访问过程

  • 第一次访问时,页面会重新编译为.java文件再到.class文件.(这会导致第一次访问速度过慢)。

JSP的组成

  • HTML元素
  • 脚本(java代码)

<%java代码%>

  • 表达式(用于在页面中嵌入变量的值)

<%=变量%>

  • 指令

<%@ 指令名 属性=“值”%>

  • 注释(在浏览器中无法被查看)

<%–jsp注释–%>

  • 声明(方法)(不建议使用太多,影响代码阅读性)

<%! 定义方法 %>

  • 动作(定义一些标签可以代替java代码)

< jsp:动作名></jsp:动作名>

跳转

页面与页面之间跳转

//用于事件跳转
localtion.href(“页面地址”)

页面跳转至Servlet

<a href="servlet映射名"></a>
<form action="servlet映射名">
<input type="submit"></form>

Servlet跳转到页面或另一个Servlet

  • 请求转发(内部跳转)
//此方法,能够修改request域中保存的数据(对象)
request.getRequestDispatcher("跳转的地址").forward(request,response);
  • 重定向(外部跳转)
response.sendRedirect("跳转的地址");

跳转时传递数据

  • 保存
作用域对象.setAttribute(Stringstr,Objectobj);
  • 获取
Objectobj=作用域对象.getAttribute(Stringstr);
//获取到的数据是Object类型,通常需要转型(例如)
List<泛型>list=(List<泛型>)request.getAttribute("list");

带有外键字段的实体类设计

创建实体时,需要将外键对应的主表实体对象也加入属性中。

MySQL分页查询

获取每页的指定数据

--公式size表示每页显示的数量page表示页数
select * fromlimit(page-1)*size,size

获取总记录数据条数

select count(属性)from

条件分页(关键字搜索)

原理

select * fromwhere 字段 like concat('%',keyword,'%')limit(page-1)*size,size

路径

绝对路径

根目录/项目名/页面路径

相对路径

  • /

表示从根目录(域名+ip)出发。

  • ./

表示从当前位置出发。

  • …/

表示跳向上一层

页面上下文路径

${pageContex.request.contextPath}

关于EL无效识别的问题

  • 在<%@ page%>中加入isELIgnored=“false”。
  • 替换web.xml版本为4.0以上(默认isELIgnored=“false”)

四大作用域对象

用途

共享数据

  • pageContext
    • 当前页面对象。共享数据区域范围为当前页面。
    • 如果不在同一个页面,数据无法读取。
  • request
    • 请求对象。共享数据区域范围为一次请求。
    • 如果跳转中途使用了重定向,数据无法读取。
  • session
    • 会话对象。会话是用户访问服务器时的某个时间段。
    • 共享数据区域范围在这个时间段内,默认30分钟。
    • 如果在指定时间内没有操作或销毁会话时,数据无法读取。
  • application
    • 项目对象。共享数据区域范围为整个项目。

作用域范围比较

application > session > request > pageContext

共同方法

//将某个对象obj保存到作用域中,命名为str
作用域对象.setAttribute(String str,Object obj);
//从某个作用域中获取保存的某个对象
Object obj=作用域对象.getAttribute(String str);
//从某个作用域中移除某个保存的对象
作用域对象.removeAttribute(Stringstr);

使用

  • 在JSP页面中

作用域对象也称为内置对象,直接通过对应的单词使用

<% request.setAttribute("str","保存在request中的字符串");
%>
<%=request.getAttribute("str")%>
  • 在servlet中使用
    • pageContext (在servlet中不会使用pageContext对象)
    • request(使用doGet/doPost/service方法中的HttpServletRequest参数req)
    • session( HttpSessionsession=req.getSession();
    • application(ServletContextapplication=getServletContext();

EL

什么是EL表达式

Expression Language表达式语言
是为了使JSP写起来更加简便,替换JSP中的<%=%>,简化了JSP页面中输出数据的操作。主要输出保存在某个作用域中的数据。

特点

  • 只能输出保存在作用域中的对象。
  • 减少代码(省去了获取对象、转换的过程)。
  • 免去非空判断。

使用

在页面中输出保存在作用域中的对象

  • 从作用域中依次查询并输出对象

${对象名}

  • 从指定作用域中输出对象
    • pageScope
      • 当前页pageContex
      • ${pageScope.对象}
    • requestScope
      • 请求request
      • ${requestScope.对象}
    • sessionScope
      • 会话session
      • ${sessionScope.对象}
    • applicationScope
      • 项目application
      • ${applicationScope.对象}
  • 输出对象的属性

${对象名.属性名}
${对象名[“属性名”]}

  • 输出对象的方法返回值

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

在页面中获取请求中的参数

//传统方法
request.getParameter(“username”)
//EL表达式
${param.username}

JSTL

什么是JSTL

Java Server PageStandarded Tag Library JSP标准标签库。

作用

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

使用

  1. 导入JSTL对应的依赖。
<dependency>
<groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version>
</dependency>
  1. 在JSP页面中,加入标签库指令
<%--在当前页面中使用jstl,加入以下指令--%>
<%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%>
  1. 具体用法
  • 定义变量或给变量赋值
<c:set var="变量名" value=""></c:set>
  • if判断
<c:if test="判断条件">
满足条件时的内容
</c:if>
  • 遍历List集合
<c:forEach items="要遍历的集合"var="遍历出的对象名"></c:forEach>
  • 遍历Map集合
<c:forEach items="要遍历的集合名"var="遍历出的键值对的名称">
${键值对名.key.属性}
${键值对名.value.属性}
</c:forEach>

Ajax

什么是Ajax

  • AsynchronousJavascriptAndXML
  • 异步JavaScript和XML
  • 一种数据交互方式,请求和响应是异步的。
  • 使用ajax能实现在整个页面不重新加载的情况下,更新局部内容。

使用

使用jquery封装后的 . a j a x ( ) 或 .ajax()或 .ajax().get() $.post()等函数。

  1. 在页面中导入jquery文件
<!--使用Ajax,需要导入jquery-->
<scriptsrc="jquery文件路径"></script>
  1. 在script标签中写ajax
<script>
某个节点.事件(function(){
//使用ajax异步提交数据
$.ajax({
//访问的URL地址
url:"servlet映射或具体url"//提交的数据
data:{
//键:值
"形参":,
"形参":},
//提交方式
type:"get/post/put/delete",
//成功访问URL后的回调函数
success:function(res){//res表示访问URL后返回的数据
},
//访问URL失败时的回调函数
error:function(){
}
});
});
</script>

JSP内置对象

在jsp页面中有一些对象是已经定义好了可以直接使用的,称为内置对象。

  • request
    • 请求作用域对象
  • response
    • 响应对象
  • pageContext
    • 当前页作用域对象
  • session
    • 会话作用域对象
  • page
    • 当前jsp页面对象
  • out
    • 输出对象
  • application
    • 项目作用域对象
  • config
    • 配置对象
  • exception
    • 异常对象

Session和Cookie

都是用于保存数据的对象。

Cookie

cookie通常用于更长时间地保存一些信息,即便关闭浏览器,也能保存。

创建

//创建cookie
Cookiecookie=newCookie("username","保存在cookie中的用户名");
//设置有效时长,单位为秒,这里表示7天有效
cookie.setMaxAge(60*60*24*7);
//通过响应对象response保存cookie对象到本地
response.addCookie(cookie);

获取

//读取cookie时是获取当前站点的所有cookie数组
Cookie[]cks=request.getCookies();
//遍历
for(Cookieck:cks){
System.out.println(ck.getName()+"--"+ck.getValue());
}

Session

  • session是一个作用域对象,在访问任意jsp页面时,默认就会创建一个session对象(可以通过设置取消自动创建)。
  • 通常使用session保存一些信息,用于在同一站点的各个页面之间共享数据。

原理

  1. 当访问的jsp页面或servlet中使用了session,会创建一个JSESSIONID(session编号),这是一个字
    符串,保存在一个cookie中。
    • 默认访问某个jsp页面时,该页面中没有使用session,也会自动创建session
<%--默认每个jsp页面都有这句话,表示访问该页面时,自动使用session--%>
<%@page session
="true"%>
  1. 再次访问该页面时,会查询该JSESSIONID是否存在,如果存在,直接使用,如果不存在,创建新的JSESSIONID。
  2. 保存该JSESSIONID的cookie会随着浏览器的关闭自动销毁,所以关闭浏览器,session就会失效。

常用方法

常用方法名作用
session.setAttribute(String str,Object obj)将obj对象保存在session中,命名为str
session.getAttribute(String str)获取保存在session中的对象
session.removeAttribute(String str)移除保存在session中的对象
session.invalidate()销毁session
session.getCreationTime()获取session创建时间对应的毫秒数
session.getId()获取JSESSIONID
session.getMaxInactiveInterval()获取session有效时长(默认1800秒)
session.setMaxInactiveInterval(int seconds)设置session有效时长,参数为秒
ServletContext app = session.getServletContext();获取当前application对象

设置全局session有效时长

在指定时间内,打开浏览器但对session无操作,就会自动销毁session。

方法
  • 通过session.setMaxInactiveInterval(int seconds)设置有效秒数。
  • 在web.xml中配置。
<!--设置全局session配置-->
<session-config>
<!--session有效时长,单位为分钟-->
<session-timeout>15</session-timeout>
</session-config>

Session VS Cookie

  • session中保存的是对象Object,cookie中保存的是字符串String,都以键值对的形式保存。
  • session保存在浏览器和服务器端,cookie保存在浏览器。
  • session保存的数据没有大小限制,cookie保存的数据有大小限制,不超过3KB。
  • session在30分钟内没有访问或随着浏览器的关闭而销毁,cookie可以设置销毁时间。

监听器Listener

作用

用于在执行某个操作时,通过监听器同时再执行其他操作,如记录日志、统计站点人数等。

常用的三个监听器接口

实现接口名监听器
ServletContextListenerapplication监听器
HttpSessionListenersession监听器
ServletRequestListenerrequest监听器

配置监听器

  • web.xml中
<!--配置监听器-->
<listener>
<!--设置监听器的全限定名-->
<listener-class>com.hqyj.bookShop.listener.MyListener</listener-class>
</listener>
  • 注解形式
@WebListener

过滤器Filter

用于拦截访问,防止非法访问。

配置Filter

  • web.xml中配置
<!--声明过滤器-->
<filter>
<filter-name>myFilter</filter-name>
<filter-class>com.hqyj.filter.MyFilter</filter-class>
</filter>
<!--设置什么请求要经过该过滤器,通常过滤所有请求-->
<filter-mapping>
<filter-name>myFilter</filter-name>
<!--/*表示过滤所有请求-->
<url-pattern>/*</url-pattern>
</filter-mapping>
  • 注解配置
@WebFilter("/*")

个人总结

在这个阶段中,回顾了之前学过的知识,同时又学习了很多新的内容,特别是将关于这个阶段的内容进行灵活运用到实际应用中,很明显的感觉到了很大的进步,对于基本的JavaWeb开发模式加深了很多印象,模块化的思维越发变得清晰,期待后面阶段学习的知识和能力的增多和加强。Good Luky!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值