第二章web
1 dom4j
1.1 基本操作
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("dynamic_scheduled/src/main/resources/students.xml");
//获取根元素
Element rootElement = document.getRootElement();
//获取根元素下的所有子元素
List<Element> elements = rootElement.elements();
// System.out.println(elements.size());
for (Element stu : elements) {
//获取元素的属性
String id = stu.attributeValue("id");
//获取元素的子元素
Element name = stu.element("name");
//获取元素的值
String nameText = name.getText();
// System.out.println(id);
// System.out.println(nameText);
Document createDoc = DocumentHelper.createDocument();
Element root = createDoc.addElement("root");
//<root id="3"/> 添加元素属性
Element id3 = root.addAttribute("id", "3");
//<root id="3"><class class_code="001"/></root>
root.addElement("class").addAttribute("class_code","001");
String xml = createDoc.getRootElement().asXML();
System.out.println(xml);
1.2 引入xpath快速查找
注意:
1. 以’/a’开头,是在/前的路径下查找a
2. 以'//a'开头,全文查找a
2. //a[1] 表示查找a下的第一个子元素
2. //a[@id] 表示查找a下的有id属性的元素
2. //a[@id='1'] 表示查找a下有id=1属性的元素
//rootElement 略 没有指定Element 需要强转
List<Element> list = rootElement.selectNodes("//student[@id='2']");
list.forEach(e -> {
System.out.println(e.attributeValue("id"));
System.out.println(e.selectSingleNode(".//age").getText());
});
1.3 request xml
ServletInputStream inputStream = request.getInputStream();
BufferedReader bri = new BufferedReader(new InputStreamReader(inputStream));
char[] buff = new char[1024];
int len ;
StringBuilder builder = new StringBuilder();
while ((len = bri.read(buff))!=-1){
for (int i = 0; i < len; i++) {
builder.append(buff[i]);
}
}
String xml = builder.toString();
SAXReader saxReader = new SAXReader();
Document doc = saxReader.read(new ByteArrayInputStream(xml.getBytes("UTF-8")));
Element rootElement = doc.getRootElement();
Element node = (Element) rootElement.selectSingleNode("//student[@id=2]");
Element node1 = (Element) node.selectSingleNode(".//name");
String text = node1.getText();
System.out.println(text);
return xml;
2 servlet
2.1 web.xml的配置
<!--让tomcat创建servlet对象-->
<servlet>
<!--给这个servlet起一个别名,要和映射的路径名字对应即可-->
<servlet-name>FirstServlet</servlet-name>
<!--映射的路径会被这个类进行处理,一定要全类名,容器会利用反射创建对象-->
<servlet-class>com.example.web_tomcat.FirstServlet</servlet-class>
</servlet>
<!--映射需要有servlet来进行处理-->
<servlet-mapping>
<!--这里的名字与要被处理的servlet的名字一致-->
<servlet-name>FirstServlet</servlet-name>
<!--请求的路径,前面的'/'不可省略,它代表 localhost:8080/project/-->
<url-pattern>/firstServlet</url-pattern>
</servlet-mapping>
<!--请求不加'/' 相对路径-->
<a href="firstServlet">First Servlet</a>
2.2 注解的配置
@WebServlet(name = "helloServlet", value = "/hello-servlet")
public class HelloServlet extends HttpServlet {}
<a href="hello-servlet">Hello Servlet</a>
2.3 servlet的生命周期
1.构造器
用来创建对象,第一次发送请求时调用的,并且整个生命周期只会调用一次,说明servlet是单例的
2.init(ServletConfig servletConfig)
用来对对象进行初始化,第一发送请求时调用的,在整个生命周期过程只会调用一次
3.service(ServletRequest servletRequest, ServletResponse servletResponse)
用来处理请求,每次调用都会调用
4.destroy()
用来销毁对象,服务器关闭时调用,用来销毁servlet对象
2.4 servletConfig\servletContext
servletConfig的作用
获取当前servlet的配置信息:
1.获取当前servlet的名称 eg:
2.获取当前servlet的初始化参数
3.获取servletContext对象
public void init(ServletConfig servletConfig) throws ServletException {
servletConfig.getServletName();
servletConfig.getInitParameter("user");
servletConfig.getServletContext();
}
servletContext的作用
它代表了整个web应用程序:
1.获取web应用的初始化参数
2.获取资源在服务器端的真实路径
3.它是一个域对象
<context-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</context-param>
servletContext.getInitParameter("encoding");
servletContext.getRealPath("/index.jsp");
2.5 request\response
request的作用:浏览器 —> 服务器
1.获取请求参数
2.获取虚拟路径
3.转发
request.getParameter("username");
request.getContextPath();
RequestDispatcher requestDispatcher = request.getRequestDispatcher("success.html");
requestDispatcher.forward(request,response);
response的作用: 服务器—>浏览器
1.给浏览器响应
2.重定向(code:302)
PrintWriter writer = response.getWriter();
writer.write("success");
response.sendRedirect("success.html");
重定向与转发的区别?
重定向会发送两次请求,第一次没有找到页面,第二次会请求指定的页面
转发只有一次请求
重定向的路径是请求页面的路径,由原来的请求到页面的请求路径,转发的路径是第一次请求的路径,存在着多次提交请求,路径不变
转发可以访问WEB-INF的资源,共享request域的数据,重定向不可以
3 filter
@WebFilter(filterName = "firstFilter",value = "/index.jsp")
public class FirstFilter implements Filter {
//构造器是第一次请求默认给提供的
//用来创建对象,第一次发送请求时调用的,并且整个生命周期只会调用一次
public void init(FilterConfig filterConfig)
//每次请求都会调用
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("先拦截一个jsp");
filterChain.doFilter(servletRequest,servletResponse);//放行
sout("返回")
//请求完,还要经过这里,才能返回页面
}
public void destroy() { }
3.1 匹配规则
urlPatterns
前缀 /pages/*
后缀 *.jsp
注意:以下是失效的
/pages/*.jsp