后端总结1

来源:互联网 发布:java逐个读取单词 编辑:程序博客网 时间:2024/05/17 22:03

1)Servlet 生命周期

  1. Servlet 是第一次访问才会调用 init () 方法进行初始化,由服务器创建。
  2. Servlet 调用 service()方法来处理客户端的请求,doGet()、doPost()只是它的一个事件派发。
  3. Servlet 通过调用 destroy() 方法终止(结束)或者项目移除。

2)Servlet在web.xml里的配置

        <servlet>            <servlet-name>HelloWorld</servlet-name>            <servlet-class>web.back.HelloWorld</servlet-class>        </servlet>        <servlet-mapping>            <servlet-name>HelloWorld</servlet-name>            <url-pattern>/HelloWorld</url-pattern>        </servlet-mapping>

3)使用 Servlet 读取表单数据

  • getParameter():可以调用 request.getParameter() 方法来获取表单参数的值。
  • getParameterValues():一个name对应多个值,例如复选框。
  • getParameterMap():返回map集合。
Map<String, String[]> parameterMap = request.getParameterMap();User user = new User();ConvertUtils.register(new DateLocaleConverter(), Date.class);BeanUtils.populate(user, parameterMap);

4)两种请求方式get 、post

  • GET 方法是默认的从浏览器向 Web服务器传递信息的方法,它会产生一个很长的字符串,携带表单提交的信息,出现在浏览器的地址栏中。如果您要向服务器传递的是密码或其他的敏感信息,请不要使用 GET方法。GET 方法有大小限制:请求字符串中最多只能有 1024 个字符。
  • POST方法则不会携带表单提交的信息出现在浏览器的地址栏中,因此不会有大小限制问题。

5)get 、post乱码问题

  • 请求正文get:

    String username = req.getParameter("username");byte[] bytes = username.getBytes("iso-8859-1");String str = new String(bytes, "UTF-8");
  • 请求体post :

    request.setCharacterEncoding("utf-8");
  • response:

    response.setContentType("text/html; charset=UTF-8");

6)Servlet 服务器 HTTP 请求 HttpServletRequest 对象

  • Cookie[] getCookies()
  • HttpSession getSession()
  • Enumeration getParameterNames()
  • Enumeration getAttributeNames()
  • Object getAttribute(String name)
  • String getParameter(String name)
  • String[] getParameterValues(String name)
  • int getParameterMap()
  • String getContentType(),返回请求主体的 MIME 类型
  • String getContextPath(),得到项目名
  • String getServletPath(),得到项目的路径
  • request.getRequestDispatcher(“/WEBINF/jsp/back/login.jsp”).forward(request,response);

7)Servlet 服务器 HTTP 响应 HttpServletResponse 对象
当一个 Web 服务器响应一个 HTTP 请求时,响应通常包括一个状态行、一些响应报头、一个响应空行和响应体。

  • void addCookie(Cookie cookie)
  • void sendRedirect(String location)

8)Servlet HTTP 状态码

状态码 描述 100 只有请求的一部分已经被服务器接收 200 请求成功 302 重定向 304 没有doget或dopost 404 找不到 500 后台代码问题

9)Servlet 编写过滤器 Filter
filter与servlet是表兄弟,很类似,除了init的调用时间和优先级问题。

Filter的执行顺序与在web.xml配置文件中的配置顺序一致(并不是靠优先级),一般把Filter配置在所有的Servlet之前。

过滤器是列表内容一个实现了 javax.servlet.Filter 接口的 Java 类。

  1. public void init(FilterConfig filterConfig),web 应用程序启动时,web 服务器将创建Filter 的实例对象,并立即调用其init方法,而servlet是第一次访问时才调用init方法。filter对象只会创建一次,init方法也只会执行一次。
  2. public void doFilter (ServletRequest, ServletResponse, FilterChain)
  3. public void destroy(),释放Servlet过滤器占用的资源

10)Filter在xml里面的配置

<filter>  <filter-name>LogFilter</filter-name>  <filter-class>com.runoob.test.LogFilter</filter-class>  <init-param>    <param-name>Site</param-name>    <param-value>com.web.back.filter.LogFilter</param-value>  </init-param></filter><filter-mapping>  <filter-name>LogFilter</filter-name>  <url-pattern>/*</url-pattern></filter-mapping>

11)定义自己的异常处理界面

<error-page>    <error-code>404</error-code>    <location>/TomcatTest/ErrorHandler</location></error-page><error-page>    <exception-type>java.lang.Throwable</exception-type >    <location>/ErrorHandler</location></error-page>

12)客户端的会话技术cookie

  1. cookie不能存储对象,存储中文会乱码,一般是存储字符串。
  2. public void setMaxAge(int expiry),该方法设置 cookie 过期的时间(以秒为单位)。如果不这样设置,cookie 只会在当前 session 会话中持续有效。
  3. public String getValue(),该方法获取与 cookie 关联的值。
  4. 设置cookie

    Cookie cookie = new Cookie("key","value");cookie.setMaxAge(60*60*24); response.addCookie(cookie);
  5. 读取 Cookie

    Cookie[] cookies = null;cookies = request.getCookies(); if( cookies != null ){           for (int i = 0; i < cookies.length; i++){              cookie = cookies[i];              if((cookie.getName( )).compareTo("url") == 0 ){                   //删除cookie                   cookie.setMaxAge(0);                   response.addCookie(cookie);              }              out.print("名称:" + cookie.getName( ) + ",");              out.print("值:" + cookie.getValue( )+" <br/>");           }        }

13)服务端的会话技术session
HTTP 是一种无状态协议,这意味着每次客户端检索网页时,客户端打开一个单独的连接到 Web 服务器,服务器会自动不保留之前客户端请求的任何记录。
但是仍然有以下三种方式来维持 Web 客户端和 Web 服务器之间的 session 会话:

  1. Cookies,但是很多浏览器不支持 cookie,所以我们建议不要使用这种方式来维持 session 会话。
  2. 隐藏的表单字段,但是点击常规的超文本链接不会导致表单提交

    <input type="hidden" name="sessionid" value="12345">
  3. URL 重写,但是它的缺点是会动态生成每个 URL 来为页面分配一个 session 会话 ID,即使是在很简单的静态 HTML 页面中也会如此。

所以我们的HttpSession 对象就产生了;Servlet 容器使用 HttpSession接口来创建一个 HTTP 客户端和 HTTP 服务器之间的 session 会话。会话持续一个指定的时间段,跨多个连接或页面请求。

HttpSession session = request.getSession();

HttpSession 对象(能存储对象)中可用的几个重要的方法:

  1. public Object getAttribute(String name),该方法返回在该 session 会话中具有指定名称的对象,如果没有指定名称的对象,则返回 null。
  2. public void invalidate(),该方法指示该 session 会话无效,并解除绑定到它上面的任何对象。
  3. public void removeAttribute(String name),该方法将从该 session 会话移除指定名称的对象。
  4. public void setAttribute(String name, Object value) ,该方法使用指定的名称绑定一个对象到该 session 会话。
  5. public void setMaxInactiveInterval(int interval),该方法在 Servlet 容器指示该 session 会话无效之前,指定客户端请求之间的时间,以秒为单位。
  6. public long getCreationTime(),该方法返回该 session 会话被创建的时间,自格林尼治标准时间 1970 年 1 月 1 日午夜算起,以毫秒为单位。主要用来获取网页的最后一次访问时间。
  7. public boolean isNew(),主要来获取是否有新用户。

14)表单文件上传
三个注意点:

  1. 表单 method 属性应该设置为 POST 方法,不能使用 GET 方法。
  2. 表单 enctype 属性应该设置为 multipart/form-data.
  3. 上传单个文件,应该使用单个带有属性 type=”file” 的input标签。
if (!ServletFileUpload.isMultipartContent(request)) {            // 如果不是则停止            PrintWriter writer = response.getWriter();            writer.println("Error: 表单必须包含 enctype=multipart/form-data");            writer.flush();            return;}DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();        ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);        try {            List<FileItem> parseRequest = servletFileUpload.parseRequest(request);            for (FileItem fileItem : parseRequest) {                boolean formField = fileItem.isFormField();                System.out.println("~~~~~");                if (formField) {                    String fieldName = fileItem.getFieldName();                    String string = fileItem.getString("utf-8");                }else{                    InputStream is = fileItem.getInputStream();                    String name = fileItem.getName();                    String realFileName = FileName.getRealFileName(name);                    FileOutputStream os = new FileOutputStream(                     GlobalParameter.fileUpload_fileUpload_path + realFileName);                    IOUtils.copy(is, os);                }            }
原创粉丝点击