栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

javaWeb的创建实践,

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

javaWeb的创建实践,

ⅩⅢ.javaWeb

应用程序架构分为两种
C/S架构
C/S(Client/Server):客户端/服务器
B/S架构
B/S(Browser/Server):浏览器/服务器

相对于C/S应用程序而言, B/S应用程序更容易访问且部署维护时更加方便

1.Tomcat ①URL的组成

https://localhost:8080/myProject/index.jsp

http:协议(Hypertext Transfer Protocol):超文本传输协议
Ip:服务器的地址
Port:端口号,让那个程序相应
myProject/index.jsp:路径/文件名

端口如果设置为80,可以不写端口

状态码 意义

200 成功处理请求

404 找不到服务器资源

500 服务器处理出错

②Tomcat的目录结构
目录文件作用
binstartup.bat, shutdown.bat
conf存放Tomcat的配置文件
libTomcat所需要的lib文件
webappsWeb应用的发布目录
workJSP运行时生成的servlet文件
tempTomcat运行时存放临时文件
logs存放Tomcat的日志文件
③可以通过server.xml修改端口号
//将8080端口修改为6060端口



④在Tomcat中配置虚拟目录

打开conf目录中的server.xml文件,在其中的标签中使用一个标签进行配置。


	
    
  

2.IDEA建原生javaweb项目 Java Web 程序的目录结构
目录文件作用
应用程序文档根目录 /在MyEclipse中为WebRoot
WEB-INF目录该目录存于文档根目录下,并且不能被访问
web.xml文件存放应用使用的各种资源,该目录及其子目录对客户端都是不可以访问,其中包括web.xml(部署表述符)
classes目录存放字节码文件
lib文件夹它包含Web应用程序所需要的JAR包文件
tld文件标签库描述文件
开发Web项目步骤如下

配置开发环境
创建Web项目
编写项目代码
部署Web项目到服务器中
打开浏览器,运行Web项目

①新建java程序勾选Web application

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qXcgJPEo-1635413245670)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20210913152916252.png)]

②打开file菜单,选择project Structure

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ABpoRU4X-1635413245673)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20210913153100481.png)]

③选择Modules —》 sources ,在WEB-INF文件夹下新建classes、lib文件,并将classes文件设置为Excluded文件格式,class储存src目录下编译的源代码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q2y82QS8-1635413245675)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20210913152706550.png)]

④选择Modules—》Paths,选择使用自己刚刚新建的文件路径classes

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ukZusSWR-1635413245677)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20210913153516784.png)]

④选择Modules—》dependencies,添加jar包,设置jar包路径为刚才新建的lib文件夹。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MmlhI9Kp-1635413245680)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20210913153754142.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GaSSpXDM-1635413245683)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20210913153828709.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pokYWKnj-1635413245686)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20210913153847234.png)]

⑤选择Artifacts—》修改输出路径为tomcat的webapps文件下,即部署的位置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6mCKcOCk-1635413245688)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20210913154108659.png)]

⑥选择设置Edit Configurations,选择Tomcat server 下的本地local,(Remote是远程)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5uhiuXfC-1635413245690)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20210913154249375.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nSAwVkKd-1635413245693)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20210913154442783.png)]

⑦配置tomcat

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0gojaP2P-1635413245695)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20210913155302567.png)]

⑧选择部署,按步骤依次点击,之后会添加第⑤步设置的部署位置,之后将Application context 名字修改为程序名,不修改的话地址栏访问时输入的就是http://localhost:8080/javaWeb_war_exploded;修改后地址栏访问输入的就是http://localhost:8080/程序名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Uk9x5I24-1635413245697)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20210913155623246.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XMtc2c9h-1635413245699)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20210913155826022.png)]

⑨配置完成

运行tomcat,此时修改index.jsp中的内容为欢迎使用jsp;ctrl+s保存后直接刷新页面,就会看到刚刚设置的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5jGxhUnU-1635413245700)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20210913160734906.png)]

这两个属性已经生效

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Zq61sEW-1635413245702)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20210913160717383.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8Qyr8hV8-1635413245704)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20210913160705157.png)]

3.配置Web应用

使用web.xml文件配置应用发布
web.xml文件必须保存在/WEB-INF目录下
在 web.xml文件中配置各种资源的发布信息



	
		index.jsp 
        home.jsp 
        
	

4.JSP ①JSP (Java Server Pages)是指:

在HTML中嵌入Java脚本代码
由应用服务器中的JSP引擎来编译和执行嵌入的Java脚本代码
然后将生成的整个页面信息返回给客户端

②JSP 执行过程

Web容器处理JSP文件请求需要经过3个阶段:
翻译阶段 JSP => Servlet
编译阶段 Servlet.java
=> .class
执行阶段

③JSP 页面组成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bt23RAlb-1635413245705)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20210914162935177.png)]

④JSP中的注释

合理、详细的注释有利于代码后期的维护和阅读
*在JSP文件的编写过程中,共有三种注释方法:
HTML的注释: //缺点:不安全,加大网络传输负担
JSP注释:<%-- JSP注释–%> //不可见注释
在JSP脚本中注释:
<% //单行注释 %>
<% %>

⑤JSP指令元素

JSP指令元素主要用来提供整个JSP网页相关的信息,并且用来设定JSP页面的相关属性。
JSP指令的格式
<%@ 指令名 属性= “属性值” %>
JSP有3种指令元素
page指令
include指令
taglib指令

page指令
通过设置内部的多个属性来定义整个页面的属性
语法:<%@ page 属性1=“属性值” 属性2=“属性值1,属性值2”… 属性n=“属性值n”%>

属性描述默认值
language指定JSP页面使用的脚本语言java
import通过该属性来引用脚本语言中使用到的类文件
contentType用来指定JSP页面所采用的编码方式text/html, GBK,UTF-8
errorPage设置该JSP页面的错误处理页面的URL,处理当前页面中引发但未捕获到的异常
isErroePage**设置该页面是否为错误处理页面
⑥tomcat包导入

如果发现out.print()、request等内置对象没有提示方法爆红,都可以找到tomcat 的lib包下的:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WdkjLqil-1635413245707)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20210914172621944.png)]

这三个包进行导入,放入项目的lib文件下就可以解决。如果有些不显示其实没有影响,tomcat包中有这些,但是开发阶段的lib包中没有,所以把包从tomcat中导出来,有些方法自己拼写太麻烦还是导入lib的好。

⑦声明

声明就是在JSP页面中定义Java的变量和方法
语法:<%! Java代码%>

<%@ page language="java" import="java.util.*,java.text.*" contentType="text/html; charset=GBK" pageEncoding="GBK"%>

<%!
String formatDate(Date d){
	SimpleDateFormat formater = new SimpleDateFormat("yyyy年MM月dd日");
	retrun formater.format(d);
}
%>
你好,今天是
<%=formatDate(new Date()) %>



⑧JSP中的标准动作

什么是JSP动作?
JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码。
常用标准动作
jsp:useBean:定义jsp页面使用一个JavaBean实例;
jsp:setProperty:设置一个JavaBean中的属性值;
jsp:getProperty:从JavaBean中获取一个属性值;
jsp:include:在JSP页面包含一个外在文件;
jsp:forward:把到达的请求转发另一个页面进行处理;
注意:动作中得属性区分大小写,属性中得值,必须置于双引号内.

⑨get和post

get方式会在地址栏显示,post不会。get地址栏传值,post属于Http传值

get方式附加的参数的大小不能大于2K,而post理论上没有长度

get方式有几率出现乱码,post不会

get方式相比post提交效率高一点

表单的默认提交方式为get

Login.jsp;
账号: 密码:
<%
String username=request.getParament(“userName”);
String password=request.getParament(“pwd”);
If(username.equals(“admin”)&&password.equals(“admin”)){
Response.sendRedirect(“login_success.jsp”);
}else{
Response.sendRedirect(“login_success.jsp”)
}
%>
注:乱码解决 1.多次转发可能会出现乱码:

在接收数据/过滤器中的第一行插入这两个转码格式

request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
2.查看数据源是不是乱码

​ 查看数据库中的数据是否为乱码

​ 查看请求头中的数据是否为乱码,如果是进行第3

3.在标签中添加

4.相应后传递前端的数据乱码
       response.setContenttype("text/html;chatset=UTF-8")
5.乱码实在解决不了

可以在tomcat中的server.xml文件修改端口中添加该代码



容器居中

注:跳转

跳转时出现子页面出现问题需要父页面整个页面跳转时,

如:子页面点击要执行servlet时,要验证登录操作,失败后需要父页面跳转登陆页面

//servlet中可以这样写
out.write("");

原理就是执行父页面parent 的跳转location.href

⑩转发与重定向

转发:request.getRequestDispatcher(“XXX.jsp”).forward(request,response);

重定向:response.sendRedirect(“XXX.jsp”);

1.两者都可以实现也页面的跳转

2.转发是内部控制权的转移,重定向是重新发送了一次url请求。

3.转发是服务器行为,重定向是客户端行为。

4.如果使用request.setAttribute的话,转发会将数据传递,重定向不会,因为request的作用域只在一次请求中有效

5.如果需要传数据,那么就使用转发,否则就使用重定向。

⑩①request
方 法 名 称方    法  描    述
String getParameter(String name)根据页面表单元素名称获取请求页面提交的数据
String[] getParameterValues(String name)获取页面请求中有重名表单的元素用户的请求数据
getRequestDispatcher(String path)返回一个RequestDispatcher对象该对象的forward方法可以把请求转发到指定资源.
Object getAttribute(String name)返回由name指定的属性值
void setAttribute(String name,Object obj)设置名字为name的request参数值
⑩②作用域
名称说 明
page范围在一个页面范围内有效,通过pageContext对象访问该范围内的对象
request范围在一个服务器请求范围内有效,与客户端请求绑定一起
session范围在一次会话范围内容有效,在会话期间与session绑定的对象皆属于该范围
application范围在一个应用服务器范围内有效,当应用服务启动后即创建该对象,并向所有用户所共享
作用域说 明
pageContext在一个页面中有效只能在创建对象的页面内访问,在服务器跳转后失效
pageContext.setAttribute(“name”,value);pageContext.getAttribute(“name”);
request在一次请求中有效页面跳转后,设置的内容依然被保,request.setAttribute(“name”,value);request.getAttribute(“name”);
session在一次会话中有效重定向后,也可以访问,关闭浏览器失效session.setAttribute(“name”,value);session.getAttribute(“name”);
application在一次服务器中有效,服务器不重启不失效。关闭浏览器,重新打开,也可以访问到application.setAttribute(“name”,value);application.getAttribute(“name”);
⑩③cookie

什么是cookie

cookie是由服务器生成 发送给客户端浏览器的一小段信息, 浏览器将其保存成某个目录下的文本文件中.
cookie的作用
对特定对象(客户)的追踪,如:访问系统次数,最后访问时间,停留时间等
统计网页浏览次数
记录用户登录信息
实现个性化服务,如针对不同的用户偏好展示不同的内容等
安全性能
容易信息泄露

1.cookie的应用

导入包

<%@page import="javax.servlet.http.cookie“%>

创建cookie

cookie newcookie=new cookie(“parameter”, “value”);

parameter:用于代表cookie的名称(key)
value:用于表示当前key名称所对应的值

使用cookie 必须设置一个有效期

写入cookie

response.addcookie(newcookie)

读取cookie

request.getcookies()

类型方法名称说 明
voidsetMaxAge(int expiry)设置cookie的有效期,以秒为单位
voidsetValue(String value)在cookie创建后,对cookie进行赋值
StringgetName()获取cookie的名称
StringgetValue()获取cookie的值
intgetMaxAge()获取cookie的有效时间,以秒为单位
2.JSP中应用cookie
------从登录验证页面表单中获取用户名------
<%
       String username=reqeust.getParameter("username");
String password=request.getParameter(“pwd”);
cookie uname=new cookie("uname", username); 
cookie upwd=new cookie(“pwd", password);
response.addcookie(uname);
Response.addcookie(upwd);
                       //创建cookie,使用response的addcookie方法保存cookie
... ...
%>
-----在显示页面显示用户名---------------
<%//获取请求中的cookie,以数组方式保存
       cookie cookies[ ]=request.getcookies();
		//使用reqeust获取cookie数组,通过cookie的名称获取对应的内容

       //循环遍历数组,得到key=uname的cookie
      for(int i=0;i
    欢迎你:<%=ucookie.getValue() %>//获取key对应的value,输出显示
    <%  }  %>

javascript:alert(document.cookie),在网页控制台使用该代码可以看到该网页现在的cookie值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UZUGbd2J-1635413245710)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20211018173042481.png)]

⑩④Session

session对象用来存储有关用户会话的所有信息,这些信息保存在服务器端

1.session对象常用方法:
类型方法名称说 明
voidsetAttribute(String key,Object value)以key/value的形式保存对象值
ObjectgetAttribute(String key)通过key获取对象值
StringgetId()获取session对象的编号
voidinvalidate()设置session对象失效
2.在控制页面获取用户请求的登录信息进行验证
------登录处理页面的代码片断------
<%
if (rs.next()) {  //如果是已注册用户
session.setAttribute("LOGINED_USER", loginedUser);
response.sendRedirect("index.jsp");
} else {
response.sendRedirect("login.html");
}
%>

------ 在新闻发布系统新闻发布页面增加登录验证------
<%
User user = (User) session.getAttribute("LOGINED_USER");
//如果session中不存在该用户的登录信息,转入登录页面
if (user == null) {
response.sendRedirect("login.jsp");
}
%>

  1. 在新闻发布系统新闻发布页面增加注销
欢迎<%=user.getUserName()   %>使用本系统。
注销




<%
	//3秒后跳转到登录页面
    response.setHeader("refresh","3;URL=index.jsp");
     //让当前session失效
    session.invalidate();
%>
注销成功,3秒后自动转到登录页面,如没有跳转,请点击
这里

⑩⑤cookie与session的比较
sessioncookie
是在服务器端保存用户信息是在客户端保存用户信息
保存的是对象保存的是字符串
随会话结束而关闭可以长期保存在客户端
重要的信息使用session保存通常用于保存不重要的用户信息
⑩⑥SmartUpload组件实现上传功能 1。环境准备

使用SmartUpload组件需要在项目中引入jspsmartupload.jar文件

将jspsmartupload.jar 添加到WEB-INFlib目录下

需要设置表单的enctype属性

2.SmartUpload类及方法
属性名称说 明
public final void initialize(PageContext pageContext)执行上传和下载的初始化工作,必须实现
public void upload()实现文件数据的上传,在initialize方法后执行
public int save(String pathName)将全部上传文件保存到指定的目录下,并返回保存的文件个数
public void setAllowFilesList(String ExtList)指定允许上传的文件扩展名,接收一个扩展名列表,以逗号分隔
public void setDeniedFilesList ( String fileList)指定了禁止上传的文件扩展名列表,每个扩展名之间以逗号分隔
public void setMaxFileSize(long filesize)设定每个文件允许上传的最大长度
public void setTotalMaxFileSIze(long totalfilesize)设定允许上传文件的总长度
3.Files类

封装了所有上传文件的信息集合
常用方法

属性名称说 明
public int getCount()取得文件上传的数目
public File getFile(int index)取得指定位置的File文件对象
public long getSize()取得上传文件的总长度
public Files getFiles()将所有上传文件对象以Collection的形式返回
方法名称说 明
saveAs(String destFilePathName)将文件保存,参数destFilePathName是保存的文件名
isMissing( )判断用户是否选择了文件,即对应表单项是否为空,返回值为boolean类型
public String getFiledName( )获取表单中当前上传文件所对应的表单项的名称
public String getFileName( )获取上传文件的文件名称,不包含路径
4.编写上传文件处理页uploadManage.jsp
<%@ page import="com.jspsmart.upload.*"%> 
<%
    smartUpload su = new SmartUpload();		//创建smartupload对象
    su.initialize(pageContext);				//上传初始化,初始化pageContext对象,pagecontext对象的作用域是本页面
	su.setCharset(“GBK”);					//设置格式,一般设置为UTF-8
	su.upload();							//上传文件
//获取单个上传文件[如果要得到文件信息,则用file,如果不需要,则直接保存
	com.jspsmart.upload.file file = su.getFiles().getFile(0);//创建文件读取对象
//文件在服务器端保存
	file.save(filepath);
//save保存文件		//filepath指定文件保存路径
5.混合表单

混合表单上传文件时获取不到除上传文件的其他值

所以需要通过smartupload取request对象来获取其他值

<%
		//实例化SmartUpload上传组件
		SmartUpload smart = new SmartUpload();		//创建smartupload对象
		//初始化上传操作
		smart.initialize(pageContext);				//上传初始化
		//设置字符集
		smart.setCharset("gbk");					//设置编码格式
		//准备上传
		smart.upload();								//上传文件
		Request smartReq  =smart.getRequest();		//创建request对象
		String username = smartReq.getParameter("username");//通过创建的request获取值
		//将上传的文件保存到项目根路径下的uploadfile目录中
		smart.save("uploadfile");
	%>
	姓名:<%=username %>				
	使用request内置对象获取:	
        <%=request.getParameter("username") %>				


	final javax.servlet.jsp.PageContext pageContext;
 	private static final javax.servlet.jsp.JspFactory _jspxFactory =javax.servlet.jsp.JspFactory.getDefaultFactory();
	pageContext = _jspxFactory.getPageContext(this, request, response,null, true, 8192, true);

	javax.servlet.jsp.PageContext pageContext = javax.servlet.jsp.JspFactory.getDefaultFactory().getPageContext(this, request, response,null, true, 8192, true);

6.综合上传
	SmartUpload smart=new SmartUpload();
	Request req=smart.getRequest();  		//获取Request对象
	
	smart.initialize(pageContext);
	smart.setCharset("UTF-8");
	smart.upload();
	smart.save("upfiles");
	
	String title=req.getParameter("title");
	String writer=(String)session.getAttribute("uname");
	String content=req.getParameter("content");
	SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
	String writerDate=sdf.format(new Date());
	String pic=smart.getFiles().getFile(0).getFileName();		//  获取文件名
        
7.获取表单数据

SmartUpload 获取表单数据
getRequest(): 得到com.jspsmart.upload.Request对象
常用方法

getParameter(String name)获取指定参数之值,等同JSP内置对象Request的getParameter方法
getParameterValues(String name)获取一个页面表单组件对应多个值时的用户的请求数据,等同JSP内置对象Request的getParameterValues方法

上传文件:
文件描述:
<% com.jspsmart.upload.Request surequest = su.getRequest(); String explanation = surequest.getParameter("explanation"); out.println(explanation) ; %>
8.多文件上传
<%
		//实例化SmartUpload上传组件
		SmartUpload smart = new SmartUpload();
		//初始化上传操作
		smart.initialize(pageContext);
		//设置字符集
		smart.setCharset("gbk");
		//准备上传
		smart.upload();
		//取得所有上传文件
		Files files = smart.getFiles();		//获取上传文件
		//循环保存各个文件
		for(int i=0;i

9.控制上传文件的类型

使用SmartUpload组件可以对上传文件的类型进行限制
setAllowedFilesList(): 允许上传的文件类型
setDeniedFilesList(): 禁止上传的文件类型

SmartUpload su = new SmartUpload();
//初始化SmartUpload对象
su.initialize(pageContext);
 try {
    //定义允许上传文件类型   
    su.setAllowedFilesList("gif,jpg,doc");
    //不允许上传文件类型   
    su.setDeniedFilesList("jsp,asp,php,aspx,html,htm,exe,bat");
    //执行上传
    su.upload();
}catch(Exception e)

10.控制上传文件的大小

使用SmartUpload组件可以对上传文件的大小进行限制
setMaxFileSize(): 允许上传的单个文件大小
setTotalMaxFileSize():允许上传的文件总容量

	//定义允许上传文件类型   
    su.setAllowedFilesList("gif,jpg,doc");
    //不允许上传文件类型   
    su.setDeniedFilesList("jsp,asp,php,aspx,html,htm,exe,bat") ;
    //单个文件最大限制   
    su.setMaxFileSize(20000);
    //所有上传文件的总容量限制   
    su.setTotalMaxFileSize(500000);				//文件上传大小单位byte
⑩⑦富文本编辑器

可以实现复杂的多文本输入

1.使用:

导入js文件:wangEditor.min.js

2.实现

欢迎使用 wangEditor 富文本编辑器

3.textarea

通过监控富文本的变化将文本同步更新到textarea

欢迎使用 wangEditor 富文本编辑器

5.servlet

HttpServlet继承于GenericServlet
处理HTTP协议的请求和响应
HttpServlet的方法

方法名称功能描述
void doGet(HttpServletRequest request,HttpServletRresponse response)以Get请求服务时调用
void doPost(HttpServletRequest request,HttpServletRresponse response)以Post请求服务时调用
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloServletTest    extends HttpServlet {
      public void doGet(HttpServletRequest request,     
                                     HttpServletResponse    response)    
                                     throws ServletException, IOException {	  			 	 response.setContentType("text/html;charset=GBK");
	PrintWriter out = response.getWriter();
	out.println("");
	out.println("  Servlet");
	out.println("  ");
	out.println("你好,欢迎来到Servlet世界");
	out.println("  ");
	out.println("");
	out.close();
     }
}

HttpServletRequest类常用方法

方法名称功能描述
String getParameter(String param)获取客户端请求数据
void setCharacterEncoding(String encoding)设置输入字符集

HttpServletResponse类常用方法

方法名称功能描述
void setContentType(String contType)设置输出字符集
void sendRedirect(String url)让浏览器重定向到指定的资源
①编写配置文件


    
         HttpServletTest 
        
        
        cn.jbit.servlet. HttpServletTest 
        
    
    
         HttpServletTest 
        /HttpServletTest 
        
    



②.注解
@webServlet(name = "".displayname="")

与xml相比较

name 等价与 servlet-name

displayname 等价与 url-pattern

大部分情况下格式为

@WebServlet("/name")
③servlet的生命周期

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tl7l50eL-1635413245718)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20210922180253558.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-obx4dLwD-1635413245720)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20210922180327900.png)]

init——》service——》doget/dopost——》服务器关闭时执行destory

④Servlet相关接口 ServeltConfig接口

在Servlet初始化过程中获取配置信息
一个Servlet只有一个ServletConfig对象
ServeltConfig接口的常用方法

方法名称功能描述
String getInitParameter(String name)获取web.xml中设置的以name命名的初始化参数值
ServletContext getServletContext()返回Servlet的上下文对象引用
ServeltContext接口

获取Servlet上下文
ServeltContext接口的常用方法

方法名称功能描述
ServletContext getContext(String path)返回服务器上与指定URL相对应的ServletContext对象
void setAttribute(String name,Object obj)设置Servlet中的共享属性
Object getAttribute(String name)获取Servlet中设置的共享属性
getServletConfig().getServletContext().getContext("/servlet").getServerInfo()

GenericServlet抽象类

提供了Servlet与ServletConfig接口的默认实现方法
GenericServlet的常用方法

方法名称功能描述
String getInitParameter(String name)返回服务器上与指定URL相对应的ServletContext对象,实际上是调用ServletConfig接口的同名方法
ServletContext getServletContext()返回Servlet的上下文对象引用,实际上是调用ServletConfig接口的同名方法
** **void init()初始化****Servlet
⑤全局和局部初始化参数的获取方式/Servlet上下文参数 1.局部初始化参数

    
        HelloServlet
        org.jbit.servlet.HelloServlet
        
        
            initParam
            Hello Servlet
        
    	
    
    
    
        HelloServlet
        /HelloServlet
    


 public void doGet(HttpServletRequest request, 
                      HttpServletResponse response)
                   throws ServletException, IOException {
        System.out.println("处理请求时,doGet()方法被调用。");
        String initParam = getInitParameter("initParam");
     	//局部初始化参数通过ServletConfig的getInitParameter方法
     	//来获得xml中以“initParam”为name 的参数值
     	
        System.out.println(initParam);
    }

2.全局初始化参数

    
        contextParam
        Hello Servlet
    
    


public class HelloServlet extends HttpServlet {
	// …省略其他代码
	public void doGet(HttpServletRequest request, 
			HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("处理请求时,doGet()方法被调用。");
        
		String initParam = getInitParameter("initParam");
		//此处获取HelloServlet名下的局部参数initParam
        String contextParam = 								
			this.getServletContext().getInitParameter("contextParam");
        //该方法获取的是全局初始化参数contextParam
        
        
        System.out.println("Servlet初始化参数" + initParam);
		System.out.println("系统初始化参数" + contextParam);
	}
}
3.获取Servlet上下文参数比较
//调用中的参量:
//调用格式为:
String name = getInitParameter(“name”); 
//或
String name = getServletConfig().getInitParameter(“name”);

//局部参数是通过Servletconfig的getInitParameter方法获取参数

//调用中的参量:
//调用格式为:
String name =getServletContext(). getInitParameter(“name”);
//或
String name = getServletConfig().getServletContext().getInitParameter(“name”);
//全局参数是通过Servletconfig的getServletContext方法获取ServletContext对象
//然后通过ServletContext对象的getInitParameter方法获取参数
6.EL表达式 ①什么是EL

EL即expression Language(表达式语言)
EL的功能
替代JSP页面中的复杂代码
EL的语法
${ EL exprission}

${  bean.name } 或 ${  bean['name'] }

//${bean.name}实质是调用bean的getName()方法
//输出姓名显示
<%
    Map names = new HashMap();
    names.put("one","LiYang");
    names.put("two","WangHua");
    request.setAttribute("names",names);
%>
姓名:${names.one}
姓名:${names["two"] }
②隐式对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FUFQlCLt-1635413245722)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20210924143033016.png)]

//对象取值写法:
${  bean.name } 或 ${  bean['name'] }

//实际上改代码的完整形式是:

${requestScope.bean.name}
${ username }
//直接使用变量名获取值$,这种方法其实也可以,但是最好还是带上前边的隐式对象,不加隐式对象的话,EL会在pageScope,requstScope,sessionScope,applicationScope这些隐式对象中循环查找该参数名
//加上隐式对象的作用就是,指明该参数是从哪个方向获取的,要去哪个隐式对象中取查找
//如果该参数是从session中传过来的,那么就调用
${ sessionScope.username }
//这样就可以获取session中该参数名的值
//一般后端向前端穿参数尽量使用requstScope

属性范围EL****中的名称
pagepageScope,例如${pageScope.username},表示在page范围内查找username变量,找不到返回Null
requestrequstScope
sessionsessionScope
applicationapplicationScope
${param.参数}
//param是用来接受页面传来的参数值

${paramValues.参数}
//param是用来接受页面传来的集合对象值。如:list等

//Param:
${param.name}
//等价于
request.getParameter("name");

//paramValues :
${params.name}
//等价于
request.getParameterValues("name");
//如:
			${paramValues.habit[0]}  
	      	${paramValues.habit[1]}  

注意:

对象名称说 明
pageScope返回页面范围的变量名,这些名称已映射至相应的值
requestScope返回请求范围的变量名,这些名称已映射至相应的值
sessionScope返回会话范围的变量名,这些名称已映射至相应的值
applicationScope返回应用范围内的变量,并将变量名映射至相应的值
param返回客户端的请求参数的字符串值
paramValues返回映射至客户端的请求参数的一组值
pageContext提供对用户请求和页面信息的访问
③pageContext
得到请求的url但是不包含参数 :
/${pageContext.request.requestURL}:

得到web应用的名称: /${pageContext.request.contextPath}:
得到请求方法: /${pageContext.request.method}:
得到用户: /${pageContext.request.remoteUser}:
得到用户的IP地址: /${pageContext.request.remoteAddr }:
得到sessionID /${pageContext.session.id}:
④EL运算符

empty 运算符:${empty 对象}

判断对象是否为空

算数操作符说 明
加法+
减法_
乘法*****
除法/ 和 div
取余% 和 mod
逻辑操作符说 明
&& 和 and
|| 和 or
! 和 not
关系操作符说 明
等于== 和 eq
不等于!= 和 ne
小于< 和 lt
大于> 和 gt
小于等于<= 和 le
大于等于>= 和 ge
操作符描述
.访问一个Bean属性或者一个映射条目
[]访问一个数组或者链表的元素
( )组织一个子表达式以改变优先级
+
-减或负
*
/ or div
% or mod取模
== or eq测试是否相等
!= or ne测试是否不等
< or lt测试是否小于
> or gt测试是否大于
<= or le测试是否小于等于
>= or ge测试是否大于等于
&& or and测试逻辑与
|| or or测试逻辑或
! or not测试取反
empty测试是否空值
7.JSTL ①什么是JSTL

JSTL(JavaServerPages Standard Tag Library)JSP标准标签库
使用JSTL实现JSP页面中逻辑处理

JSTL通常会与EL表达式合作实现JSP页面的编码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y7h2kqF1-1635413245724)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20210924145547381.png)]

②使用JSTL的步骤 1.创建Web工程,添加jar包

项目中如果要使用JSTL和EL表达式,就必须导入jstl.jar和standard.jar文件

2.在JSP页面添加taglib指令
……
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
……
3.使用JSTL标签

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ERgH3x85-1635413245726)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20210924161427368.png)]

③.通用标签的使用

set:设置指定范围内的变量值



out:计算表达式并将结果输出显示



remove:删除指定范围内的变量



标签有如下属性:

属性描述是否必要默认值
value要输出的内容
default输出的默认值主体中的内容
escapeXml是否忽略XML特殊字符true


设置变量之前的值是:msg=



设置新值以后:msg=
移除变量msg以后:msg=
④.条件标签的使用

if:if标签用于判断条件是否成,与Java中的If语句做用用相同
语法

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>



    
	

:choose用于多重选择执行代码,与Java中的If—else结构;该标签没有任何属性,但必须结合标签.


	
		
	
	......
	
		
	


⑤.条件标签的应用




    



已经登录!



⑥.迭代标签
属性名类型描述
items数值,集合等将要迭代的集合对象
varString是迭代到的元素的引用
varStatusString保存当前迭代状态
beginint指定开始的索引
endint指定迭代结束的索引
stepint表示循环的步长

迭代标签
实现对集合中对象的遍历
语法:



		…循环体代码…

⑦.迭代标签的应用
index.jsp
		
	
			没有你想要的数据
编号:${u.id} 用户名 :${u.username } 年龄:${u.age }
编号:${u.id} 用户名 :${u.username } 年龄:${u.age }
⑧总结

EL(expression Language)即表达式语言,是一种简单的数据访问语言。

使用EL访问JavaBean属性值的格式为:

J a v a B e a n . p r o p e r t y N a m e ∗ ∗ 或 ∗ ∗ {JavaBean.propertyName}**或** JavaBean.propertyName∗∗或∗∗ {JavaBean[“propertyName”]}

EL提供了内置对象

pageScope、requestScope、sessionScope、applicationScope来访问作用域范围内容的数据。
JSTL (JavaServer Pages Standard Tag Library)即JSP标准标签库,包含用于编写和开发 JSP页面的一组标准标签,它可以为用户提供一个无脚本环境。
JSTL常用标签有如下3类:
通用标签:
条件标签:
迭代标签:

8.过滤器filter和监听器listener 过滤器filter ①介绍

什么是Filter?
依据字面上的中文意思为过滤器。
Filter的作用
当用户的请求到达指定的URL之前,可以借助Filter来改变这些请求的内容;同样地,当响应结果到达客户端之前,可以使用Filter修改输出的内容。
什么是FilterChain(过滤器链)?
一个FilterChain包含多个Filter。

Filter生命周期

实例化——》初始化——》过滤——》销毁

FilterChain过滤链

一个过滤器链(FilterChain),在请求到达请求资源前会依次经过链中的所有过滤器,配置在前的Filter先执行,而请求处理完成后,会按照相反的顺序再次经过链中的所有过滤器。

方法
Filter接口方法作用
Init(FilterConfig)初始化
doFilter(ServletRequest,ServletRespone,
FilterChain)过滤
destory()销毁

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SIJfbK1y-1635413245728)(C:UsersAdministratorAppDataRoamingTyporatypora-user-imagesimage-20210927141809261.png)]

②配置 1.实现Filter接口
import javax.servlet.*;
import java.io.IOException;

public class Encodingfilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //注意ServletResponse,ServletRequest是
        //HttpServletRequest和HttpServletResponse的父接口
        //使用时需要强转
    }

    @Override
    public void destroy() {

    }
}
2.配置注解或XML

XML配置


	Logger
	com.util.LoggerFilter



	Logger
	/*


注解

@WebFilter(urlpatterns = "/*")

//fileName是类名
@WebFilter(urlpatterns = "/*" filterName = "Encodingfilter")

④过滤器的应用场合

加载:对于到达系统的所有请求,过滤器收集诸如浏览器类型,一天中的时间等相关信息,并对它们进行日志记录
性能:过滤器在内容通过线路传来并在到达Servlet和JSP页面之前解压缩该内容,然后再取得响应内容,并在响应内容发送到客户机器之前将它转换为压缩格式
安全:过滤器处理身份验证令牌的管理,并适当地限制安全资源的访问,提示用户进行身份验证或将它们指引到第三方进行身份验证.
会话管理:将Servlet和JSP页面与会话处理代码混杂在一起可能带来相当大的麻烦.使用过滤器来管理会话可以让WEB页面集中精力考虑内容显示和委托处理,而不必担心会话管理的细节.

监听器Listener ①Listener的作用

Listener是Servlet规范的另一个高级特性,用于监听Java Web程序中的事件,例如创建、销毁session、request、context等,并触发相应的事件,事件发生的时候会自动触发该事件对应的Listener。
Java Web程序也一样,使用Listener和Event完成相应事件的处理。

②监听器配置web.xml


com.javaweb.listener.ApplicationListener


③application监听器的作用

application监听器的作用
监听的Web应用的生命周期。
用于处理应用程序启动初始化和关闭释放资源的问题
实现
实现ServletContextListener接口

**

注:此处是很好的实体类创建的地方,spring框架也是在这里进行了类的管理创建

**

public class ApplicationListener implements ServletContextListener {
    //监听服务器关闭时执行
	@Override
	public void contextDestroyed(ServletContextEvent sct) {
		System.out.println("应用关闭-->"+new Date().toLocaleString());
	}
	 //监听服务器开启时执行
	@Override
	public void contextInitialized(ServletContextEvent sct) {
		System.out.println("应用启动-->"+new Date().toLocaleString());
		//得到应用路径
		String path = sct.getServletContext().getContextPath();
		System.out.println("应用是:"+path);
	}
}
④session监听器 session状态监听:HttpSessionListener接口
方法描述
public void sessionCreated(HttpSessionEvent hse)session创建时调用
public void sessionDestroyed(HttpSessionEvent hse)session销毁时调用
public class MySessionListener implements HttpSessionListener {
	@Override
	public void sessionCreated(HttpSessionEvent hse) {
		String dateTime = new Date().toLocaleString();
		HttpSession session = hse.getSession();
		System.out.println(dateTime+" 创建 sessiom,ID:"+session.getId());
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent hse) {
		String dateTime = new Date().toLocaleString();
		HttpSession session = hse.getSession();
		System.out.println(dateTime+" 销毁session,ID:"+session.getId());
	}
session属性监听:HttpSessionAttributeListener接口
方法描述
public void attributeAdded(HttpSessionBindingEvent hsb)增加属性时调用
public void attributeRemoved(HttpSessionBindingEvent hsb)删除属性时调用
public void attributeReplaced(HttpSessionBindingEvent hsb)替换属性时调用
public class MySessionAttrListener implements HttpSessionAttributeListener {
	@Override
	public void attributeAdded(HttpSessionBindingEvent hsb) {
		//得到当前session
		System.out.print("session ID:"+hsb.getSession().getId());
		//获取属性名和属性值
		System.out.println(" 增加属性:"+hsb.getName()
							+",属性值是:"+hsb.getValue());
}
public void attributeRemoved(HttpSessionBindingEvent hsb) {
		System.out.print("session ID:"+hsb.getSession().getId());
		System.out.println(" 删除属性:"+hsb.getName()
							+",属性值是:"+hsb.getValue());
	}
public void attributeReplaced(HttpSessionBindingEvent hsb) {
		System.out.print("session ID:"+hsb.getSession().getId());
		System.out.println(" 替换属性:"+hsb.getName()
							+",属性值是:"+hsb.getValue());
	}
}
监听器应用 ①字符集处理
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
	//设置请求字符集
	request.setCharacterEncoding("GBK");
	//请求向下传递
	chain.doFilter(request, response);
}
②Listener经典案例-在线用户统计

要完成在线用户统计功能的监听器,需要实现如下3个接口。
ServletContextListener接口
使用此接口的作用是:在应用初始化的时候向application中添加一个空的Set集合用来保存在线用户。
HttpSessionAttributeListener接口
使用此接口的作用是:当用户登陆成功后,会向session中添加一个属性用来保存用户信息,这样就表示新用户登陆,之后把用户保存在在线用户列表中。
HttpSessionListener接口
使用此接口的作用是:当用户注销后将用户信息从用户列表中删除。

package com.xyd.Filter;


import com.xyd.entity.User;

import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

public class Encodingfilter implements ServletContextListener, HttpSessionListener, HttpSessionAttributeListener {

    javax.servlet.ServletContext Application;
    //Application监听器
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        String path = sce.getServletContext().getContextPath();
        System.out.println("应用开启:时间:"+new Date().toLocaleString());
        System.out.println("应用开启:路径:"+path);

        Application = sce.getServletContext();
        Set onLineUsers = new HashSet<>();
        //开启服务器添加在线用户集合
        Application.setAttribute("onLineUsers",onLineUsers);
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        String path = sce.getServletContext().getContextPath();
        System.out.println("应用关闭:时间:"+new Date().toLocaleString());
        System.out.println("应用关闭:路径:"+path);

        Application = sce.getServletContext();
        //关闭服务器后删除在线用户集合
        Application.removeAttribute("onLineUsers");
    }

    //Session监听器

    
    @Override
    public void sessionCreated(HttpSessionEvent se) {
//        User user = (User) se.getSession().getAttribute("user");
        System.out.println("创建Session:");
//        //将session添加如onLineUsers
//        Set onLineUsers = (Set) Application.getAttribute("onLineUsers");
//        onLineUsers.add(user);
    }

    
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        HttpSession session =se.getSession();
        User user = (User) session.getAttribute("user");
        System.out.println("删除Session:"+user.toString());
        //将session从onLineUsers中删除
        Set onLineUsers = (Set) Application.getAttribute("onLineUsers");
        onLineUsers.remove(user);
    }

    //session属性监听
    @Override
    public void attributeAdded(HttpSessionBindingEvent se) {
        System.out.println("添加Session属性:");

        User user = (User) se.getSession().getAttribute("user");
        //将session添加如onLineUsers
        Set onLineUsers = (Set) Application.getAttribute("onLineUsers");
        onLineUsers.add(user);

    }

    @Override
    public void attributeRemoved(HttpSessionBindingEvent se) {
        System.out.println("移除Session属性:");
        User user = (User) se.getSession().getAttribute("user");
        //将session添加如onLineUsers
        Set onLineUsers = (Set) Application.getAttribute("onLineUsers");
        onLineUsers.remove(user);

    }

    @Override
    public void attributeReplaced(HttpSessionBindingEvent se) {
        System.out.println("替换Session属性:");
        User user = (User) se.getSession().getAttribute("user");
        //将session添加如onLineUsers
        Set onLineUsers = (Set) Application.getAttribute("onLineUsers");
        onLineUsers.add(user);
    }
}

9.Ajax ①Ajax技术和传统的Web开发技术有什么异同?

发送方式不同
服务器响应不同
客户端处理响应的方式不同

②Ajavx是什么

Ajax:只刷新局部页面的技术

Asynchr onous Javascript And Xml

​ 异步的

Javascript:更新局部的网页
XML:一般用于请求数据和响应数据的封装
XMLHttpRequest对象:发送请求到服务器并获得返回结果 //Ajax技术的核心
CSS:美化页面样式
异步:发送请求后不等返回结果,由回调函数处理结果

③XMLHttpRequest对象的方法
方法名说 明
open(method,URL,async)建立与服务器的连接
method参数指定请求的HTTP方法,值是GET或POST
URL参数指定请求的地址,
async参数指定是否使用异步请求,其值为true或false
send(content)发送请求 content参数指定请求的参数,
格式为String:“name1=”+value1+"&name2="+value2
setRequestHeader(header,value)设置请求的头信息 ,使用post提交时使用,防止传递中出现错误、乱码等问题,
④XMLHttpRequest用属性

onreadystatechange:指定回调函数

readystate: XMLHttpRequest的状态信息 即就绪状态码

status:HTTP的状态码

responseText:获得响应的文本内容
responseXML:获得响应的XML文档对象

就绪状态码说 明
0XMLHttpRequest对象没有完成初始化
1XMLHttpRequest对象开始发送请求
2XMLHttpRequest对象的请求发送完成
3XMLHttpRequest对象开始读取响应,还没有结束
4XMLHttpRequest对象读取响应结束
HTTP的状态码说明
200服务器响应正常
400无法找到请求的资源
403没有访问权限
404访问的资源不存在
500服务器内部错误

在使用时一般判断的是是否读取响应结束的状态:4,和服务器响应正常的Http状态码:200;

在回调函数中,如果两个状态都匹配即就绪状态是4而且状态码是200,才可以处理服务器数据。

⑤创建XmlHttpRequest对象
	var xhr;
  	//初始化XMLHttpRequest
  	function createXHR(){
  		try{
  			return new XMLHttpRequest();  //初始化ie7版本之后,火狐,谷歌
            //正常状态返回的都是这个
  		}catch(e){
  			return new ActiveXObject("Microsoft.XMLHTTP");		//ie7以前的版本
            //这个是要兼容之前版本的IE
  		}
  	}

⑥演示示例:使用Ajax实现用户名验证

GET方式:

function checkName(){
    //XmlHttpRequest对象初始化
	xhr=createXHR();
    //获取需要传递的参数
  	var name=document.getElementById("username").value;
    //设置回调函数
  	xhr.onreadystatechange=callback;  
    //此时使用的是GET方式提交,所以参数的设置直接跟在URL后边,设置使用异步true
  	xhr.open("GET","CheckUserNameServlet?username="+name,true);
    //使用GET方式提交后不需要在send中设置参数了,传递值设置为null
  	xhr.send(null);  		
  }

function callback(){//回调函数
  		 if(xhr.readyState==4 && xhr.status==200){
  			 var msg=document.getElementById("msg");
  			 var result=xhr.responseText;
             //使用responseText来获取返回值
  			 if(result=="true"){
  				 msg.innerHTML="用户名已经存在";
  			 }else{
  				 msg.innerHTML="用户名可以使用";
  			 }
  		 }
  	}

POST

function searchSuggest(){
    //XmlHttpRequest对象初始化
  	xhr=createXHR();
    //获取需要传递的参数
 	var keyword=document.getElementById("txtSearch").value;
    //设置回调函数
  	xhr.onreadystatechange=callback;
    //打开链接,传递方式为POST,POST提交时只需要写名地址不需要加参数
  	xhr.open("POST","SuggestServlet",true);
    //post提交时防止发生错误设置请求头参数。。。。。固定格式
  	xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    //POST提交时添加参数
  	xhr.send("keyword="+keyword);  		
}
⑦总结

Ajax(Asynchronous Javascript And XML)。
Ajax并不是一种新技术,而是整合几种现有技术:Javascript、XML和CSS,其中主要是Javascript。

XMLHttpRequest对象的属性、方法说明
onreadystatechange
属性
设置传递后需要调用的回调参数//只写参数名即可
open( )
方法
建立连接,参数有method:提交方式、URL:地址、async:是否使用异步传递(true/false)
send( )
方法
传递参数
POST传递时需要传递参数
GET传递时不需要设置为null
readyState
属性
就绪状态码,读取响应完成的值为4
status
属性
HTTP状态码,服务器响应正常为200
responseText
属性
获取响应返回的文本内容
responseXML
属性
获得响应返回的XML文档对象
setRequestHeader()
方法
使用POST方式提交时需要设置请求头
10.jquery.ajax ①使用方法

get:

jQuery.get(url, [data], [callback], [type])

post:

Query.post(url, [data], [callback], [type])

参数名称类型说明
urlString请求的URL地址
data(可选)Map要发送到服务器的key/value数据
callback(可选)Function响应成功时的回调函数
type(可选)String返回内容格式,可以是:xml, html, script, json, text, _default
$("#test").click(function () {
            $.get("testServlet",{type:"test"},function (data) {
                console.log(data.name);

            });
        },"text")
//注意,返回类型是String,说明时需要加上"";

返回类型补充说明

如果前端返回类型type没有选的话,默认为text,如果想要使用json格式则需要在后端加上设置格式

		String type= req.getParameter("type");
        PrintWriter out= resp.getWriter();
        resp.setContentType("application/json");
		//设置响应response的格式为json
        if(type!=null){
            if(type.equals("test")){
                out.write("{"name":"小明"}");
            }else{
                out.write("2");
            }
        }else{
            out.write("0");
        }

$.ajax()

格式:

$.ajax({
            type:"POST",
            url:"xxxxxxxxx",
            data:{
                name:$("name").val(),
                password:$("password").val()
            },
            datatype:"text",
            success:function (data){				//成功后触发
                if(data=="true"){
                    alter("成功");
                }else{
                    alter("失败");
                }
            },
            error:function(jqxhr,textstatus,errorThrown){		//发生错误时触发
            console.log("错误");
        }
    })
json格式:

格式为key:value,使用时key要加上"“号,value为int时不需要加”“号,value为String时需要加”"号,

当value为数组时需要加[ ]号,json格式整体加{ }号。

{

​ “int”:value,

​ “String”:“value”

​ “list”:[

​ value,

​ value

​ ]

}

{
	"key1":1,
	//此时key1的值为int类型:1
    "key2":"1",
    //此时key2的值为String类型:"1"
  	"key3": [
    	1, 
    	2, 
    	3, 
    	4
      ]
	//此时key3的值为int[]数组
}
11.layer.js

lib中已收录,下载过H-ui框架,无需单独下载,但页面需要单独引入。单独下载地址 layer_v3.1.1.js

layer.js是由前端大牛贤心编写的web弹窗插件。

使用方法

1、layer.js依赖jquery或者zepto.js。


js调用

layer.open({  title: '在线调试'  ,content: '可以填写任意的layer代码'});
demo效果

打开弹窗

相关参数
属性默认值描述备注
type0类型0 信息框,默认 | 1 页面层 | 2 iframe层 | 3 加载层 | 4 tips层
title“信息”标题支持三种类型的值。字符串:"我是标题"数组:[‘文本’, ‘font-size:18px;’]布尔值:false
content“”内容支持:String、html、DOM、URL、数组
skin“”样式类名可以定制layer皮肤。
area“auto”宽高数组 [‘500px’, ‘300px’]
offset垂直水平居中坐标String/Array。[‘100px’, ‘50px’]
icon-1图标-1(信息框)/0(加载层)
btn“确认”按钮btn: [‘按钮一’, ‘按钮二’, ‘按钮三’] //可以无限个按钮。,yes: function(index, layero){ //按钮【按钮一】的回调},btn2: function(index, layero){ //按钮【按钮二】的回调 //return false 开启该代码可禁止点击该按钮关闭},btn3: function(index, layero){ //按钮【按钮三】的回调 //return false 开启该代码可禁止点击该按钮关闭},cancel: function(){ //右上角关闭回调 //return false 开启该代码可禁止点击该按钮关闭}
btnAlignr按钮排列“l” 左对齐 | “c” 居中对齐 | “r” 右对齐
closeBtn1关闭按钮两种风格:1 | 2 | 0 不显示
shade0.3 透明度的黑色背景(’#000’)遮罩String/Array/Boolean[0.8, ‘#393D49’]0 不显示遮罩。
shadeClosefalse是否点击遮罩关闭
time0 不自动关闭自动关闭所需毫秒5000 5秒后自动关闭
id用于控制弹层唯一标识String
anim0弹出动画0 平滑放大 | 1 从上掉落 | 2 从最底部往上滑入 | 3 从左滑入 | 4 从左翻滚 | 5 渐显 | 6 抖动
isOutAnimtrue关闭动画
maxminfalse最大最小化
fixedtrue固定
resizetrue是否允许拉伸
resizingnull监听窗口拉伸动作回调函数。
scrollbartrue是否允许浏览器出现滚动条
maxWidth360最大宽度只有当area: 'auto’时,maxWidth的设定才有效。
maxHeight最大高度只有当高度自适应时,maxHeight的设定才有效。
zIndex19891014 贤心生日层叠顺序用于解决和其它组件的层叠冲突。
move‘.layui-layer-title’触发拖动的元素String/DOM/Boolean。默认是触发标题区域拖拽。如果你想单独定义,指向元素的选择器或者DOM即可。如move: ‘.mine-move’。你还配置设定move: false
moveOutfalse是否允许拖拽到窗口外默认只能在窗口内拖拽,如果你想让拖到窗外,那么设定moveOut: true即可。
moveEndnull拖动完毕后的回调方法回调函数。
tips2方向和颜色Number/Array。tips层的私有参数。支持上右下左四个方向
tipsMorefalse是否允许多个tips允许多个意味着不会销毁之前的tips层。
successnull层弹出后的成功回调方法回调函数
yesnull确定按钮回调方法回调函数
cancelnull右上角关闭按钮触发的回调回调函数,携带两个参数。当前层索引参数(index)、当前层的DOM对象(layero)。如果不想关闭,return false即可。
endnull层销毁后触发的回调回调函数
full/min/restorenull分别代表最大化、最小化、还原 后触发的回调回调函数
layer.config(options)初始化全局配置
layer.open(options)核心方法
layer.alert(content, options, yes)普通信息框
layer.confirm(content, options, yes, cancel)询问框
layer.msg(content, options, end)提示框
layer.load(icon, options)加载层
layer.tips(content, follow, options)tips层
layer.close(index)关闭特定层
layer.closeAll(type)关闭所有层“dialog” 关闭信息框 | “page” 关闭所有页面层 | “iframe” 关闭所有的iframe层 | “loading” 关闭加载层 | “tips” 关闭所有的tips层
layer.style(index, cssStyle)重新定义层的样式
layer.title(title, index)改变层的标题
layer.getChildframe(selector, index)获取iframe页的DOM
layer.getframeIndex(windowName)获取特定iframe层的索引
layer.iframeAuto(index)指定iframe层自适应
layer.iframeSrc(index, url)重置特定iframe url
layer.setTop(layero)置顶当前窗口
layer.full()、layer.min()、layer.restore()手工执行最大小化
layer.prompt(options, yes)输入层
layer.tab(options)tab层
layer.photos(options)相册层

12.富文本编辑器



	

新闻内容

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/354039.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号