后端总结1
来源:互联网 发布:java逐个读取单词 编辑:程序博客网 时间:2024/05/17 22:03
1)Servlet 生命周期
- Servlet 是第一次访问才会调用 init () 方法进行初始化,由服务器创建。
- Servlet 调用 service()方法来处理客户端的请求,doGet()、doPost()只是它的一个事件派发。
- 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 状态码
9)Servlet 编写过滤器 Filter
filter与servlet是表兄弟,很类似,除了init的调用时间和优先级问题。
Filter的执行顺序与在web.xml配置文件中的配置顺序一致(并不是靠优先级),一般把Filter配置在所有的Servlet之前。
过滤器是列表内容一个实现了 javax.servlet.Filter 接口的 Java 类。
- public void init(FilterConfig filterConfig),web 应用程序启动时,web 服务器将创建Filter 的实例对象,并立即调用其init方法,而servlet是第一次访问时才调用init方法。filter对象只会创建一次,init方法也只会执行一次。
- public void doFilter (ServletRequest, ServletResponse, FilterChain)
- 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
- cookie不能存储对象,存储中文会乱码,一般是存储字符串。
- public void setMaxAge(int expiry),该方法设置 cookie 过期的时间(以秒为单位)。如果不这样设置,cookie 只会在当前 session 会话中持续有效。
- public String getValue(),该方法获取与 cookie 关联的值。
设置cookie
Cookie cookie = new Cookie("key","value");cookie.setMaxAge(60*60*24); response.addCookie(cookie);
读取 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 会话:
- Cookies,但是很多浏览器不支持 cookie,所以我们建议不要使用这种方式来维持 session 会话。
隐藏的表单字段,但是点击常规的超文本链接不会导致表单提交
<input type="hidden" name="sessionid" value="12345">
URL 重写,但是它的缺点是会动态生成每个 URL 来为页面分配一个 session 会话 ID,即使是在很简单的静态 HTML 页面中也会如此。
所以我们的HttpSession 对象就产生了;Servlet 容器使用 HttpSession接口来创建一个 HTTP 客户端和 HTTP 服务器之间的 session 会话。会话持续一个指定的时间段,跨多个连接或页面请求。
HttpSession session = request.getSession();
HttpSession 对象(能存储对象)中可用的几个重要的方法:
- public Object getAttribute(String name),该方法返回在该 session 会话中具有指定名称的对象,如果没有指定名称的对象,则返回 null。
- public void invalidate(),该方法指示该 session 会话无效,并解除绑定到它上面的任何对象。
- public void removeAttribute(String name),该方法将从该 session 会话移除指定名称的对象。
- public void setAttribute(String name, Object value) ,该方法使用指定的名称绑定一个对象到该 session 会话。
- public void setMaxInactiveInterval(int interval),该方法在 Servlet 容器指示该 session 会话无效之前,指定客户端请求之间的时间,以秒为单位。
- public long getCreationTime(),该方法返回该 session 会话被创建的时间,自格林尼治标准时间 1970 年 1 月 1 日午夜算起,以毫秒为单位。主要用来获取网页的最后一次访问时间。
- public boolean isNew(),主要来获取是否有新用户。
14)表单文件上传
三个注意点:
- 表单 method 属性应该设置为 POST 方法,不能使用 GET 方法。
- 表单 enctype 属性应该设置为 multipart/form-data.
- 上传单个文件,应该使用单个带有属性 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); } }
- 后端总结1
- 项目后端知识点总结1
- Java后端程序员1年工作经验总结
- Java后端程序员1年工作经验总结
- Java后端程序员1年工作经验总结
- java后端程序员1年工作经验总结
- Java后端程序员1年工作经验总结
- Java后端程序员1年工作经验总结
- 后端c++知识点总结
- Java后端面试总结
- 后端c++知识点总结
- 后端开发规范总结
- JAVA后端总结
- java后端1年经验和技术总结(1)
- java后端1年经验和技术总结(1)
- java后端1年经验和技术总结(1)
- 前端js+ajax+css/后端springMVC项目1总结
- Java后端1年经验和技术总结
- SQL 连接
- c3p0 c3p0.properties
- Jarvis OJ PHPINFO【审计代码反序列化】
- 2017年严重拖延着患者欠下的债
- 实现在一组数中找出最大值与最小值
- 后端总结1
- Nginx
- 总有一天你将破蛹而出
- Docker教程
- python基础入门 02
- Nginx安装使用(一)
- 学生信息管理系统4
- 防止DNS污染,顺利下载caffe依赖文件
- CCF认证 201509-1:数列分段