$的四个作用: 1. $(function(){}): 相当于window.onload = function(){} 2. $(“html字符串”): 根据这个html字符串创建元素节点对象 3. $(“选择器”): 根据这个选择器查找元素节点对象 4. $(DOM对象): 将DOM对象包装为jQuery对象 -例如:var $btnEle = $(btnEle) -声明一个变量指向jQuery对象,那么这个变量习惯上要以$开头
jQueryAPI_1.7.1_CN.chm
1、作用:XML的使命,就是以一个统一的格式,组织有关系的数据,为不同平台下的应用程序服务。
2、定义:XML用来传输和存储数据,HTML用来显示数据
<?xml version="1.0" encoding="UTF-8"?> <student> <student id="1"> <name>John</name> <gender>男</gender> <age>19</age> <student id="2"> <name>James</name> <gender>男</gender> <age>22</age> </student>
cdata区的内容不会被xml编译
dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件都采用dom4j,例如Hibernate。
使用dom4j开发,需导入dom4j相应的jar包dom4j-1.6.1.jar
public void test2(){ SAXReader reader = new SAXReader(); try { Document doc = reader.read("src/student.xml"); //获取根标签 Element root = doc.getRootElement(); //获取根标签下的子标签 List<Element> students = root.elements("student"); for (Element stu:students) { //获取name属性 Element nameElement = stu.element("name"); //asXML(): 转换成XML字符串 String nameXML = nameElement.asXML(); //getText(): 获取标签中的文本内容 String name = nameElement.getText(); //elementText() 直接获取指定标签名的内容 String gender = stu.elementText("gender"); int age = Integer.parseInt(stu.elementText("age")); //attributeValue获取属性值 int id = Integer.parseInt(stu.attributeValue("id")); System.out.println(new Student(id, name, gender, age)); } } catch (DocumentException e) { e.printStackTrace(); } }
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ws3qOEzY-1634465849931)(https://raw.githubusercontent.com/FinnSHI/PictureBed/main/imgs/image-20210913132215370.png)]
javaweb三大组件:Servlet程序、Filter过滤器、Listener监听器
静态页面:css,js,img,mp4…
动态页面:jsp,servlet
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ls8DLFcg-1634465849932)(https://raw.githubusercontent.com/FinnSHI/PictureBed/main/imgs/image-20210913140319040.png)]
cmd——catalina run
直接把项目放在\webapps下
在tomcat文件下的conf\catalina\localhost里创建xml文件:
①path: 工程访问路径
②docBase:工程目录在哪里
<content path="\mypro" docBase="E:\developer_pro\mypro" />
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HV17BITo-1634465849934)(https://raw.githubusercontent.com/FinnSHI/PictureBed/main/imgs/image-20210913144547650.png)]
1.Servlet是javaee的规范之一。是一个接口
2.javaweb三大组件:Servlet程序、Filter过滤器、Listener监听器
serlvet是运行在Web服务器上的小型java程序,通过HTTP来接受和响应**Web客户端**的请求。
①方法一:使用IDEA创建Servlet程序(最方便,常用)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mpQamyUH-1634465849935)(https://raw.githubusercontent.com/FinnSHI/PictureBed/main/imgs/image-20210914161036273.png)]
②方法二:继承HttpServlet类
a.继承HttpServlet类
b.重写doGet或doPost方法
c.到web.xml中配置servlet程序的访问
③方法三:实现servlet接口类
a.编写一个类区实现Servlet接口
b.实现service方法,处理请求,并响应数据
c.到web.xml中配置servlet程序的访问
<?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"> <!--给Tomcat配置Servlet程序--> <servlet> <!--servlet-name: 给servlet程序取一个别名--> <servlet-name>HelloServlet</servlet-name> <!--servlet-class: servlet全类名--> <servlet-class>com.finn.servlet.HelloServlet</servlet-class> </servlet> <!--servlet-mapping: 给servlet程序配置访问地址--> <servlet-mapping> <!--servlet-name: 告诉服务器,我配置的地址给哪个servlet程序使用--> <servlet-name>HelloServlet</servlet-name> <!-- url-pattern: 配置访问地址 /hello: 表示http://ip:port/工程路径/hello --> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e05zaXD4-1634465849936)(https://raw.githubusercontent.com/FinnSHI/PictureBed/main/imgs/image-20210914142710577.png)]
1、2、 只在创建servlet程序时调用时执行一次
3、每次访问都会调用
4、servlet停止的时候才会执行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qu9DJYQK-1634465849936)(https://raw.githubusercontent.com/FinnSHI/PictureBed/main/imgs/image-20210915135027697.png)]
servlet配置信息。
System.out.println("1. 获取Servlet程序的别名servlet-name的值: " + servletConfig.getServletName()); System.out.println("2. 获取Servlet初始化参数init-param " + servletConfig.getInitParameter("url")); System.out.println("3. 获取ServletContext对象: " + servletConfig.getServletContext());
ServletContext servletContext = getServletConfig().getServletContext(); System.out.println("context-param的username: " + servletContext.getInitParameter("username")); System.out.println("context-param的password: " + servletContext.getInitParameter("password"));
如果子类重写init初始化方法,要写上super.init(config);
域对象:可以像Map一样存取数据的对象。
域:指存取数据的操作范围。
方法:putAttribute(), getAttribute(), removeAttribute()
<context-param> <param-name>username</param-name> <param-value>context</param-value> </context-param> <context-param> <param-name>password</param-name> <param-value>root</param-value> </context-param>
ServletContext servletContext = getServletConfig().getServletContext(); System.out.println("context-param的username: " + servletContext.getInitParameter("username")); System.out.println("context-param的password: " + servletContext.getInitParameter("password"));
System.out.println("当前工作路径: " + servletContext.getContextPath()); // "/":表示http://ip:port/工程名/ (映射到IDEA代码的web目录) System.out.println("工程部署的路径是: " + servletContext.getRealPath("/")); //E:\developer\JavaWeb\out\artifacts\servlet_war_exploded\css System.out.println("工程部署的路径是: " + servletContext.getRealPath("/css")); //E:\developer\JavaWeb\out\artifacts\servlet_war_exploded\img System.out.println("工程部署的路径是: " + servletContext.getRealPath("/img"));
工程部的路径是: E:\developer\JavaWeb\out\artifacts\servlet_war_exploded\ “ 这个路径是IDEA整合Tomcat后,拷贝的Tomcat副本内容。
域:整个web工程。
向Tomcat服务器发送请求时,服务器会把请求过来的HTTP协议信息解析好封装到Request对象中,然后传递到service方法(doGet和doPost)中。
我们可以通过HttpServletRequest对象,来获取所有请求信息。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oeEZznxr-1634465849937)(https://raw.githubusercontent.com/FinnSHI/PictureBed/main/imgs/image-20210917134957746.png)]
client向server要HTTP Header和Object。
请求行
请求的方式 GET
请求的资源路径[+?+请求参数]
请求的协议的版本号 HTTP/1.1
请求头
form标签 method=get
a标签
link标签引入css
Script标签引入js文件
img标签引入img文件
iframe标签引入html文件
浏览器输入地址后回车
client向server发数据。
请求行
请求的方式 POST
请求的资源路径[+?+请求参数]
请求的协议的版本号 HTTP/1.1
请求头
key:value 组成——不同的键值对,表示不同的含义。
空行
请求体 ==>发送给服务器的数据
POST和GET常见的请求头:
Accept: 表示客户端可以接受的数据类型
Accept-Language: 表示客户端可以接收的语言类型
Referer:表示请求发送时,浏览器地址栏中的地址
User-Agent:浏览器信息
Host:请求的端口名和端口号
响应行
响应头
key:value
空行
响应体 ==> 回传给客户的数据
MIME就是HTTP中数据协议。比如.avi, .html, .txt, .mpg等等。
Servlet之间可以共同完成任务。从Servlet1到Servlet2的操作叫请求转发。
地址栏不会变化
client只有一次请求
会共享Request域中的数据
可以转发到WEB-INF下的资源
注意:其中,WEB-INF是浏览器无法直接访问的,但是却可以通过请求转发的方法访问到。
当前页面中所有相对路径工作时,会参照base指定的路径来进行跳转。
这样可以避免请求转发的时候,跳转到错误的路径。
. 当前目录
… 上一级目录
浏览器解析时,‘/’是 http://ip:port/
服务器解析时,‘/’是 http://ip:port/工程路径
<url-pattern>/hello</url-pattern>
servletContext.getRealPath("/");
request.getRequestDispatcher("/");
特殊情况:
response.sendRediect("/"); //把斜杆发送给浏览器解析。得到http://ip:port/
两个流只能同时使用一个
public class ResponseIOServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // resp.setCharacterEncoding("UTF-8");//设置【服务器】字符集 // resp.setHeader("Content-Type", "text/html; charset=UTF-8");//设置【浏览器】字符集 resp.setContentType("text/html; charset=UTF-8");//设置服务器和浏览器用的字符集 PrintWriter writer = resp.getWriter(); writer.write("Hello, there"); writer.write("窝嫩爹!"); } }
客户端请求的地址可能废弃,服务器告诉客户端新的地址。
public class Response1 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.sendRedirect("http://127.0.0.1:8080/servletExec/response2"); } }
public class Response1 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //302: 表示重定向 //设置Header中Location,指明要重定向的地址 resp.setStatus(302); resp.setHeader("Location", "http://127.0.0.1:8080/servletExec/response2"); } }
注意区分请求转发和请求重定向的特点
JSP: java server pages。
JSP是Java的服务器页面。
代替servlet程序回传html页面的数据。因为servlet程序回传html页面数据的开发成本和维护成本很高。
jsp页面和html页面一样,放在web目录下。
jsp本质是servlet程序。
当我们第一次访问jsp页面。Tomcat服务器会把jsp页面翻译成java源文件,并编译成.class字节码文件。
<%!声明脚本%>
可以给jsp翻译出来的java类定义属性和方法,甚至是静态代码、内部类等。
<%=表达式%>
可以输出数据: 整型( 比如<%=12 %> )、浮点型、字符串、对象。
<% java语句 %>
可以在jsp中编写自己需要的功能(java语句)。
<%-- 注释内容 --%>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2uo9eM2c-1634465849938)(https://raw.githubusercontent.com/FinnSHI/PictureBed/main/imgs/image-20210917191017212.png)]
一般情况,都用out进行输出,以避免页面输出内容打乱。
EL: Expression Language。
主要是代替jsp页面中的表达式脚本在jsp页面中进行数据的输出。
JSTL: JSP Standard Tag Library是一个不断完善的开放源代码JSP标签库。
主要是代替jsp页面中的代码脚本。
form标签,设置method=“post” encType=“multipart/form-data”
input标签, type=“file”
<form action="" enctype="multipart/form-data"> username: <input type="text" name="username"> 头像: <input type="file" name="photo"> <input type="submit" value="上传"> </form>
编写服务器代码接收,处理上传数据
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1LB5hDdW-1634465849939)(E:\Typora_Documents\JavaWeb.assets\image-20210919151017492.png)]
public class UploadServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1.判断上传的数据是否是多段数据(多段数据才是上传的文件) if (ServletFileUpload.isMultipartContent(req)) { //创建FileItemFactory工厂实现类 FileItemFactory fileItemFactory = new DiskFileItemFactory();//DiskFileItemFactory是个是实现类 //创建用于解析上传数据的工具类ServletFileUpload ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory); try { //解析上传的数据,得到每一个表单项FileItem List<FileItem> list = servletFileUpload.parseRequest(req); //判断每一个表单项:①普通类型 ②上传的文件 for (FileItem fileItem : list) { if (fileItem.isFormField()) { //普通表单项 System.out.println("表单项的name: " + fileItem.getFieldName()); System.out.println("表单项的value: " + fileItem.getString("UTF-8")); } else{ //上传的文件 System.out.println("表单项的name: " + fileItem.getFieldName()); System.out.println("文件名: " + fileItem.getName()); fileItem.write(new File("\\src\\" + fileItem.getName())); } } } catch (Exception e) { e.printStackTrace(); } } } }
HTTP协议内容:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yy3Yav6q-1634465849940)(https://raw.githubusercontent.com/FinnSHI/PictureBed/main/imgs/image-20210917195838307.png)]
public class Download extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1.获取要下载的文件名 String fileName = "1.jpg"; //2.server读取要下载的文件内容(ServletContext对象读取) ServletContext servletContext = getServletContext(); InputStream resourceAsStream = servletContext.getResourceAsStream("/file/" + fileName);//server中,'/'表示http://ip:port/工程名/ 映射到web目录 //3.回传前,通过响应头告诉client返回的数据类型 String mimeType = servletContext.getMimeType("/file/" + fileName); resp.setContentType(mimeType); //4.告诉client收到的数据用于下载 //Content-Disposition: 响应头,表示收到的数据怎么处理 //attachment;filename: 附件和要下载的文件名 //如果文件名有中文,则使用url.encode()进行转换 resp.setHeader("Content-Disposition", "attachment;filename" + fileName); //5.文件内容回传给client OutputStream outputStream = resp.getOutputStream(); //读取数据,复制给输出流 IOUtils.copy(resourceAsStream, outputStream); } }
实际应用场景:免用户名登录。
1.创建Cookie对象cookie
2.resp.addCookie( cookie );
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WujL5UNJ-1634465849942)(https://raw.githubusercontent.com/FinnSHI/PictureBed/main/imgs/image-20210919210941726.png)]
可以同时创建多个Cookie
Server获取Client的Cookie只需:req.getCookies( );//返回Cookie[]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A2X9hiE6-1634465849944)(https://raw.githubusercontent.com/FinnSHI/PictureBed/main/imgs/image-20210919212026737.png)]
方法一:覆盖原Cookie对象
方法二:cookie.setValue( )
决定Cookie最大生存时间, 单位:s。 (以格林时间计时)
setMaxAge()
Cookie的path属性可以用来过滤,以决定哪些Cookie发给服务器,哪些不发。
举例:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RgiuBCmn-1634465849944)(https://raw.githubusercontent.com/FinnSHI/PictureBed/main/imgs/image-20210924163523154.png)]
request.getSession( ):
isNew( ): 判断会话是不是刚创建出来的
getId( ): 得到会话ID值(ID唯一)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iyEud16Q-1634465849945)(https://raw.githubusercontent.com/FinnSHI/PictureBed/main/imgs/image-20210924170055897.png)]
默认生存时长为30分钟。
超时:指的是client两次请求的最大间隔时长。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0kHv4Q0Q-1634465849946)(https://raw.githubusercontent.com/FinnSHI/PictureBed/main/imgs/image-20210924190627229.png)]
a)JavaWeb三大组件:Servlet程序、Listener监听器、Filter过滤器
b)Filter过滤器是JavaEE规范,也是接口
c)作用:拦截请求、过滤响应
1.2.步在web启动时执行
3.每次请求拦截到请求,会执行
4.停止web工程时,会执行
Filter配置文件的配置信息
作用:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sSMqLEcF-1634465849946)(https://raw.githubusercontent.com/FinnSHI/PictureBed/main/imgs/image-20210924211531910.png)]
json存在有两种形式:
两者可以相互转换。
Person person = new Person(); Gson gson = new Gson();
JavaBean和json
javaBean—>json:
//gson.toJson() String personJsonString = gson.toJson(person);
json—>javaBean
//gson.fromJson() Person person = gson.fromJson(personJsonString, Person.class);
List和json
List<Person> personList = new ArrayList<>(); personList.add(new Person()); //gson.toJson() String listJsonString = gson.toJson(personList); //gson.fromJson() List<Person> list1 = gson.fromJson(listToJson, new TypeToken<ArrayList<Person>>(){}.getType()); for (Person p:list1) { System.out.println(p); }
map和json
@Test public void test2(){ Map<Integer, Person> personMap = new HashMap<>(); personMap.put(1, new Person(1, "James")); personMap.put(2, new Person(2, "Finn")); Gson gson = new Gson(); //map转json String mapToJson = gson.toJson(personMap); //json转map Map<Integer, Person> newMap = gson.fromJson(mapToJson, new TypeToken<HashMap<Integer, Person>>(){}.getType());//匿名内部类 }
AJAX: Asynchronous Javascript And XML(异步Javascript和XML)。是一种创建交互式网页应用的网页开发技术。
AJAX是一种浏览器通过js异步发起请求。局部更新页面的技术。
国际化(internationalization,简写i18n):同一个网站可以支持多种不同的语言
Locale表示不同的时区、位置、语言
zh_CN: 中国,中文
en_US: 美国,英文
i18n配置文件命名规则:baseName_locale.properties
中文配置文件:i18n_zh_CN.properties
英文配置文件:i18n_en_US.properties
//根据给定的baseName和Locale读取响应的配置文件,得到文字信息 ResourceBundle.getBundle(); //得到不同国家的yuyanxinxi ResourceBundle.getString(key);
@Test public void test2(){ Map<Integer, Person> personMap = new HashMap<>(); personMap.put(1, new Person(1, "James")); personMap.put(2, new Person(2, "Finn")); Gson gson = new Gson(); //map转json String mapToJson = gson.toJson(personMap); //json转map Map<Integer, Person> newMap = gson.fromJson(mapToJson, new TypeToken<HashMap<Integer, Person>>(){}.getType());//匿名内部类 }