部署一个web项目必须的文件夹
webapps 下面是工程文件夹 例如hello
工程文件夹下面 是WEB-INF文件夹 和html文件
WEB-INF 下面必须的文件 文件夹 class文件夹 程序文件 lib 库文件 web.xml
启动tomcat 访问
tomcat虚拟路径发布
tomcat confg文件夹 server.xml
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Host/>
tomcat web.xml listing 设置true 显示 webapps 显示文件夹结构
servlet 生命周期:
servlet运行过程
首先 浏览器发送请求
服务器接收请求 在web.xml 通过请求路径 找到servletname
通过servlet-name 找到 servlet-class
创建servlet
调用init方法 init重载方法 init(servletConfig config) config.getInitParams("") web.xml 配置初始化的参数
-调用service方法 service 被覆盖就不会调用doget doPost方法
调用doxx方法
最后调用destroy方法
web.xml load-on-startup 不为0 或者为空 表示启动的时候执行servlet
字符编码
html 文件里utf-8
tomcat config/server.xml 里<Connector URIEncoding="UTF-8"/>(get请求获取数据时候的乱码问题)
servlet获取值之前 request.setCharacterEncoding("UTF-8")(post 请求乱码问题解决)
<!--jsp 有一些常用内置对象 :out(PrintWriter) request(HttpServletRequest) response(HttpServletResponse) sesstion(HttpSession),application(ServletContext)-->
<% String str = "hello";
out.println(str+"<br/>");
%>
<%= str%> out代替写法
jsp 文件会被tomcat 转换为servlet 在tomcat目录work目录生成java文件
jsp 和java代码的对象交互 可以import 导入对象的包
jsp 重定向 response.sendRedirct("页面路径") 对于response跳转之后 依然会执行剩下的代码 跳转之后应该retrun(浏览器地址会变化的) 客户端的跳转
服务器端跳转:<jsp:forward page="03.jsp"> <jsp:value:="gac" name="user"/> </jsp> 服务器端跳转(浏览器地址没有变化)
跳转最后不要传中文
访问一个页面可已使用相对路径和绝对路径
相当路径是针对当前页面的路径
页面中一般都会使用绝对路径去做,req.getContextPath();
静态包含 动态包含
(动态包含)<%@include file="/inc/top.jsp"%> 使用包含时候如果使用绝对路径 不用增加上下文路径,会默认自己增加上下文路径 不进行任何编译直接导入,在导入的文件中进行编译
(静态包含)<jsp:include page="/inc/top.jsp"></jsp:include> 静态包含 导入的文件会先被编译成html文件才会导入
一般开发中使用静态编译,动态包含 容易出现重复定义变量
页面直接传递对象
request.setAttribute(String,Object)
request.getAttribute(String name)
jsp和servlet可以可以传递内置对象Atrribute有 pageContext(Servlet 里没有) request(HttpRequest) session(HttpSession) .application(ServletContext)
pageContext(当前页面存在,当发生跳转之后数据丢失)
request 客户端跳转当前页面存在,发生跳转数据丢失 服务端跳转数据存在
session 客户端跳转数据存在 服务器端跳转数据存在 浏览器关闭 session 才会丢失
application 重启服务器才会丢失数据
使用原则:可以使用pageContext 可以用request 不用session 能用session 不用application
filter 解决字符编码 和权限控制
public class CharEncodingFilter implements Filter {
String encoding;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
encoding = filterConfig.getInitParameter("encoding");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("before fileter");
servletRequest.setCharacterEncoding(encoding);
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("end filter");
}
@Override
public void destroy() {
}
}
el 表达式 ${username} 默认会先在pageContext中找username,如果没有
就会去request中去找,如果没有则会去session中寻找username,session 中没有就会去application中去找