servlet原理
Servlet是由web服务器,web服务器在接到请求会
Mapping问题
- 一个servlet可以指定一个映射路径
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
- 一个servlet可以指定多个映射路径
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello1</url-pattern>
</servlet-mapping>
- 一个servlet可以指定通用映射路径
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello/*</url-pattern>
</servlet-mapping>
- 指定一些后缀或者前缀
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>*.yovx</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/*.yovx</url-pattern>
</servlet-mapping>
5.优先级问题
指定规定的路径优先级最高,如果找不到就会找默认路径
ServletContext
web应用在启动的时候,它会为每一个对应的web项目创建一个ServletContext对象,它代表了当前web应用
- 共享数据
- 我们在这个service中保存的数据可以在另一个service中拿到
public class ServletContext01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = this.getServletContext();
String name = "Yovx";
context.setAttribute("name",name);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html");
resp.setCharacterEncoding("utf-8");
ServletContext servletContext = this.getServletContext();
String name = (String) servletContext.getAttribute("name");
resp.getWriter().println(name);
}
<servlet>
<servlet-name>sc01</servlet-name>
<servlet-class>com.yovx.ServletContext01</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sc01</servlet-name>
<url-pattern>/sc01</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>sc02</servlet-name>
<servlet-class>com.yovx.ServletContext02</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sc02</servlet-name>
<url-pattern>/sc02</url-pattern>
</servlet-mapping>
获取初始化数据
<context-param>
<param-name>name</param-name>
<param-value>Yovx</param-value>
</context-param>
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = this.getServletContext();
// 获取配置文件
String name = context.getInitParameter("name");
resp.getWriter().println(name);
}
转发
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 转发
req.getRequestDispatcher("/hello").forward(req,resp);
}
获取Properties文件
name=Yovx
pwd=123456
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*
// 文件在resources下
InputStream inputStream = this.getServletContext().
getResourceAsStream("/WEB-INF/classes/jdbc.properties");*/
// 文件在java下
InputStream inputStream = this.getServletContext().getResourceAsStream("/WEB-INF/classes/com/yovx/a.properties");
Properties prop = new Properties();
prop.load(inputStream);
resp.getWriter().println(prop.getProperty("name"));
}
pom导出资源
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>