文章目录
java学习之路(1)
1.jsoup选择器
select方法本来是element的,但是document是继承element所以可以用document来选择。
select方法的几个速记点:
- https://www.open-open.com/jsoup/selector-syntax.htm 官方的cookbook做自己的参考手册
- Jsoup.parse 是html和xml的解析手段,可以直接传入字符串的html,也可以使用new file的方式指定文件路径传入。
String path1 = JsoupDemo1.class.getClassLoader().getResource("FirstXML.xml").toURI().getPath();Document parse = Jsoup.*parse*(new File(path1),"utf-8");
3.解析文件之后得到的是Document对象,可以使用dom方法和选择器来进行数据抽取。
Elements name = parse.getElementsByTag("name");
String text = name.text();
Elements head = document.select("head");
System.out.println(head);
4.对于选择器的具体语法可以在https://jsoup.org/apidocs/里面查询selector 类,然后可以看到Selector syntax。 https://jsoup.org/apidocs/org/jsoup/select/Selector.html。
2.java的命名规范
1.类名称是单词首字母大写,比如PaymentOrder。
2.方法第一个单词首字母小写,后面单词的首字母大写。如sendMessage。
3.常量名:全大写,下划线分割
4.包名小写
3.XPath
1.可以用来解析xml和html。
2.使用Jsoup的Xpath需要额外导入jar包。
3.参考文档: https://www.w3cschool.cn/xpath/
4.tomcat
4.1 安装bug
1黑窗口一闪而过:
原因: 没有正确配置JAVA_HOME环境变量
解决方案:正确配置JAVA_HOME环境变量
2.启动报错:
原因:端口占用
解决: 暴力:找到占用的端口号,并且找到对应的进程,杀死该进程
温柔:修改自身的端口号 找到 conf/server.xml 将
一般会将tomcat的默认端口号修改为80。80端口号是http协议的默认端口号。 * 好处:在访问时,就不用输入端口号
4.2 关闭
1.正常关闭: * bin/shutdown.bat * ctrl+c
2.强制关闭: * 点击启动窗口的×
4.3项目部署,建议直接结合开发工具
1.手动:https://www.bilibili.com/video/BV11741127ic?p=114
2.结合idea:
5.Servlet
1.简介
Servlet实质上就是接口,定义了java类被浏览器访问到tomcat的规则。
将来我们自定义一个类,实现servlet类接口,重写方法。
2.在web.xml写注释配置servlet
其中,pattern定义的是浏览器的输入模式,然后name定义的是servlet类的名字,利用这个名字在上面找到servlet的类。当浏览器输入地址的时候,通过主机端口找到对应的资源。在webxml中找demo的资源,利用资源名找到对应的类,然后通过反射机制,将全类名对应的字节码加载进内存,创建对象,调用service方法。
3.在tomcat已经运行的情况下浏览器没能访问服务
自己tomcat一直没有找到路径的原因是因为采用了war_exploded方式,所以正确的路径是 http://localhost:8080/TomcatPractice_war_exploded/hello。
在tomcat的按钮可以按下去的时候,尤其是本地的控制台已经提示成功连接的时候,说明tomcat和程序已经跑起来了。这个时候如果浏览器无法访问服务就要考虑是否是输错了地址。
4.sevlet的初始化方法
默认情况下只有在某个类被访问的时候才会调用,所以只是将服务器打开是不会使用初始化方法的。在xml中可以指定servlet的创建时机。
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>slowsail.javaweb.servlet.HelloServlet</servlet-class>
<!-- 指定servlet的创建时机
1.第一次访问的时候创建配置值为负数。
2.在服务器启动的时候创建则配置为非负数。
-->
<load-on-startup> -1</load-on-startup>
</servlet>
servelet的init方法只执行一次,说明servelet是单例的。
service destroy只有在服务器正常关闭的时候才会执行。在servlet销毁之前执行。
5.sevlet的线程安全问题
多个用户同时访问时可能存在线程安全问题:解决方案:尽量不在servlet对象中定义成员变量,而是在方法中定义局部变量。即使定义了成员变量,也不要对其赋值。
6.方便的注解配置
在类中进行注解。
@WebServlet(urlPatterns = "/demo")
public class SevletDemo implements Servlet {
其中注解也可以简写
其中注解也可以简写
@WebServlet("/demo")
public class SevletDemo implements Servlet {
7.Servlet的体系结构
Servlet – 接口 | GenericServlet – 抽象类 | HttpServlet – 抽象类
GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可
HttpServlet:对http协议的一种封装,简化操作
1. 定义类继承HttpServlet
2. 复写doGet/doPost方法
区别于servlet接口,上述的两个类都是抽象类,所以继承用的是extends。
实际我们多用HttpServlet,因为实际上我们多用get和post方法。在service中我们常常需要判断到底是用何种方法,而HttpServlet只用我们实现在判断完是用post还是get之后的动作。