XML 概念和体系
XML指可扩展标记语言(EXtensible Markup Language)
XML没有预定义标签 需要自定义标签 <标签></标签>
XML特点
XML数据以纯文本格式存储
实现不同应用程序之间的数据通信
实现不同平台的数据通信
实现不同平台的数据共享
使用XML将不同的程序 不同的平台联系起来
XML作用
数据存储和数据传输
可以用来做配置文件
Javaee开发中用XML来做配置文件 SSM DUBOO 分布式框架等等
XML和HTML的差异
HTML中的标签是已经设计好的 需要学习使用
XML中的标签为自定义的 以<标签><标签/>格式定义即可
XML模板和注意事项
<?xml version="1,0" encoding="utf-8" ?>
<!--声明必须写在第一行,对当前xml文档进行约定-->
<!--version:指定解析当前xml文件 解析器的版本为1.0-->
<!--encoding:当前文档的编码类型 文档编码要和保存文件时的编码一致 不然会乱码-->
<!--有两个学生 张三和李四 姓名 年龄 学号-->
<stus>
<stu>
<name>张三</name>
<age>23</age>
<desc><![CDATA[<a href="http://www.baidu.com">点击跳转页面</a>]]></desc><!--一般不会这么写-->
</stu>
<stu>
<name>李四</name>
<age>24</age>
</stu>
</stus>
1.有且只有一个根元素
2.xml文档声明必须放在第一行
3.所有标签必须成对出现
4.标签严格区分大小写
5.元素可以嵌套其他元素
6.属性值必须加引号
XML元素
元素是指开始标签到结束标签的部分
一个元素中可以包含:其他元素 普通文本 属性 以上的混合
读取XML文件
方法1
dom4j-1.1.jar
public class mainTest {
public static void main(String[] args){
try {
System.out.println("hello word!");
//创建读取对象
SAXReader reader=new SAXReader();
//指定解析的xml源 reader.read(new File("src/com/muzhou/xml/stus.xml")).var;
Document document = reader.read(new File("src/com/muzhou/xml/stus.xml"));
//得到根元素 root document.getRootElement().var;
Element rootElement = document.getRootElement();
/*System.out.println(rootElement.getName());//stus
System.out.println(rootElement.element("stu").getName());//stu
System.out.println(rootElement.element("stu").element("name").getName());//name
System.out.println(rootElement.element("stu").element("age").getName());//age
System.out.println(rootElement.element("stu").element("name").getText());//张三
System.out.println(rootElement.element("stu").element("age").getText());//23
System.out.println(rootElement.element("stu").element("name").getStringValue());//张三*/
List<Element> elements = rootElement.elements();
for (Element e : elements) {
String name=e.element("name").getText();
String age=e.element("age").getText();
System.out.println(name+"---"+age);
}
} catch (DocumentException e) {
throw new RuntimeException(e);
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
}
}
方法2
jaxen-1.1.2.jar
public class XpathTest {
public static void main(String[] args) {
try {
SAXReader reader=new SAXReader();
Document document = reader.read(new File("src/com/muzhou/xml/stus.xml"));
Element rootElement = document.getRootElement();
//Xpath
Element element =(Element) rootElement.selectSingleNode("//desc");
System.out.println(element.getText());
List<Element> list= element.selectNodes("//name");
for (Element element1 : list) {
System.out.println(element1.getText());
}
} catch (DocumentException e) {
throw new RuntimeException(e);
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
}
}
TOMCAT
下载tomcat免安装版 解压
找到conf-logging.properties修改
将GBK 修改为 UTF-8
找到bin目录下startup.bat 测试是否可以连接
如果打不开或闪退
先检查环境变量JAVA_HOME配置的jdk是否正确
还是闪退就在startup.bat头上加这两句
SET JAVA_HOME=E:\Java\Jdk //jdk配置的地址
SET TOMCAT_HOME=E:\tomcat\apache-tomcat-9.0.37 //tomcat配置的地址
WEB
IDER最新版创建web项目
1.先创建一个普通项目
2.鼠标右键项目名,后点击 Add Framework Support(添加项目支持)
3.依次点击 Edit Configurations… >> Add new… >> Tomcat Serve 下的 Local,而后点击OK
4.依次点击页面中的 Deployment >> + >> Artifact… 后点击OK
项目需要继承HttpServlet 重写service方法
@WebServlet("/loginUser")
public class LoginServlet extends HttpServlet {
@Override//只用来处理get请求 一般不写 因为继承了HttpServlet重写了service方法 service方法中包含了该方法
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet被调用了");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("service方法");
String uname = req.getParameter("uname");
String pwd = req.getParameter("pwd");
System.out.println(uname+"---"+pwd);
//模拟数据校验
if("admin".equals(uname) && "123456".equals(pwd)){
//给浏览器响应数据
resp.getWriter().write("success");
}else{
resp.getWriter().write("fail");
}
}
@Override//只用来处理post请求 一般不写 因为继承了HttpServlet重写了service方法 service方法中包含了该方法
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPost被调用了");
}
}
@WebServlet("/myweb")//这个注解是告诉浏览器访问当前java类的网络地址名称
public class MyServlet extends HttpServlet {//HttpServlet可以基于tomcat服务器开发的java程序
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//resp在浏览器上响应数据
resp.getWriter().write("this is my first web project");
//req用来接受浏览器上提交的数据
String uname = req.getParameter("uname");
System.out.println("服务器收到浏览器发送的数据:"+uname);
}
}
修改js基础配置模板
Settings>>Editor>>Code Style>>File and Code Templates>>Other>>JSP files>>jsp File.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
String path = request.getContextPath(); //获取当前工程的根目录
String basePath = request.getScheme() + "://" + request.getServerName() + ":"+ request.getServerPort();
%>
<html>
<head>
<base href="<%=basePath%>"><!--这个让此文件下的路径都相对于当前工程开始-->
<title>Title</title>
</head>
<body>
</body>
</html>
jsp连接servlet
方法1:配置文件
<servlet>
<servlet-name>bbb</servlet-name>
<servlet-class>com.muzhou.MyWeb</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>bbb</servlet-name>
<url-pattern>/bbb</url-pattern>
</servlet-mapping>
方法2:注释连接 @WebServlet("/aaa")
//生命周期 init>service>destroy
//init 在程序第一次被调用时执行 只能执行一次
//service 每次程序被调用时都会执行
//destroy 在程序结束时或移除项目时执行一次
@WebServlet("/aaa")
public class MyWeb extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doget");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
String name=req.getParameter("uanme");
String pwd =req.getParameter("pwd");
if("admin".equals(name)&&"123456".equals(pwd)){
resp.getWriter().write("登录成功");
}else{
resp.getWriter().write("登录失败");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("dopost");
}
//初始化
@Override
public void init() throws ServletException {
System.out.println("程序开始时:初始化");//只会被调用一次
//如果项目部署数据量大时 可以在配置文件中配置<load-on-startup>2</load-on-startup>
//让init方法提前被调用 配置load后init的生命周期变为 从服务器开启到服务器关闭一直被调用
}
//销毁
@Override
public void destroy() {
System.out.println("程序结束时:销毁");//服务器停止时调用该方法
}
}
servlet进网站的错误
404 资源未找到 原因:请求地址中servlet别名书写错误或者项目名称拼写错误
500 内部服务器错误 原因:Java代码有误
或者报错:classnotfoundexception:com.my.servlet.myservlet
原因1:web.xml 全限定路径有误<servlet-class>com.web.MyServlet</servlet-class>
原因2:service 方法体service(req,resp)代码执行错误
405 请求方式不支持 与servlet中的方法不匹配 尽量使用service方法处理