web基础知识笔记


部署一个web项目必须的文件夹
webapps 下面是工程文件夹 例如hello
工程文件夹下面 是WEB-INF文件夹 和html文件
WEB-INF 下面必须的文件 文件夹 class文件夹 程序文件  lib 库文件 web.xml
启动tomcat 访问


tomcat虚拟路径发布
tomcat confg文件夹 server.xml


     //如果发布多个项目 可以 添加host文件  
      <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 解决字符编码 和权限控制
//解决post传递数据 字符编码 问题
public class CharEncodingFilter implements Filter {
    String encoding;
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        encoding = filterConfig.getInitParameter("encoding");//filter 也可以像servlet一样设置初始化参数
    }

    @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);//如果不写 request response不会继续传递
       System.out.println("end filter");
    }

    @Override
    public void destroy() {

    }
}

el 表达式 ${username} 默认会先在pageContext中找username,如果没有
就会去request中去找,如果没有则会去session中寻找username,session 中没有就会去application中去找

猜你喜欢

转载自blog.csdn.net/gacmy/article/details/78023169