一、JavaWeb三大组件
(1)Servlet
(2)Filter拦截器
(3)Listener监听器
二、WEB-INF目录
WEB-INF目录是受服务器保护的目录,不能直接通过浏览器访问其中的资源,经请求转发或映射后才可以访问该目录下资源
2.1 Servlet请求转发访问
(1)Servlet请求转发访问
web.xml配置
<servlet>
<servlet-name>myServlet2</servlet-name>
<servlet-class>com.fuping3.servlet.Myservlet2</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>myServlet2</servlet-name>
<!--/表示的路径为:http://ip:port/项目名-->
<url-pattern>/servlet2</url-pattern>
</servlet-mapping>
public class Myservlet2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("Myservlet2...");
RequestDispatcher requestDispatcher = req.getRequestDispatcher("/WEB-INF/js/myjs.js");
requestDispatcher.forward(req,resp);
}
}
(2)SpringMVC请求转发访问
SpringMVC配置文件找中须配置<mvc:default-servlet-handler />,否则HandlerMapping找不见映射报404
@Controller
public class TestForward {
@RequestMapping("/testForward")
public String testForward(){
System.out.println("testForward...");
return "forward:/WEB-INF/js/myjs.js";
}
}
2.2 SpringMVC映射
<mvc:resources location="/WEB-INF/css/" mapping="/css/**"/>
<mvc:resources location="/WEB-INF/js/" mapping="/js/**"/>
三、web 中斜杠的不同意义
在 web 中 / 斜杠 是一种绝对路径
3.1 / 如果被浏览器解析,得到的地址是: http://ip:port/
例一
<a href="/">斜杠</a>
例二:把斜杠重定向发送给浏览器解析, 得到 http://ip:port/
response.sendRediect(“/”)
3.2 / 斜杠 如果被服务器解析,得到的地址是: http://ip:port/工程路径
如下3个例子
1、 <url-pattern>/servlet1</url-pattern>
2、 servletContext.getRealPath(“/”);
3、 request.getRequestDispatcher(“/”);
四、web根目录下资源的访问
4.1 概念
web根目录下资源的访问,由Tomcat提供的DefaultServlet负责解析(对应配置为tomcat目录下conf/web.xml)
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
4.2 举例
web目录下:
(1)default.html页面,访问地址是 http://ip:port/工程路径/default.html
(2)my.jsp页面, 访问地址是 http://ip:port/工程路径/my.jsp
4.3 springMVC开启Tomcat服务器的DefaultServlet,需要配置<mvc:default-servlet-handler />
五、模板引擎选型
参考:jsp、freemarker、velocity、thymeleaf模板引擎优缺点
六、web.xml
6.1 web.xml文件的作用及基本配置
6.2 springboot中消失的web.xml
七、JavaWeb中统一异常处理【区别于SpringMVC统一异常处理】
在 web.xml 中,可以通过40X/50X错误页面配置,将所有异常都统一交给 Tomcat, 让 Tomcat 展示友好的错误信息页面
<!--error-page 标签配置, 服务器出错之后, 自动跳转的页面-->
<error-page>
<!--error-code 是错误类型-->
<error-code>500</error-code>
<!--location 标签表示。 要跳转去的页面路径-->
<location>/pages/error/error500.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/pages/error/error404.jsp</location>
</error-page>
<error-page>
<error-code>400</error-code>
<location>/pages/error/error404.jsp</location>
</error-page>
说明:
(1)程序运行异常时,如果被Filter/Servlet等使用try-catch捕获处理时,tomcat捕获不到
package com.fuping3.filter;
import javax.servlet.*;
import java.io.IOException;
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain
filterChain) throws IOException, ServletException {
try {
filterChain.doFilter(servletRequest,servletResponse);
JdbcUtils.commitAndClose();// 提交事务
} catch (Exception e) {
JdbcUtils.rollbackAndClose();//回滚事务
e.printStackTrace();
//如果需要使用error-page配置统一处理异常时,程序处理完业务后需要继续将异常抛出给Tomcat
throw new RuntimeException(e);
}
}
}
(2)每个error-code都需要单独配置,例如400/404/500/502都需要单独配置,如下为实际项目中较为完整的配置
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error/error.html</location>
</error-page>
<error-page>
<!--视图解析器异常,根据业务不同定制修改-->
<exception-type>com.tts.framework.exception.ViewException</exception-type>
<location>/error/error.html</location>
</error-page>
<error-page>
<error-code>400</error-code>
<location>/error/error.html</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/error/error.html</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/error/error.html</location>
</error-page>
<error-page>
<error-code>405</error-code>
<location>/error/error.html</location>
</error-page>
<error-page>
<error-code>406</error-code>
<location>/error/error.html</location>
</error-page>
<error-page>
<error-code>408</error-code>
<location>/error/error.html</location>
</error-page>
<error-page>
<error-code>409</error-code>
<location>/error/error.html</location>
</error-page>
<error-page>
<error-code>410</error-code>
<location>/error/error.html</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/error.html</location>
</error-page>
<error-page>
<error-code>501</error-code>
<location>/error/error.html</location>
</error-page>
<error-page>
<error-code>505</error-code>
<location>/error/error.html</location>
</error-page>