Servlet:Java程序输出HTML+CSS+js
→ JSP :HTML嵌入Java程序(本质——翻译成Servlet
(3P)ASP PHP JSP
→ 规范开发模型 MVC设计模式
vue层(用户可见html+css+js)+controller层(提交至该层)+model层(操作数据库后返回给c-v)
→ modelⅠ模型 JSP+JavaBean(封装数据entity+封装业务Dao)
( JavaBean有属性有方法的类——拆开——entity+Dao)
vo与用户关联的对象 po与数据库关联的对象(=entity=bean=javabean) dto数据在传输过程中的模型
→ modelⅡ模型 JSP+Servlet+JavaBean(v-c-m)
→ 框架开发
【框架对原有技术封装,并未改变技术】传统模型:thymeleft…(JSP)+spring MVC(Servlet)+Mybatis(JavaBean) → **spring框架集成**前后端分离:[Vue ... ] + [springMVC(Servlet)+ Mybatis(JavaBean) → spring框架集成]SSM=spring MVC + spring + Mybatis
spring boot
浏览器B 发送请求给 controller层-Servlet 提交给model层-JavaBean,与数据库进行沟通。 entity 在servlet、Dao(JavaBean)、JSP三者之间进行数据传递。请求从Servlet 发到Dao,Dao操作数据库,从数据库返回数据给Servlet ,Servlet 把数据传给JSP,JSP通过脚本把数据迭代生成一个包含HTML、JavaBean、JSP的text文本并且发送给浏览器
浏览器B 发送请求到HTML页面,Nginx服务器把HTML返回,此时浏览器可以得到页面。B解析时通过Ajax把请求发送给后端-servlet,servlet将其传给JavaBean-Dao操作数据库,从数据库返回数据给Servlet ,servlet以JSON字符串将数据传回B。
了解:
框架mybatis、spring、tomcat、maven的pom文件 中配置文件会用到XML,技术已经被取消许多功能已经有替代品。
Ajax,x指的是XML。收到的文件可以收到两种格式text和xml,现在一般只用text,xml的内容被JSON字符串代替
XML 指可扩展标记语言(EXtensible Markup Language)。
特点:
1> XML 是一种很像HTML的标记语言。(XHTML = XML + HTML)
2>XML 的设计宗旨是传输数据(JSON)、存储数据(SQLite),而不是显示数据。
3> XML 标签没有被预定义。您需要自行定义标签。(DTD约束、Schema约束)
4> XML 是独立于软件和硬件的信息传输工具。“平台无关、语言无关”开始用于解决平台与语言之间的连接。现在被JSON代替
5> XML 和 HTML 之间的差异
6> XML 不是 HTML 的替代。
XML 和 HTML 为不同的目的而设计:
XML 被设计用来传输和存储数据,其焦点是数据的内容。
HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息,而 XML 旨在传输信息。
xml样式
<notes><note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note><note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note><note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>
</notes>
XML 允许创作者定义自己的标签和自己的文档结构。
约束(同HTML)
1.XML 声明
XML 声明文件的可选部分,如果存在需要放在文档的第一行,如下所示:
<?xml version="1.0" encoding="utf-8"?>
//以上实例包含 XML 版本,UTF-8 也是 HTML5, CSS, JavaScript, PHP, 和 SQL 的默认编码。
2. 所有的 XML 元素都必须有一个关闭标签
在 HTML 中,某些元素不必有一个关闭标签:
<p>This is a paragraph.
<br>
在 XML 中,省略关闭标签是非法的。所有元素都必须有关闭标签:
<p>This is a paragraph.</p>
<br />
注释:从上面的实例中,您也许已经注意到 XML 声明没有关闭标签。这不是错误。声明不是 XML 文档本身的一部分,它没有关闭标签。
3. XML 标签对大小写敏感
XML 标签对大小写敏感。标签 与标签 是不同的。
必须使用相同的大小写来编写打开标签和关闭标签:
<Message>这是错误的</message>
<message>这是正确的</message>
注释:打开标签和关闭标签通常被称为开始标签和结束标签。不论您喜欢哪种术语,它们的概念都是相同的。
4. XML 必须正确嵌套
在 HTML 中,常会看到没有正确嵌套的元素:
<b><i>This text is bold and italic</b></i>
在 XML 中,所有元素都必须彼此正确地嵌套:
<b><i>This text is bold and italic</i></b>
在上面的实例中,正确嵌套的意思是:由于 元素是在 元素内打开的,那么它必须在 元素内关闭。
5. XML 属性值必须加引号
与 HTML 类似,XML 元素也可拥有属性(名称/值的对)。
在 XML 中,XML 的属性值必须加引号。
请研究下面的两个 XML 文档。 第一个是错误的,第二个是正确的:
<note date=12/11/2007><to>Tove</to><from>Jani</from>
</note>
<note date="12/11/2007"><to>Tove</to><from>Jani</from>
</note>
在第一个文档中的错误是,note 元素中的 date 属性没有加引号。
6. 实体引用
在 XML 中,一些字符拥有特殊的意义。如果您把字符 “<” 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。这样会产生 XML 错误:
<message>if salary < 1000 then</message>
为了避免这个错误,请用实体引用来代替 “<” 字符:
<message>if salary < 1000 then</message>
在 XML 中,有 5 个预定义的实体引用:
注释:在 XML 中,只有字符 “<” 和 “&” 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。
字符串显示,不是标签显示的方法
<message><![CDATA[<a href="htp://www.baidu">百度</a>]]>
</message>
8. XML 中的注释
在 XML 中编写注释的语法与 HTML 的语法很相似。
<!-- This is a comment -->
在 XML 中,空格会被保留
HTML 会把多个连续的空格字符裁减(合并)为一个。
通过 DTD 验证的XML是"合法"的 XML。保证标签正确使用
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note //唯一根节点————note必有4个———to、from、heading、body
[
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Dont forget me this weekend!</body>
</note>
DTD文件Note.dtd
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
XML文件l
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note SYSTEM "Note.dtd">
<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body>
</note>
校验、标签提示
DTD的局限性
DTD不遵循XML语法
DTD数据类型有限,字符串
DTD不可扩展
DTD不支持命名空间(命名冲突)
Schema的新的特性
Schema基于xml语法
Schema可以用能处理xml文档的工具处理
Schema大大扩充了数据类型,可以自定义数据类型
Schema支持属性组
Schema约束的元素
Schema元素 (只要是schema约束,都以schema元素作为根节点)
如何对xml文件进行解析
DOM(Document Object Model) 它是 W3C 组织推荐的处理 XML 的一种方式。它会将整个XML使用类似树的结构保存在内存中,再对其进行操作,所以它需要等到XML完全加载进内存才可以进行操作。
缺点:耗费内存,当解析超大的XML时慎用。
优点:可以方便的对XML进行增删改查的操作。
在Java SE的API提供了org.w3c.dom包里面有Node接口,此接口中提供了很多增删改查节点的方法,而所有文档树的对象都实现这个接口。
//创建解析器:
SAXReader reader = new SAXReader();
//利用解析器读入xml文档:
Document document = ad(new File(l"));
//获取文档的根节点:
Element root = RootElement();
dom4j解析
DOM + SAX都可以用的第三方jar。
这种解析方式会逐行地去扫描XML文档,当遇到标签时会触发解析处理器,采用事件处理的方式解析XML (Simple API for XML) ,不是官方标准,但它是 XML 社区事实上的标准,几乎所有的 XML 解析器都支持它。 以流的形式(便利)
优点:在读取文档的即时XML进行处理,不必等到文档加载结束,相对快捷。不需要加载进内存,因此不存在占用内存的问题,可以解析超大XML。
缺点:只能用来读取XML中数据,无法进行增删改。
//1、使用SAXParserFactory创建SAX解析工厂
SAXParserFactory spf = wInstance();
//2、通过SAX解析工厂得到解析器对象
SAXParser sp = wSAXParser();
//3、通过解析器对象得到一个XML的读取器
XMLReader xmlReader = sp.getXMLReader();
//4、设置读取器的事件处理器
xmlReader.setContentHandler(new MyContentHandler());
//5、解析xml文件
xmlReader.parse(l");
DOM(读-存-操作)慢;SAX(读-操作) 快
增删改用DOM,查询用SAX。
/
1、实例化:调用构造方法创建实例对象
2、初始化:调用init()方法加载初始数据
3、服务:调用service()方法提供服务
4、销毁:调用destroy()销毁回收资源
第一次: 1 -> 2 -> 3
第N次:3
关闭tomcat:4
项目(一)——maven、BaseDao、servlet
1、Maven项目 -> webapp项目
2、在main下新建两个文件夹,java 、 resources 文件夹。
3、modules配置两文件夹类型。
1、引入支持jar pom -> javax.servlet-api
2、UserServlet extends HttpServlet
3、编写servlet
4、配置tomcat - 启动tomcat
1、连数据库。保证数据库中有表有数据。
2、编写entity - dao - servlet
3、servlet中代码书写的顺序为:
//1、设置编码格式。
request.setCharacterEncoding("utf-8");//2、获得表单数据
String start = Parameter("_start");
String limit = Parameter("_limit");//3、封装message对象//4、调用dao实现插入操作
List<Message> messageList = new MessageDaoImpl().getMessageByPage(Integer.parseInt(start),Integer.parseInt(limit));//5、设置编码格式
response.setContentType("text/html; charset=utf-8");//6、ajax返回结果 1/0 object -> json
PrintWriter out = Writer();
String ret = JSONString(messageList);
out.print(ret);
out.close();
servlet注解和xml映射文件
<servlet><servlet-name>msgServlet</servlet-name><servlet-class>org.lanqiao.servlet.MessageServlet</servlet-class></servlet><servlet-mapping><servlet-name>msgServlet</servlet-name><url-pattern>/messages</url-pattern></servlet-mapping>
@WebServlet("/messages")//url -> class
public class MessageServlet extends HttpServlet {}
场景 : 切面 -> 接口 -> 对象 -> 过程
我们管切入到指定类指定方法的代码片段称为切面,而切入到哪些类、哪些方法则叫切入点。有了AOP,我们就可以把几个类共有的代码,抽取到一个切片中,等到需要时再切入对象中去,从而改变其原有的行为。这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。
JavaWeb过滤器.监听器.拦截器-原理&区别
过滤器: 是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者struts的action前统一设置字符集,或者去除掉一些非法字符。主要为了减轻服务器负载,减少压力。
过滤器的执行流程:执行第一个过滤器的chain.doFilter()之前的代码——>第二个过滤器的chain.doFilter()之前的代码——>……——>第n个过滤器的chain.doFilter()之前的代码——>所请求servlet的service()方法中的代码——>所请求servlet的doGet()或doPost()方法中的代码——>第n个过滤器的chain.doFilter()之后的代码——>……——>第二个过滤器的chain.doFilter()之后的代码——>第一个过滤器的chain.doFilter()之后的代码。
过滤器生命周期的四个阶段:
1、实例化:Web容器在部署Web应用程序时对所有过滤器进行实例化。Web容器回调它的无参构造方法。
2、初始化:实例化完成之后,马上进行初始化工作。Web容器回调init()方法。
3、过滤:请求路径匹配过滤器的URL映射时。Web容器回调doFilter()方法——主要的工作方法。
4、销毁: Web容器在卸载Web应用程序前,Web容器回调destroy()方法。
过滤器链:
在一个 Web 应用程序中可以注册多个 Filter 程序,每个 Filter 程序都可以针对某一个 URL 进行拦截。如果多个 Filter 程序都对同一个 URL 进行拦截,那么这些 Filter 就会组成一个Filter 链(也称过滤器链)。
Servlet过滤器开发步骤:
1、创建实现javax.servlet.Filter接口的类。
2、过滤器的xml配置。实现过滤器和Servlet、JSP页面之间的映射。
java里的拦截器提供的是非系统级别的拦截,也就是说,就覆盖面来说,拦截器不如过滤器强大,但是更有针对性。
Java中的拦截器是基于Java反射机制实现的,更准确的划分,应该是基于JDK实现的动态代理。它依赖于具体的接口,在运行期间动态生成字节码。
拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。在AOP中,拦截器用于在某个方法或者字段被访问之前,进行拦截然后再之前或者之后加入某些操作。java的拦截器主要是用在插件上,扩展件上比如 Hibernate Spring Struts2等,有点类似面向切片的技术,在用之前先要在配置文件即xml,文件里声明一段的那个东西。
在Servlet规范中定义了多种类型的监听器,它们用于监听的事件源分别为: ServletContext, HttpSession 和 ServletRequest 这三个域对象。
Servlet监听器分为三大类
数据域对象创建和销毁监听器
数据域对象和属性变更监听器
绑定到 HttpSession 域中的某个对象的状态的事件监听器
本文发布于:2024-02-04 10:07:43,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170704739654622.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |