概述
JavaWeb
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g8GJXebo-1576330714850)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20191111085622867.png)]
![image-20191111085739215](C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20191111085739215.png
Tomact
Apache基金组织的产品,是一个服务器,一个web服务器
非常易用,最适合入门学习,但是商用不建议使用
类似的服务器:JBoss, WebLogic(application Server) Apache IIS(windows)
Resin,应用程序服务武器 WebSphere
目录
bin 可执行程序 Windows是bat文件,Linux是sh文件
conf 服务器的配置,一般配置端口或者网站的配置信息(网站的名称,路径)
webapps 主要部署网站的代码
work jsp反编译,编译后生成的文件
端口默认是8080,启动命令是startup.bat/sh catalina.bat run (参数)
shutdown.bat/sh 关闭服务器,或者是catalina.bat stop
一台服务器启用2个Tomact 需要配置不同的端口
8080 9090 8005 9005 8009 9009
Servlet
是一段Java代码,是运行在web服务器上的一段Java代码
MVC模式(开发模式),Servlet扮演了c的角色,即,控制器controller
页面的请求先到Servlet中,Servlet调用M(Model 业务层 ,M调用dao)
M返回给c一些结果信息,Servlet会根据结果进行结果跳转到相应页面,完成一次请求
v视图的角色,只负责展示信息,由JSP来扮演(view)
jsp1模式:把所有的业务都在一个jsp 中完成
让一个类继承HTTPServlet就是一个Servlet
每一个Servlet在服务器中都有一个唯一的名称和唯一的URL,浏览器访问某一个URL到Tomcat服务器中,Tomcat服务器就会把该URL对应到某一个Servlet中
@WebServlet(name="HelloWorld",urlPatterns={"/Hello","/HelloWorld"})
public class HelloWorld extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().println("Nice...");
}}
Servlet名称是HelloWorld,映射地址是“/Hello”,"/HelloWorld"
@WebServlet("/Hello")
Get
HttpServlet是所有Servlet的父类,他里面两个重要的方法,doGet,doPost
doGet只接受客户端get方式的请求(get方式值得是直接通过地址栏访问,或通过a标签访问,或form表单的提交方式为get方式)
doGet和doPost中的业务 代码是一样的, 通常只需要写一个方法,另一个方法直接调用,
如:doGet(){xxxxxxxx} doPost(){ doGet(); } 需要重写
Get方式请求,明显的标记:地址栏显示请求的地址和数据,比如登录:
http://localhost:8080/LoginServlet?username=Tom&password=Tom
所以,对于敏感性的数据业务不适合用明码的Get请求,要用Post
Get适合获取数据用的,不适合提交数据
get提交的数据有限制,大致在2k左右
在请求的地址后面加非常多的参数LoginServlet?username=xx&password=xxx
var value = ‘’;
for(var i =0;i<1000000;i++){
value+=“Tom”;
}
登录
document.getElementsByTagName(“a”)[0].href="/loginServlet?Username"+value;
Post
提交的数据理论是无限大的,看服务器的内存资源
地址栏只显示地址部分的内容,提交的数据不显示,浏览器软件会把提交的数据打包作为报文发过来。比如登录时只显示:http://localhost:8080/LoginServlet
用户名和密码不在地址栏显示
Post适合给服务器提交数据(一般是增删改的操作,比如注册或上传文件)
只有当form的method改为post时才能是post提交
传参
HttpServletRequest HttpServletResponse 这两个类一般出现在方法的参数中是Tomcat容器创建的,给Servlet使用的,Tomcat找到用户的URL对应的Servlet,就会把请求的数据封装到request对象中,Servlet代码从此对象中来获取请求数据
如果Servlet需要给用户相应内容,则通过Tomcat给的response来传递数据
request.getParameter(“参数名”)返回的永远是字符窜的值
参数名:就是URL中的?后面或&后面跟的变量名,或者form表单中指定的name
以上的name中的userName就是参数名
Post 方式提交时,它后面的URL中跟的参数统统无效,必须使用隐藏于来完成传参数
乱码
后台给页面相应的乱码:response.setCharacterEncoding(“UTF-8”)
此行代码一定要写在方法的第一行,或者第二行,页面提交到后台的乱码是:
request.setCharacterEncoding(“UTF-8”)
这两行的代码是方法的前两行
request的这种解决乱码的方法, 只适用于Post提交,不适于Get方式提交的乱码问题
response要看浏览器软件此时的解码方式,有一定的随机性
response.setHeader("Content-type", "text/html;charset=UTF-8");
生命周期
HTTPServlet父类,五个方法
init()初始化,当Servlet对象创建后,即调用此方法进行初始化
service()在这个方法中会根据提交的方式不同,调用子类对象的doGet和doPost
service是工作方法的入口,doGet/Post是具体处理业务的方法
destroy()是Servlet销毁的方法,如果Servlet有占用资源,请在此释放
Tomcat关闭(重启服务,重新部署)时,调用此方法
init(ServletConfig)可以通过配置参数在初始化Servlet过程中获取参数
创建时机:
在第一次访问时,创建
给Servlet配置load-on-startup参数,Tomcat启动时创建
转发和重定向
转发:发生在后台,A.jsp 提交到 AServlet ->B.jsp/(BServlet)->
把请求转发到其他的Jsp或Servlet中
由A.jsp发起请求,由AServlet进行转发
表现出的现象是:地址栏中始终显示的是AServlet,而不管Servlet转发了多少次
生活案例中:张三去药房取药,提交给工作人员一个药单,工作人员先去药房拿板蓝根,再去西药房拿白加黑,而张三只是站在窗口,最后拿到药
重定向:发生在前台,A.jsp->AServlet -->>B.Jsp
把请求重定向到JSP或Servlet中
由A.Jsp发起请求,由AServlet进行重定向
表象出的现象:地址栏在变化,重定向一次,变化一次
生活中案例:张三又去药房取药,提交给工作人员一个药单,工作人员让他去中药房拿板蓝根,张三自己去了,中药房的人给了他药,又让他去西药房,张三又去了西药房,拿到白加黑,张三去了两个地方,最后拿到药
转发是由 request发起,重定向是由Response发起
转发中的request是同一个对象,该对象中的请求信息始终有效
重定向一次,就会有一个新的request对象,该对象中的请求是新信息
JSP
全称Java Server Pages
运行在Web服务器上
HTML代码+Java代码构成了JSP的代码
<% java代码块 %> <%=此处是Java变量>后面不要写封号
<%-- 隐藏注释--%><%@ page contentType="text/html;charset=UTF-8" language="java" %>
Page指令为容器提供当前页面的使用说明。一个JSP页面可以包含多个page指令。
errorPage | 指定当JSP页面发生异常时需要转向的错误处理页面 |
---|---|
isErrorPage | 指定当前页面是否可以作为另一个JSP页面的错误处理页面 |
info | 定义JSP页面的描述信息 |
isELIgnored | 指定是否执行EL表达式 |
2.include包含JSP文件,即在一个JSP源码中包含另一个JSP的源码
<%@ include file =“other.jsp”>
因为源码整合,所以两个jsp页面中不能有相同的Java变量名
3.taglib指定标签库
一般在JSP中多使用JSTL标签, Java server pages standarded tag library
这个标签一般用一个别名 c 代替,所以JSTL标签又习惯称为c 标签
常用C标签的if 和 For 两个功能
<%@ taglib uri="http://…"prefix=“c”%>
<c: test=“xxxx”> <c:forEach >
要使用c标签需要先使用maven的管理
items 数据来源
指令标签
动作标签
jsp标签名
<jsp:action_name attribute=“value” />
发生在jsp运行阶段,指令标签发生在编码阶段
<jsp:include 和<%@ include 的区别
前者是动态包含,即只包含画面,后者是静态包含,即包含源码,继而包含了画面
既然包含了画面,则两个JSP中的变量名是可以重复的(动态包含)
<jsp:include page=“要包含的页面”>
<jsp:forward page=“要转发的页面”>
El表达式
Expression Language
可以轻松获取容器中的属性/变量
jsp中有一个默认的容器pageContext
在这个容器中放一个属性username,通过EL来获取
<%
pageScope.getAttribute(“username”,“admin”)
%>
${pageContext.username}用Java表达式来获取是
<%=pageContext.getAttribute(“username”)%>
EI表达式主要获取容器中的数据
pageContext是jsp是当前页面容器的变量名,pageScope是EL表达式中代表了当前pageContext的意思,pageContext是Java中的变量名,pageScope是范围的意思
一般不写范围只写属性
C标签
四大容器
由小到大
pageContext -----pageScope 当前页面有效
request ----requsetScope 当次请求有效
session ----SessionScope 当前会话有效,适用于重定向或打开不同的请求
application -----applicationScope当前系统有效,适用于不同用户和浏览器
EL表达式中如果缺失范围,则由小到大依次查找变量,知道找到为止
pageContext中有username=page
request中有username=request
session中有username=session
application中有username=application
${username} == page
九大内置对象
JSP内置对象(9个内置对象):
1.PageContext javax.servlet.jsp.PageContext JSP的页面容器
2.request javax.servlet.http.HttpServletrequest 获取用户的请求信息
3.response javax.servlet.http.HttpServletResponse 服务器向客户端的回应信息
4.session javax.servlet.http.HttpSession 用来保存每一个用户的信息
5.application javax.servlet.ServletContext 表示所有用户的共享信息
6.config javax.servlet.ServletConfig 服务器配置信息,可以取得初始化参数
7.out javax.servlet.jsp.jspWriter 页面输出
8.page java.lang.object)
9.exception java.lang.Throwable
状态码
Http协议的响应状态码,五种
1XX:三个数字,代表服务器已经成功接收客户端提交的请求,给客户端的会话
2XX: 代表了你的请求已经完成接收,并处理完成
3XX:重定向,(继续请求另外的)
4XX:客户端错误(语法错误,无法完成请求)请求的资源不存在404,受限403/405
5XX:服务器错误(处理过程中发生了错误)500
10086(服务器的角色),你(浏览器的角色)
过滤器
过滤所有的请求,经过适当的处理,或者中断请求,或者对请求进行加工处理并转向它的目的地,或进入下一关(下一个过滤器)
小明去Zoo,大门要过滤,去Panda要看门票(过滤器)Panda馆近距离触摸小动物要门票(过滤器)
小明在最后一个过滤器被拒,因为不满足条件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NXB0XtMz-1576330714857)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20191113165640738.png)]
实现Filter接口,并配置过滤器的路径,(哪些请求需要进入该过滤器)
使用场景:编码过滤器(统一解决乱码问题);登录过滤器(未登录则不能使用系统,同事重定向到登录页面);权限过滤器(判断当前用户有没有操作权限,如果没有,则显示错误页面:无权限)
web.xml中过滤器按照配置的先后顺序起作用
注解配置的过滤器是按照注解名称的ASCLL排序的
过滤器的生命周期:Tomcat(WEB)服务启动即创建和初始化,请求经过时,处理
Tomcat服务器停止时,销毁
WEB-INF下任何资源都不能直接访问,要通过后台转发来访问,以此来提升项目的安全性,WEB-INF的特性。
既然通过后台,就可以有过滤,就需要一个Servlet来转发
监听器
监听器Listener,监听一些事件发生,并做一些相应的处理,一般用的不多。
场景:在线人数
监听Session的变化,如果Session创建,则触发,如果有session销毁,则触发
还可以监听Session的属性变化,Request的属性变化,Application属性的变化
登录成功后,Session中有用户信息,退出系统时,要清空当前的Session,释放资源,同时在线人数减1(由工作监听器来完成)
Session的默认有效期:Tomcat30分钟 PHP30分钟
可以通过项目的web.xml配置自己的有效期
还可以在Java代码中通过Session对象的setMaxInactiveInterval
方法设置有效期,单位是s
Java中的设置会覆盖项目web.xml中的session会话的有效期设置
项目web.xml的设置会覆盖Tomcat的web.xml中有关的session会话有效期的设置
Servlet多方法
通过URL或者的method参数来判断是否调用Servlet中的那个方法
Cookie
HTTP协议的一个基本特点:无状态
服务器永远不会主动向客户端发起请求,只是响应,并且服务器不知道上一次访问的是谁,本次访问的又是谁
通过Session和Cookie来实现有状态。Session是发生在服务器,Cookie是发生在客户端,这两个对象都能保存客户的信息。
Session就像服务器中的一个一个的小柜子,里面存放客户的信息及SessionId
Cookie是客户端保存自己的SessionId,以及服务器给我们的信息
客户端每次请求时,都会把SessionId交给服务器,以此来辨别身份
Cookie是由服务端创建的,并有response带回来交给浏览器,由浏览器保存在本地。通过浏览器可以查看Cookie的信息。
Cookie在创建的同时,可以指定它的有效期,比如:关闭浏览器即销毁,或者在本地保存一段时间,或者永久保存在本地。
上传
Apache的上传包
下载两个jar包放入pom
commons file commons fileupLoad
Jsp ,files 创建目录(空目录,mvn不能打包,目录下非空)
下载
见D:xx
Student Teacher
JQuery
后台管理框架,适合做后台管理的项目,他的风格是管理类的页面,和JSOn和AJAX完美集合
AJAX
AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。
异步的JavaScript和XML
浏览器中有一个引擎,这个引擎可以向服务器发送请求,并且接收响应,而页面不切换,只做局部刷新。如:检查用户名是否可用。
如:级联下拉框的使用,根据一个下拉框动态的决定下一个下拉框中的内容
原生AJAX
IE6,7 ActiveXObject,Other XMLHttpXML Request
XMLHttpRequest 用于在后台与服务器交换数据。
JQuery的AJAX
正则
JQuery
最后
以上就是孝顺彩虹为你收集整理的JavaWebJavaWebTomactServletJSP四大容器九大内置对象状态码过滤器监听器Servlet多方法Cookie上传下载JQueryAJAX正则JQuery的全部内容,希望文章能够帮你解决JavaWebJavaWebTomactServletJSP四大容器九大内置对象状态码过滤器监听器Servlet多方法Cookie上传下载JQueryAJAX正则JQuery所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复