赞
踩
一、Servlet核心技术
1.基础知识
C/S架构:客户端负责与用户进行交互而服务器用来负责数据的管理,客户端的界面功能丰富响应速度快且服务器负担轻,但用户群固定且维护和升级成本高(客户端需要更新)
B/S架构(常用):浏览器负责与用户交互,服务器负责数据管理。无需安装客户端用浏览器即可,用户群不固定交互性强且维护成本低,但服务器负荷重且浏览器要达到客户端的界面丰富程度难且跨浏览器适配困难。
Web:表示互联网供外界可访问的资源 。静态资源:浏览数据不变。动态资源:浏览数据由程序产生不同时间点看到内容不同
javaWeb::使用java语言进行动态Web资源开发技术的统称
HTTP协议:涉及到浏览器的请求格式和服务器的响应格式且承载于TCP协议之上(HTTP是一种无连接的协议,每次请求都需要建立一个新的连接,并在请求完成后关闭连接。利用TCP的可靠性、流量控制和拥塞控制等特性,确保数据的可靠传输和网络的稳定性。)(承载于TLS和SSL协议层之上的为HTTPS协议)
请求格式(请求行,请求头,空白行和请求体)
响应格式(响应行,响应头,空白行和响应体)
2.Tomcat服务器:开源轻量级WEB应用服务器用于开发Servlet和JSP程序
下载后再bin文件夹下startup.bat开启服务器shutdown.bat关闭服务器
server.xml文件是服务器的主配置文件用于设置端口号,域名/IP,默认加载项目,请求编码等
Tomcat-users.xml用来配置管理Tomcat服务器的用户与权限
3.servlet概念和使用:运行在src目录下的服务器Java类(JAVA语言编写的服务器端程序)用于完成B/S架构下客户端的请求的响应处理生成动态的WEB内容
3.1servlet编程(Servlet与前端进行交互)步骤:
1>建立Java web Application项目并配置Tomcat服务器;
2>自定义类实现servlet接口或者继承httpServlet类(推荐)并重写service方法;
<1>.自定义类的实现
第一方式:Servlet接口:定义所有servlet必须实现的方法:
init:表示该servlet正在被放入服务中
service:允许servlet响应请求
getServeltConfig:返回ServletConfig对象(包含此servlet的初始化和启动参数)
getServletContext:返回ServletContext对象
getServletInfo:返回有关servlet相关信息:作者版本和版权
destroy:退出服务
第二方式:GenericServlet类:该类实现了servlet接口,只需重写service抽象方法
第三种方式:HttpServlet类:抽象类并集成了GenericServlet类,适用于创建适用于网站的HTTP servlet该类的子类必须至少重写一个方法
对于每个请求,Servlet 容器会自动创建一个 HttpServletRequest 对象和一个HttpServletResponse 对象,并将它们传递给 service 方法,以便您在 service 方法中处理请求。这确保了每个请求都有自己独立的请求对象和响应对象,以保证并发访问的线程安全性。
<2>.. servlet生命周期:当运行Tomcat服务器并用浏览器进行请求时会依次进行构造,init,service,多次请求会多次运行service最后停止运行服务器则调用destroy方法
<3>..get请求(超链接、浏览器浏览URL或者submit表单。将请求数据放到url后面,不安全)和post请求(submit表单。请求数据放入HTTP协议体中可提交大量数据安全性好):无论是那种请求方式尽用doPost方法,在doGet方法可用this.doPost(req,res)方法
<4>..request请求对象的实现
ServletRequest接口:用于获取客户端的请求信息。
由servlet容器创建该对象作为参数传递给servlet的service方法,service方法在调用doPost/doGet方法,在该方法中用ServletRequest中的方法获得客户端的请求信息。
HttpServletRequest接口:ServletRequest接口子接口,用于提供HTTP请求信息的功能
由getMethod方法获得HTTP请求方式再决定调用doGet或doPost方法
Servlet解决中文乱码问题:浏览器提交表单时会对中文进行自动编码当Tomcat接受到该数据时由于编码与解码方式不一样会造成乱码。
<5>response对象的实现:
ServletResponse接口:帮助Servlet向客户端发送响应
由servlet容器创建该对象作为参数传递给servlet的service方法,service方法在将要返回的信息返回给前端
HttpServletResponse接口:继承ServletResponse接口,以便发送响应时提供特定于HTTP功能
3>
第一种方式:将该自定义类信息配置到web.xml文件并启动项目
第二种方式:使用注解方式配置Servlet
@WebServlet(name="HelloServlet",urlPatterns="/hello")
4>在浏览器上访问Http://localhost:8080/工程路径/url-pattern内容
ServletConfig接口(熟悉)
描述Servlet本身相关配置信息(每个Servlet都有一个)在初始化期间将信息传递给Servlet配置对象
ServletContext接口:(熟悉)项目启动时会为每个项目创建一个该对象实现多个Servlet之间信息共享和通信可在Servlet中通过this.getServletContext()方法获得
3.2(Servlet与数据库交互)
3.2.1Servlet+JDBC应用:利用DBUtils工具类对数据库进行连接,创建DAO层用于数据访问层,在该层中创建对应类(userdao)。在该类中创建对应方法(createUser)进行数据库的连接和CRUD。在Servlet类中调用DAO层中的方法(创建该类并传入参数调用该类的方法)将数据库返回的结果返回给前端
前端页面:
Servlet类:
UserDao类:
DBUtils工具类
3.2.2重定向:浏览器发送HTTP请求WEB服务器接受该请求后发送302状态码响应以及新的url(location)给客户端,当检测为302后在发送一个新的HTTP请求给URL
特点:地址栏URL会改变;旧的request会销毁创建新的request对象,URL可以是其他工程项目
方法:HttpServletRequest.sendRedirect(String location)
3.2.3转发:将未完成的处理给另一个WEB组件处理,转发过程中的组件会共享request和Response对象
特点:URL地址栏不会变;转发过程共享request对象且URL不可为其他工程项目
转发实现:
绑定数据到request对象中:HttpServletRequest.setAttribute(String name, Object o)键值对
获取指定属性值作为对象返回:HttpServletRequest.getAttribute(String name)
获取转发器对象(RequestDispatcher)也就是另一web组件:HttpServletRequest.getRequestDispatcher(String path)该参数为另一web组件路径
转发操作:RequestDispatcher.forward(request,response)
3.2.4Servlet线程安全 :通常来说服务器接收到请求后会开启一个线程进行请求处理,而服务器为每个Servlet只创建一个对象实例当多个请求访问同一个Servlet时会产生多个线程访问同一个Servlet对象会发生线程安全问题
解决方式:
利用synchronized(this){代码块},this代表该Servlet实例,由于只有一个实例,所以能锁上
3.2.5状态管理:因为WEB基于HTTP协议而HTTP协议是无状态协议既一旦服务器接受客户端请求就建立连接,响应完客户端请求后就断开连接。服务器程序有时需要跟踪同一客户端发出的一系列请求将多次交互作为一个整体将交互涉及的数据保存下来。
客户端保存:cookie技术
服务器保存:session技术
cookie技术:
浏览器向服务器发送请求时,服务器将数据以set-cookie消息头响应给浏览器然后浏览器保存,下次浏览器发送请求时会先比较cookie路径(默认为项目名/目录,不包括执行的类文件)与请求路径是否相同,若相同将这些数据以cookie消息头方式发送给服务器
创建cookie:new Cookie(String name, String value )
添加cookie:HttpServletResponse.addCookie(cookie)
获取cookie:返回Cookie数组 HttpServletRequest.getCookie()
获取和修改cookie中的属性:
Cookie.getName()
Cookie.getValue()
Cookie.setValue(string newValue)
默认cookie生命周期只要浏览器关闭则cookie消失,若要设置生命周期
cookie.getMaxAge():获取cookie最长使用期限
cookie.setMaxAge(int expiry):设置cookie最长保留时间
Cookie.setPath(String url)设置Cookie路径
特点:状态数据保存在浏览器不安全,大小限制在4KB,只能保存字符串信息,可以通过浏览器设置为禁用
session技术:浏览器访问服务器是会对每个浏览器在服务器中分配一个空间创建一个session对象,该对象ID唯一 sessionID,服务器会将SessionID以cookie方式发给浏览器,当浏览器再次访问服务器时会将sessionID发送给服务器,服务器根据sessionID查找对应的对象(这都是自动处理的,不需要手动添加。)
HttpServletRequest.getSession():返回session,若没有则创建
(javax.servlet.http.HttpSession)session.isNew()判断是否为新创建的Session
session.getId()获取Session编号
session.getAttribute(String name)返回该Session中指定名称绑定的对象
session.setAttribute(String name, Object value)将指定名称的对象绑定到该会话
session.removeAttribute(name)移除该会话
Session生命周期默认为30分钟
Session.getMaxInactiveInterval()失效时间获取
Session.setMaxInactiveInterval(int internval)设置失效时间
特点:数据安全且能保存的数据类型丰富且更多的数据,若Session过多会影响服务器内容
cookie和Session对比:
cookie“通行证”:由服务器颁发放在浏览器
Session“用户登记表”:放在服务器
二、JSP核心技术
1.JSP概述
JSP文件的作用:服务器会将JSP文件编译成Servlet,并执行生成动态内容的逻辑,最终生成HTML页面作为响应返回给浏览器,而JSP文件本身的源码在前端是不会显示的。
与servlet相同点都是动态生成HTML响应,不同点:以HTML标记为主内嵌Java代码段。
访问方式:浏览器在项目后加 /JSP文件名
1.1JSP与Servlet关系
1.2JSP语法
语法结构:声名区,代码区,表达式,注释,指令和动作,内置对象
1.2.1声明区:
<%! 全局变量/方法/类(Java代码)%>
1.2.2代码区:
<% 局部变量/任何Java代码 %>
1.2.3表达式:
<%= 字符串变量或者可被转换成字符串的表达式(不可以;结尾)%>
1.2.4注释:
<%-- 注释内容(前端看不到,不会被执行)%>
1.2.5指令和动作:
page:导包和设置页面属性
<%@page import=“导入相应的包” %>
<%@page contentType=“发送到浏览器的文档类型” %>
<%@page pageEncoding=“页面编码类型” %>
<%@page language=“页面使用的语言” %>
<%@page session=“是否参与HTTP会话” %>
taglib:扩展JSP标签元素和引入其他功能的标签库文件
<%@taglib uri='指定库的标识 ' prefix="库前缀 "%>
include指令:引入另一JSP文件或HTML文件(静态包含,先包含文件再编译)
<%@include file="文件地址"%>
jsp:include/jsp:param动作:引入另一JSP文件或HTML文件(动态包含,先编译再包含)
<jsp:include page="文件内容" flush="true/false"/>
<jsp:param name="另一文件的参数名" value="参数值">
</jsp:include>
jsp:forward/jsp:param:在jsp文件中实现转发,在转发过程中可以传递参数,如何获取参数可以参见内置对象
<jsp:forward page="文件内容" flush="true/false"/>
<jsp:param name="另一文件的参数名" value="参数值">
</jsp:forward>
1.2.6内置对象(jsp文件中九个内置对象为用户进行实例化,可以不定义直接使用该变量,在jsp转换成Servlet后会自动追加这些变量的定义,简化开发)
out内置对象:缓冲输出流:对象类型为JSPWriter,用于给客户端输出信息
request内置对象(常用):HTTPServletRequest接口的一个实例对象,封装了调用JSP页面的请求信息。该对象属性值只在一个请求中保存。由于request可以实现转发,所以只有转发后被转发的jsp才可以访问之前jsp文件中request存储的属性,否则只能在之前的jsp文件内访问.
Response内置对象(常用):用于给客户端输出处理结果是HTTPServletResponse接口的一个实例对象,用于设置HTTP标题,添加cookie,响应内容的类型和状态,HTT重定向和编码URL。因为Response可以实现重定向,重定向后可以根据Session获得相应的属性内容,而服务器会为每个浏览器创建一个Session而后将sessionID作为标识以cookie形式返还给浏览器,浏览器下次访问自动带着标识访问浏览器可以直接获得会话Session内的内容
Session内置对象(常用):表示浏览器和服务器之间的一次会话(包含多个请求)多个请求之间借助Session对象存储信息是HTTPSession的一个实例,该对象属性只要不关闭浏览器,默认30min内可以访问。
Session访问属性的方式具体说明:
在JSP中,通过Session
对象可以访问服务器中的属性值,但并不需要浏览器和服务器之间存在会话。当客户端与服务器之间建立会话时(例如通过浏览器发送第一个请求),服务器会为该客户端创建一个唯一的Session
对象,并为其分配一个sessionID
。该sessionID
可以作为Cookie或URL参数的一部分发送回浏览器。然后,浏览器在后续的请求中会将sessionID
作为Cookie或URL参数的一部分发送回服务器,以便服务器能够识别并关联对应的Session
对象。一旦服务器获得了客户端的sessionID
,它就可以通过request.getSession()
方法获取对应的Session
对象,并访问其中的属性值。
application对象:web程序的全局变量是servletcontext实例,在服务器保存数据,所有用户共享。既可实现多个浏览器可共用以下属性值。无论是request,Session还是application,都需要setAttribute才能在另一页面getAttribute
pageContext内置对象:pageContext类型对象,只能在一个页面保存数据,转发都不行权限更小
Exception对象:throwable实例标识jsp异常信息,必须在error.jsp文件中将page指令的isErrorPage属性设置为true
web.xml中配置统一的异常处理页面
单个页面处理方式:<%@page errorPage="error.jsp" %>
1.2.7Javabean组件:本质就是Java类,需要将Java类封装:私有化成员变量,公有化getset方法无参构造。
创建Javabean实例:
删除时内置对象的选择取决于scope的选择。
若scope为Session,Session的原理也是一样的,在第一个jsp文件设置scope为Session并设置了mybean的属性值,服务器创建一个session并将SessionID返还给浏览器,浏览器下次访问另一个JSP文件时会自动带着sessionID标识,所以访问Session时可以访问同一个Session内的属性比如mybean中的属性值。
2.MVC设计模式
eg:控制器接收到前端提交的请求后,从请求参数中获取用户名和密码,封装业务数据并进行业务逻辑,并将其存储在请求属性中。然后,控制器将请求转发给展示用户信息的视图userInfo.jsp。当请求转发到userInfo.jsp
时,服务器会处理该JSP文件。服务器会执行JSP文件中的Java代码(如果有的话),并生成最终的HTML响应,并作为响应返回给前端浏览器。
三、EL和JSTL核心技术
1.EL核心技术:JSP中简化表达式的方法
1.1访问内置对象的数据:执行顺序为:pagecontext——>HttpServelt——>HttpSession——>ServletContext若找到一个就退出并输出该值
<%=request.getAttribute("username")% ==>${username}
1.2访问请求参数数据
request.getParameter(name)/request.getParameterValues(name)==>
${param.name}/${paramValues[0] }
1.3访问bean对象的属性
${user[name]}/${user.name}第一个更灵活可以动态取值
1.4访问集合中的数据
${student[0].name}
1.5常用内置对象
作用域说明:取值${name}默认为pageScope可通过${request.name}等方法取值
1.6条件表达式
${条件表达式?语句1:语句2}
1.7 验证运算符
${empty 表达式}返回表达式是否为空值 返回结果为true或false
2.JSTL标签:JSP标准标签库可取代JSP页面的Java代码,下载jar包并添加到项目中
引入标签:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
2.1核心标签
2.1.1输出标签 2.1.2设置标签
2.1.3删除标签
2.1.4单条件判断标签
2.1.5多条件判断标签
2.1.6循环标签
2.2函数标签
2.3格式化标签
2.4自定义标签
四、Filter+Listener核心技术:javaWeb三大组件:Servlet,Filter,Listener
1.Filter:向WEB程序的请求和响应增加功能的WEB服务组件,在访问WEB资源和将WEB资源响应给前端时都应该先走filter,请求:先进的先入 响应:先进的后出
1.1Filter接口:描述过滤器对象
使用方法:实现该接口并重写doFilter方法且在Web.xml中配置过滤器(除了在web.xml中配置外也可以使用注解方式@WebServlet(name= "LiginFilter", urlPattern="/*"))
(由于该方法参数是ServletRequest,若要操作HttpServletRequest需要强转)
1.2FilterConfig接口:描述过滤器的配置信息
使用方式:web.xml配置过滤器信息
在实现filter接口后可以通过重写init方法在该方法中调用常用方法获取过滤器配置信息
1.3过滤器链:按照web.xml中过滤器的配置顺序可以实现过滤器链,既一个请求可以按照顺序实现多层过滤(若过滤条件都满足,不满足的从最近的链条开始过滤)
优点:实现了代码的可插拔性,既增加或减少某个功能不会影响程序的运行,提高了代码的重复利用
2.Listener:监听Servlet产生的时间并进行处理
Listener分类:
2.1ServletRequestListener监听器:监听servletrequest的创建和销毁(每次一个请求进来,处理请求,会销毁Request)
第一步:实现接口和重写方法
第二步:web.xml配置listener信息
2.2ServletRequestAttributeListener:向servletrequest增加删除和替换属性时通知该监听器
第一步:实现接口和重写方法
第二步:web.xml配置listener信息
2.3 HttpSessionListener:当HttpSession被创建或失效时会通知该监听器
重写方法:
void sessionCreated(HttpSessionEvent se) HttpSession创建时调用该方法
void sessionDestroyed(HttpSessionEvent se)HttpSession销毁时调用该方法
第一步第二步同理
2.4HttpSessionAttributeListener:向HttpSession中添加删除替换属性时通知
void attributeAdded(HttpSessionBindingEvent se)Session加入属性时调用
void attributeRemoved(HttpSessionBindingEvent se)Session删除属性时调用
void attributeReplaced(HttpSessionBindingEvent se)Session替换属性时调用
2.5ServletContextListener:servletcontext创建或销毁时通知(服务器的开启和关闭)
void contextInitialized(ServletContextEvent sce)创建
void contextDestroyed(ServletContextEvent sce)销毁
2.6 ServletContextAttributeListener:servletcontext中添加删除替换属性时通知
void attributeAdded(ServletContextEvent sce)加入属性时调用
void attributeRemoved(ServletContextEvent sce)删除属性时调用
void attributeReplaced(ServletContextEvent sce)替换属性时调用
2.7HttpSessionBindingListener:HttpSession中绑定和解除绑定时
Javabean实体类实现该接口并在该类中实现重写方法时,当该类被创建且Session对象注入属性将该类实例注入时绑定,去除属性时实现解除绑定(不用配置web.xml)
void valueBound(HttpSessionBindingEvent event)绑定时
void valueUnbound(HttpSessionBindingEvent event)解除绑定时
2.8HttpSessionActivationListener:HttpSession的数值钝化或活化时通知
第一步:Javabean实体类实现序列化和该接口并在该类中实现重写方法
void sessionWillPassivate(HttpSessionEvent se)钝化,将实体类数据存入Session(内存)在存入硬盘
void sessionDiActivate(HttpSessionEvent se)活化,将实体类数据从硬盘放入内存再打印出来
第二步:WEB-INF目录下 配置信息 context.xml(和web.xml一个目录)
directory目录指定将钝化后的数据存在那个目录下
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwqp="1" >
maxIdleSwqp代表 session中的对象多久不使用就钝化,单位:分钟
五、Linux系统和编程基础
计算机体系结构:计算机硬件和计算机软件(系统软件和应用软件,系统软件是应用软件的基础)
Linux主要发行版本:Ubuntu,CentOS,RedHat
1. shell 命令:shell相当于win中的dos,命令解释器
1.1目录及目录下的文件
ls 显示当前目录下所有文件
ls -l 显示详细信息
ls -a 显示全部文件(隐藏文件)
ls -al = ls -l + ls -a
ls 目录名 查看该目录有什么文件
1.2目录切换
cd .. 上一级目录
cd dirname 进入目录
cd ~ 返回用户的家目录
pwd 查看当前目录所在位置
which 命令 查看命令所在路径
1.4用户命令
whoami 查看当前用户名称
su 切换到root用户
su root 切换到root用户
su 用户名 切换到普通用户
exit 退回到原来用户
useradd XXX 创建用户
passwd XXX 为创建用户设置木马
usedel 删除用户
1.5文件及目录操作
1.6权限管理
chmod r+w+x(读,写,执行) 文件/目录 给文件赋予权限 去权限则为-
1.7进程管理及其他命令
2.Vi工具的使用:文本编辑器,通常为 vi 文件名进入该文件
三种模式
六、开发环境搭建和编程基础
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。