JavaWeb01_Servlet
入门项目:
创建Maven项目,选择webapp模板。
依赖:
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
package com.blu.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
response.setContentType("text/html");
//java默认的字符编码是ISO-8859-1,中文会乱码!
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Hello BLU!</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>你好 BLU!</h1>");
out.println("</body>");
out.println("</html>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
web.xml:
<?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"
metadata-complete="true">
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>com.blu.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
在webapp目录下创建header.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>标题1</h1>
<p>Hi,BLU!</p>
</body>
</html>
启动
请求 http://localhost:8080/javawebdemo,访问的是webapp目录下默认创建的 index.jsp
请求 http://localhost:8080/javawebdemo/header.html 可访问到我们创建的 header.html
请求 http://localhost:8080/javawebdemo/hello 可访问到我们编写的Servlet
Servlet
Servlet是sun公司开发动态web的一门技术,它是一个接口
如果你想开发一个Servlet程序,只需以下两步:
- 编写一个类,实现 Servlet 接口
- 将开发好的 java 类部署到web服务器中
ServletContext
ServletContext 对象代表当前的Web应用,可用于 Servlet 间的数据共享通信
- AServlet: 在 ServletContext 中设置值
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
ServletContext servletContext = this.getServletContext();
servletContext.setAttribute("username", "BLU");
}
- BServlet: 从 ServletContext 中取值
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
ServletContext servletContext = this.getServletContext();
String username = (String) servletContext.getAttribute("username");
resp.getWriter().print("名字:"+username);
}
注意:需要先请求AServlet给username赋值,然后请求BServlet才能获得值,否则值为空。
ServletContext 的应用——设置web初始化参数:
<context-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/mybatis</param-value>
</context-param>
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = this.getServletContext();
String url = servletContext.getInitParameter("url");
System.out.println(url);
}
ServletContext 的应用——实现请求转发(路径不变):
- AServlet:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("进入AServlet");
ServletContext servletContext = this.getServletContext();
RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher("/b");
requestDispatcher.forward(req, resp);
}
- BServlet:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("进入BServlet");
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
PrintWriter out = resp.getWriter();
out.println("Welcome to BServlet");
}
ServletContext 的应用——读取资源:
- 在src/main/resources目录下创建db.properties文件:
username=root
password=123456
- 在Servlet中读取配置文件
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//InputStream is = this.getClass().getClassLoader().getResourceAsStream("db.properties");
InputStream is = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
Properties prop = new Properties();
prop.load (is);
String username = prop.getProperty("username");
String password = prop.getProperty("password");
System.out.println(username);
System.out.println(password);
}
servletConfig
<servlet>
<servlet-name>AServlet</servlet-name>
<servlet-class>com.blu.servlet.AServlet</servlet-class>
<init-param>
<param-name>ip</param-name>
<param-value>127.0.0.1</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>AServlet</servlet-name>
<url-pattern>/a</url-pattern>
</servlet-mapping>
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("进入AServlet");
ServletConfig servletConfig = this.getServletConfig();
System.out.println(servletConfig.getInitParameter("ip"));
}