Java Servlet总结(1)

1.软件tomcat
tomcat路径作用:
backup–配置文件的简单备份
bin–可执行文件的放置,如启动和停止tomcat,以.sh结尾的代表Linux下的命令;以.bat结尾的代表Windows下的命令
conf–配置文件,context.xml可以用来配置数据源之类的东西。logging文件记录tomcat服务器运行的日志记录。server.xml可以设置域名、端口号、IP、请求的编码、默认加载的项目。web.xml可以设置tomcat服务器支持的文件类型。
lib–运行所需jar包
logs–日志文件的存放
temp–服务器生成的临时文件
webapps–tomcat默认部署路径
work–tomcat运行时编译后的文件
wtpwebapps–eclipse默认部署路径
2.WEB项目的结构
WEB-INF>>>有classes和lib两个固定文件夹和一个web.xml文件,其中classes存放编译后的class文件,lib存放所需jar包,web.xml是项目的配置文件,配置Servlet,监听器和过滤器等。

<welcome-file-list>  //表示访问该项目的默认资源
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>       //配置Servlet的name和class及映射,可通过项目路径+/register.action  访问该资源
    <servlet-name>register</servlet-name>
    <servlet-class>com.briup.estore.web.servlet.RegisterServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>register</servlet-name>
      <url-pattern>/register.action</url-pattern>
   </servlet-mapping>

3.Sevlet
Servlet 接口,有五个方法:
void init(ServletConfig paramServletConfig)–初始化; ServletConfig getServletConfig(),获得配置信息;
void service(ServletRequest paramServletRequest, ServletResponse paramServletResponse),访问时执行该方法;
void destroy();销毁servlet

GenericServlet–抽象类,实现了Servlet接口
具体化了配置信息的获取,如配置的名字,指定名字的参数,所有参数的名字,获取Context类型对象

public String getInitParameter(String name)
  {
    return getServletConfig().getInitParameter(name);
  }

  public Enumeration<String> getInitParameterNames()
  {
    return getServletConfig().getInitParameterNames();
  }

HttpServlet–抽象类,继承于GenericServlet
细化了Service方法,根据请求方法不同执行不同方法

protected void service(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException
  {
    String method = req.getMethod();

    if (method.equals("GET")) {
      long lastModified = getLastModified(req);
      if (lastModified == -1L)
      {
        doGet(req, resp);
      } else {
        long ifModifiedSince;
        try {
          ifModifiedSince = req.getDateHeader("If-Modified-Since");
        }
        catch (IllegalArgumentException iae) {
          ifModifiedSince = -1L;
        }
        if (ifModifiedSince < lastModified / 1000L * 1000L)
        {
          maybeSetLastModified(resp, lastModified);
          doGet(req, resp);
        } else {
          resp.setStatus(304);
        }
      }
    }
    else if (method.equals("HEAD")) {
      long lastModified = getLastModified(req);
      maybeSetLastModified(resp, lastModified);
      doHead(req, resp);
    }
    else if (method.equals("POST")) {
      doPost(req, resp);
    }
    else if (method.equals("PUT")) {
      doPut(req, resp);
    }
    else if (method.equals("DELETE")) {
      doDelete(req, resp);
    }
    else if (method.equals("OPTIONS")) {
      doOptions(req, resp);
    }
    else if (method.equals("TRACE")) {
      doTrace(req, resp);
    }
    else
    {
      String errMsg = lStrings.getString("http.method_not_implemented");
      Object[] errArgs = new Object[1];
      errArgs[0] = method;
      errMsg = MessageFormat.format(errMsg, errArgs);

      resp.sendError(501, errMsg);
    }
  }

其中servlet方法有两种参数,但是其中service(ServletRequest req, ServletResponse res)会调用service(HttpServletRequest req, HttpServletResponse resp)方法,所以直接修改后一个方法即可

public void service(ServletRequest req, ServletResponse res)
    throws ServletException, IOException
  {
    HttpServletRequest request;
    HttpServletResponse response;
    try
    {
      request = (HttpServletRequest)req;
      response = (HttpServletResponse)res;
    } catch (ClassCastException e) {
      throw new ServletException("non-HTTP request or response");
    }
    service(request, response);
  }

4.sevlet的生命周期
servlet是单例,在web项目运行期间,一个servlet只会创建一个对象。
默认情况下,servlet对象是在用户第一次访问它的时候,由tomcat服务器来创建的。
servlet对象创建成功之后,tomcat服务器还会调用servlet里面的init(ServletConfig config),这个有参的init方法会调用无参的init()方法,程序员就可以重写这个无参的init()方法,对创建好的servlet对象进行初始化操作.
如果用户要访问这个servlet对象,那么tomcat服务器会调用这个servlet对象中的service方法,只不过service方法中又进行了方法的层层调用,最后调用到了我们重写的doGet或者是doPost方法。
当servlet对象被销毁的时候,tomcat服务器会调用servlet里面的destory方法,程序员就可以重写这个方法,表示当对象销毁的时候需要做哪些额外的处理。
servlet对象被销毁的情况
1.服务器【正常】关闭的时候
2.服务器重新加载web项目的时候(reloading)
可以通过修改web.xml文件中的配置,去改变servlet对象创建的时间。标签里面需要放一个正整数,数值的大小可以决定servlet对象被创建的先后顺序,数值越小就越先被创建。(如果有多个servlet对象需要在tomcat启动期间被创建的话)

4.get方法和post方法访问的区别?
get方法访问可以通过:浏览器地址栏直接输入地址访问;超链接访问;访问图片;表单提交时method为get;在javascript代码中访问。
而post方式访问通过:表单method为post;ajax中设置本次请求为post方法。
在http协议规范中,定义了四种访问方式
get(查) post(改) put(增) delete(删)
http协议规范下的请求格式(分为四部分)
1部分: 请求行
2部分: 请求头部/消息报头
3部分: \r\n
4部分: 请求正文
get方法传参数,参数在地址栏后
post方法传参,参数在请求体(正文)中 。
post方法传参安全性比get方法高,且get方法传参长度收到浏览器地址栏字符长度限制,而post方法则看服务器一次性最多能够接受并且处理多少数据。

5.中文乱码问题
3.1 get方式传参,中文乱码
需要在tomcat服务器中server.xml文件中进行配置
在中加入新的属性URIEncoding=”XXX”

3.2 post方式传参,中文乱码
在使用request获取参数【之前】,先把request中的编码进行设置
request.setCharacterEncoding(“UTF-8”);
String name = request.getParameter(“name”);
System.out.println(name);

3.3 servlet中使用io流写数据到浏览器,浏览器里面显示中文乱码
如果响应头部信息中没有设置编码,那么浏览器会默认使用简体中文(GBK)来解析响应中的内容
所以在使用io流之前,需要设置一下response中的编码,同时还要告诉浏览器本次响应内容的编码是什么
//设置response中的编码为UTF-8
response.setCharacterEncoding(“UTF-8”);
//设置响应头部,告诉浏览器响应内容编码为utf-8
response.setContentType(“text/html;charset=utf-8”);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值