一、解决全站字符乱码(post和get中文编码问题)

乱码问题:

  • 获取请求参数中的乱码问题;
  1. POST请求:request.setCharacterEncoding(“utf-8”);
  2. GET请求:new String(request.getParameter(“xxx”).getBytes(“iso-8859-1”), “utf-8”);
  • 响应的乱码问题:
  1. response.setContextType(“text/html;charset=utf-8”)

使用Decorator模式包装request对象解决get和post请求方式下的中文乱码问题

  编写一个用于处理中文乱码的过滤器CharacterEncodingFilter,代码如下:

  1. package cn.zy.filter;
  2.  
  3. import java.io.IOException;
  4. import javax.servlet.Filter;
  5. import javax.servlet.FilterChain;
  6. import javax.servlet.FilterConfig;
  7. import javax.servlet.ServletException;
  8. import javax.servlet.ServletRequest;
  9. import javax.servlet.ServletResponse;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletRequestWrapper;
  12. import javax.servlet.http.HttpServletResponse;
  13.  
  14. public class CharacterEncodingFilter implements Filter {
  15. private FilterConfig filterConfig = null;
  16. //设置默认的字符编码
  17. private String defaultCharset = "UTF-8";
  18.  
  19. public void doFilter(ServletRequest req, ServletResponse resp,
  20. FilterChain chain) throws IOException, ServletException {
  21. HttpServletRequest request = (HttpServletRequest)req;
  22. HttpServletResponse response = (HttpServletResponse) resp;
  23. //得到在web.xml中配置的字符编码
  24. String charset = filterConfig.getInitParameter("charset");
  25. if(charset==null){
  26. charset = defaultCharset;
  27. }
  28. request.setCharacterEncoding(charset);
  29. response.setCharacterEncoding(charset);
  30. response.setContentType("text/html;charset="+charset);
  31.  
  32. //使用得到加强的request
  33. EncodingRequest requestWrapper = new EncodingRequest(request);
  34. chain.doFilter(requestWrapper, response);
  35. }
  36.  
  37. public void init(FilterConfig filterConfig) throws ServletException {
  38. this.filterConfig = filterConfig;
  39.  
  40. }
  41.  
  42. public void destroy() {
  43. }
  44.  
  45. /*
  46. * 写一个装饰类增强HttpServletRequest对象
  47. */
  48. class EncodingRequest extends HttpServletRequestWrapper {
  49. //定义一个变量记住被增强对象(request对象是需要被增强的对象)
  50. private HttpServletRequest request;
  51. //定义一个构造函数,接收被增强对象
  52. public EncodingRequest(HttpServletRequest request) {
  53. super(request);
  54. this.request = request;
  55. }
  56. /* 覆盖需要增强的getParameter方法
  57. * @see javax.servlet.ServletRequestWrapper#getParameter(java.lang.String)
  58. */
  59. @Override
  60. public String getParameter(String name) {
  61. try{
  62. //获取参数的值
  63. String value= this.request.getParameter(name);
  64. if(value==null){
  65. return null;
  66. }
  67. //如果不是以get方式提交数据的,就直接返回获取到的值
  68. if(!this.request.getMethod().equalsIgnoreCase("get")) {
  69. return value;
  70. }else{
  71. //如果是以get方式提交数据的,就对获取到的值进行转码处理
  72. value = new String(value.getBytes("ISO8859-1"),this.request.getCharacterEncoding());
  73. return value;
  74. }
  75. }catch (Exception e) {
  76. throw new RuntimeException(e);
  77. }
  78. }
  79. }
  80. }

在web.xml文件中配置Filter

  1. <filter>
  2. <filter-name>CharacterEncodingFilter</filter-name>
  3. <filter-class>cn.zy.filter.CharacterEncodingFilter</filter-class>
  4. <init-param>
  5. <param-name>name</param-name>
  6. <param-value>UTF-8</param-value>
  7. </init-param>
  8. </filter>
  9. <filter-mapping>
  10. <filter-name>CharacterEncodingFilter</filter-name>
  11. <url-pattern>/*</url-pattern>
  12. </filter-mapping>

编写一个测试的用的jsp提交表单

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  3. <%
  4. String path = request.getContextPath();
  5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  6. %>
  7.  
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  9. <html>
  10. <head>
  11. <base href="<%=basePath%>">
  12.  
  13. <title>My JSP 'index.jsp' starting page</title>
  14. <meta http-equiv="pragma" content="no-cache">
  15. <meta http-equiv="cache-control" content="no-cache">
  16. <meta http-equiv="expires" content="0">
  17. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  18. <meta http-equiv="description" content="This is my page">
  19. <!--
  20. <link rel="stylesheet" type="text/css" href="styles.css">
  21. -->
  22. </head>
  23.  
  24. <body>
  25. <form action="<c:url value='/Aservlet'/>" method="post">
  26. 用户名: <input type="text" name="username">
  27. <input type="submit" value="提交"/>
  28. </form>
  29. <a href="<c:url value='/Aservlet?username=张三'/>">点击这里</a><br/>
  30. </body>
  31. </html>

编写一个Servlet用于处理请求

  1. package cn.zy.filter;
  2.  
  3. import java.io.IOException;
  4. import java.io.PrintWriter;
  5.  
  6. import javax.servlet.ServletException;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10.  
  11. public class Aservlet extends HttpServlet {
  12.  
  13. /**
  14. * The doGet method of the servlet. <br>
  15. *
  16. * This method is called when a form has its tag value method equals to get.
  17. *
  18. * @param request the request send by the client to the server
  19. * @param response the response send by the server to the client
  20. * @throws ServletException if an error occurred
  21. * @throws IOException if an error occurred
  22. */
  23. public void doGet(HttpServletRequest request, HttpServletResponse response)
  24. throws ServletException, IOException {
  25. String username = request.getParameter("username");
  26. //获取请求方式
  27. String method = request.getMethod();
  28. response.getWriter().print("请求方式" +method+"参数:"+username);
  29. }
  30.  
  31. public void doPost(HttpServletRequest request, HttpServletResponse response)
  32. throws ServletException, IOException {
  33. doGet(request, response);
  34. }
  35.  
  36. }

二、统计每个访问次数

写一个监听器,在服务启动时创建一个map,用于保存访问IP和次数

  1. package cn.zy.listener;
  2.  
  3. import java.util.LinkedHashMap;
  4. import java.util.Map;
  5. import javax.servlet.ServletContext;
  6. import javax.servlet.ServletContextEvent;
  7. import javax.servlet.ServletContextListener;
  8.  
  9. public class CreateMapListener implements ServletContextListener {
  10.  
  11. public void contextInitialized(ServletContextEvent sce) {
  12. /*
  13. * 在服务器启动时创建map
  14. */
  15. Map<String,Integer> map = new LinkedHashMap<String,Integer>();
  16. //得到ServletContext
  17. ServletContext application = sce.getServletContext();
  18. //把Map保存到ServletContext中
  19. application.setAttribute("map", map);
  20. }
  21.  
  22. public void contextDestroyed(ServletContextEvent sce) {
  23.  
  24. }
  25.  
  26. }

创建一个Filter用于统计访问次数

  1. package cn.zy.filter;
  2.  
  3. import java.io.IOException;
  4. import java.util.Map;
  5.  
  6. import javax.servlet.Filter;
  7. import javax.servlet.FilterChain;
  8. import javax.servlet.FilterConfig;
  9. import javax.servlet.ServletContext;
  10. import javax.servlet.ServletException;
  11. import javax.servlet.ServletRequest;
  12. import javax.servlet.ServletResponse;
  13.  
  14. /*
  15. * 获取某个IP访问本站的次数
  16. */
  17. public class AccessCountFilter implements Filter {
  18. private FilterConfig config;
  19.  
  20. public void destroy() {
  21. }
  22.  
  23. public void doFilter(ServletRequest request, ServletResponse response,
  24. FilterChain chain) throws IOException, ServletException {
  25. //1. 得到appliction
  26. ServletContext app = config.getServletContext();
  27. //2.从application中获取map
  28. Map<String,Integer> map = (Map<String, Integer>) app.getAttribute("map");
  29. //3.获取客户端的地址
  30. String ip = request.getRemoteAddr();
  31. /*
  32. * 4.进行判断IP是否是第一次访问,如果不是则加1,如果是则设置为1
  33. */
  34. if(map.containsKey(ip)){
  35. int cnt = map.get(ip);
  36. map.put(ip, cnt+1);
  37. }else{
  38. map.put(ip, 1);
  39. }
  40. //5.把map重新放回到app中
  41. app.setAttribute("map", map);
  42. //6.放行
  43. chain.doFilter(request, response);
  44. }
  45.  
  46. public void init(FilterConfig filterConfig) throws ServletException {
  47. this.config=filterConfig;
  48.  
  49. }
  50.  
  51. }

web.xml中的配置:

  1. <filter>
  2. <filter-name>AccessCountFilter</filter-name>
  3. <filter-class>cn.zy.filter.AccessCountFilter</filter-class>
  4. </filter>
  5. <filter-mapping>
  6. <filter-name>AccessCountFilter</filter-name>
  7. <url-pattern>/*</url-pattern>
  8. </filter-mapping>
  9.  
  10. <!-- 配置Listener -->
  11. <listener>
  12. <listener-class>cn.zy.listener.CreateMapListener</listener-class>
  13. </listener>

创建一个jsp用于显示

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  3. <%
  4. String path = request.getContextPath();
  5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  6. %>
  7.  
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  9. <html>
  10. <head>
  11. <base href="<%=basePath%>">
  12.  
  13. <title>My JSP 'show.jsp' starting page</title>
  14.  
  15. <meta http-equiv="pragma" content="no-cache">
  16. <meta http-equiv="cache-control" content="no-cache">
  17. <meta http-equiv="expires" content="0">
  18. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  19. <meta http-equiv="description" content="This is my page">
  20. <!--
  21. <link rel="stylesheet" type="text/css" href="styles.css">
  22. -->
  23.  
  24. </head>
  25.  
  26. <body>
  27. <h1 align="center">显示结果</h1>
  28. <table align="center" width="60%" border="1">
  29. <tr>
  30. <th>IP</th>
  31. <th>次数</th>
  32. </tr>
  33. <c:forEach items="${applicationScope.map }" var="entry">
  34. <tr>
  35. <td>${entry.key }</td>
  36. <td>${entry.value }</td>
  37. </tr>
  38. </c:forEach>
  39. </table>
  40. </body>
  41. </html>

结果如下图所示:

三、粗粒度权限控制(控制页面的访问权限)

目的:

我们给出三个页面:index.jsp、user.jsp、admin.jsp。

l  index.jsp:谁都可以访问,没有限制;

l  user.jsp:只有登录用户才能访问;

l  admin.jsp:只有管理员才能访问。

创建一个登陆界面,用于提交表单

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  3. <%
  4. String path = request.getContextPath();
  5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  6. %>
  7.  
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  9. <html>
  10. <head>
  11. <base href="<%=basePath%>">
  12.  
  13. <title>My JSP 'login.jsp' starting page</title>
  14.  
  15. <meta http-equiv="pragma" content="no-cache">
  16. <meta http-equiv="cache-control" content="no-cache">
  17. <meta http-equiv="expires" content="0">
  18. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  19. <meta http-equiv="description" content="This is my page">
  20. <!--
  21. <link rel="stylesheet" type="text/css" href="styles.css">
  22. -->
  23.  
  24. </head>
  25.  
  26. <body>
  27. <h1>登录</h1>
  28. ${msg }
  29. <form action="<c:url value='/LoginServlet' />" method="post">
  30. 用户名:<input type="text" name="username" /><br>
  31. 密码:<input type="password" name="password" /> <br>
  32. <input type="submit" value="提交">
  33. </form>
  34. </body>
  35. </html>

2.创建一个Servlet处理表单

  1. package cn.zy.web.servlet;
  2.  
  3. import java.io.IOException;
  4. import java.io.PrintWriter;
  5.  
  6. import javax.servlet.ServletException;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10.  
  11. public class LoginServlet extends HttpServlet {
  12. public void doGet(HttpServletRequest request, HttpServletResponse response)
  13. throws ServletException, IOException {
  14.  
  15. response.setContentType("text/html;charset=utf-8");
  16.  
  17. /*
  18. * 1.获取用户名
  19. * 2.如果含有admin则是管理员
  20. * 3.如果不包含则为普通用户
  21. */
  22.  
  23. String username = request.getParameter("username");
  24. if(username.contains("admin")){
  25. request.getSession().setAttribute("admin", username);
  26. }else{
  27. request.getSession().setAttribute("username", username);
  28. }
  29. request.getRequestDispatcher("/index.jsp").forward(request, response);
  30. }
  31.  
  32. public void doPost(HttpServletRequest request, HttpServletResponse response)
  33. throws ServletException, IOException {
  34. doGet(request,response);
  35. }
  36.  
  37. }

2.创建一个jsp,用于链接到不同的页面

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  3. <%
  4. String path = request.getContextPath();
  5. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  6. %>
  7.  
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  9. <html>
  10. <head>
  11. <base href="<%=basePath%>">
  12.  
  13. <title>My JSP 'index.jsp' starting page</title>
  14. <meta http-equiv="pragma" content="no-cache">
  15. <meta http-equiv="cache-control" content="no-cache">
  16. <meta http-equiv="expires" content="0">
  17. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  18. <meta http-equiv="description" content="This is my page">
  19. <!--
  20. <link rel="stylesheet" type="text/css" href="styles.css">
  21. -->
  22. </head>
  23.  
  24. <body>
  25. <h1>你就是个游客而已</h1>
  26. <a href="<c:url value='/index.jsp'/>">游客入口</a><br/>
  27. <a href="<c:url value='/users/u.jsp'/>">会员入口</a><br/>
  28. <a href="<c:url value='/admin/a.jsp'/>">管理员入口</a><br/>
  29. </body>
  30. </html>

3.创建两个jsp,内容就是普通用户能访问的页面和管理员才能访问的页面

4.做两个过滤器,用于权限控制

AdminFilter

  1. package cn.zy.filter;
  2.  
  3. import java.io.IOException;
  4.  
  5. import javax.servlet.Filter;
  6. import javax.servlet.FilterChain;
  7. import javax.servlet.FilterConfig;
  8. import javax.servlet.ServletException;
  9. import javax.servlet.ServletRequest;
  10. import javax.servlet.ServletResponse;
  11. import javax.servlet.http.HttpServletRequest;
  12.  
  13. public class AdminFilter implements Filter {
  14.  
  15. public void destroy() {
  16.  
  17. }
  18.  
  19. public void doFilter(ServletRequest request, ServletResponse response,
  20. FilterChain chain) throws IOException, ServletException {
  21. //得到Session
  22. HttpServletRequest req = (HttpServletRequest)request;
  23. String name = (String)req.getSession().getAttribute("admin");
  24. if(name != null){
  25. chain.doFilter(request, response);
  26. }else{
  27. req.setAttribute("msg", "您不是管理员!");
  28. req.getRequestDispatcher("/login.jsp").forward(request, response);
  29. }
  30. }
  31.  
  32. public void init(FilterConfig arg0) throws ServletException {
  33. }
  34. }

UserFilter

  1. package cn.zy.filter;
  2.  
  3. import java.io.IOException;
  4.  
  5. import javax.servlet.Filter;
  6. import javax.servlet.FilterChain;
  7. import javax.servlet.FilterConfig;
  8. import javax.servlet.ServletException;
  9. import javax.servlet.ServletRequest;
  10. import javax.servlet.ServletResponse;
  11. import javax.servlet.http.HttpServletRequest;
  12.  
  13. public class UserFilter implements Filter {
  14.  
  15. public void init(FilterConfig filterConfig) throws ServletException {
  16.  
  17. }
  18.  
  19. public void doFilter(ServletRequest request, ServletResponse response,
  20. FilterChain chain) throws IOException, ServletException {
  21.  
  22. HttpServletRequest req = (HttpServletRequest) request;
  23. String name = (String)req.getSession().getAttribute("admin");
  24. if(name != null) {
  25. chain.doFilter(request, response);
  26. return;
  27. }
  28.  
  29. name = (String)req.getSession().getAttribute("username");
  30. if(name != null){
  31. chain.doFilter(request, response);
  32. }else{
  33. req.setAttribute("msg", "您不是管理员也不是会员!");
  34. req.getRequestDispatcher("/login.jsp").forward(request, response);
  35. }
  36.  
  37. }
  38.  
  39. public void destroy() {
  40. }
  41.  
  42. }

web.xml中的配置

  1. <filter>
  2. <display-name>UserFilter</display-name>
  3. <filter-name>UserFilter</filter-name>
  4. <filter-class>cn.zy.filter.UserFilter</filter-class>
  5. </filter>
  6. <filter-mapping>
  7. <filter-name>UserFilter</filter-name>
  8. <url-pattern>/users/*</url-pattern>
  9. </filter-mapping>
  10. <filter>
  11. <display-name>AdminFilter</display-name>
  12. <filter-name>AdminFilter</filter-name>
  13. <filter-class>cn.zy.filter.AdminFilter</filter-class>
  14. </filter>
  15. <filter-mapping>
  16. <filter-name>AdminFilter</filter-name>
  17. <url-pattern>/admin/*</url-pattern>
  18. </filter-mapping>

四、 response增强案例——缓存数据到内存

对于页面中很少更新的数据,例如商品分类,为避免每次都要从数据库查询分类数据,因此可把分类数据缓存在内存或文件中,以此来减轻数据库压力,提高系统响应速度。

  编写缓存数据的过滤器,代码如下:

  1. package cn.zy.filter;
  2.  
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.IOException;
  5. import java.io.OutputStreamWriter;
  6. import java.io.PrintWriter;
  7. import java.util.HashMap;
  8. import java.util.Map;
  9.  
  10. import javax.servlet.Filter;
  11. import javax.servlet.FilterChain;
  12. import javax.servlet.FilterConfig;
  13. import javax.servlet.ServletException;
  14. import javax.servlet.ServletOutputStream;
  15. import javax.servlet.ServletRequest;
  16. import javax.servlet.ServletResponse;
  17. import javax.servlet.http.HttpServletRequest;
  18. import javax.servlet.http.HttpServletResponse;
  19. import javax.servlet.http.HttpServletResponseWrapper;
  20.  
  21. public class WebResourceCachedFilter implements Filter {
  22. /**
  23. * @Field: map
  24. * 缓存Web资源的Map容器
  25. */
  26. private Map<String,byte[]> map = new HashMap<String,byte[]>();
  27.  
  28. public void init(FilterConfig filterConfig) throws ServletException {
  29.  
  30. }
  31.  
  32. public void doFilter(ServletRequest req, ServletResponse resp,
  33. FilterChain chain) throws IOException, ServletException {
  34. HttpServletRequest request = (HttpServletRequest) req;
  35. HttpServletResponse response = (HttpServletResponse) resp;
  36. response.setCharacterEncoding("utf-8");
  37. //1.得到用户请求的uri
  38. String uri = request.getRequestURI();
  39. //2.看缓存中有没有uri对应的数据
  40. byte b[] = map.get(uri);
  41. //3.如果缓存中有,直接拿缓存的数据打给浏览器,程序返回
  42. if(b!=null){
  43. //根据字节数组和指定的字符编码构建字符串
  44. String webResourceHtmlStr = new String(b,response.getCharacterEncoding());
  45. System.out.println(webResourceHtmlStr);
  46. response.getOutputStream().write(b);
  47. return;
  48. }
  49. //4.如果缓存没有,让目标资源执行,并捕获目标资源的输出
  50. BufferResponse myresponse = new BufferResponse(response);
  51. chain.doFilter(request, myresponse);
  52. //获取缓冲流中的内容的字节数组
  53. byte out[] = myresponse.getBuffer();
  54. //5.把资源的数据以用户请求的uri为关键字保存到缓存中
  55. map.put(uri, out);
  56. //6.把数据打给浏览器
  57. response.getOutputStream().write(out);
  58. }
  59.  
  60. public void destroy() {
  61.  
  62. }
  63.  
  64. class BufferResponse extends HttpServletResponseWrapper{
  65. private ByteArrayOutputStream bout = new ByteArrayOutputStream(); //捕获输出的缓存
  66. private PrintWriter pw;
  67. private HttpServletResponse response;
  68. public BufferResponse(HttpServletResponse response) {
  69. super(response);
  70. this.response = response;
  71. }
  72. @Override
  73. public ServletOutputStream getOutputStream() throws IOException {
  74. return new MyServletOutputStream(bout);
  75. }
  76. @Override
  77. public PrintWriter getWriter() throws IOException {
  78. pw = new PrintWriter(new OutputStreamWriter(bout,this.response.getCharacterEncoding()));
  79. return pw;
  80. }
  81.  
  82. public byte[] getBuffer(){
  83. try{
  84. if(pw!=null){
  85. pw.close();
  86. }
  87. return bout.toByteArray();
  88. }catch (Exception e) {
  89. throw new RuntimeException(e);
  90. }
  91. }
  92. }
  93.  
  94. class MyServletOutputStream extends ServletOutputStream{
  95. private ByteArrayOutputStream bout;
  96. public MyServletOutputStream(ByteArrayOutputStream bout){ //接收数据写到哪里
  97. this.bout = bout;
  98. }
  99. @Override
  100. public void write(int b) throws IOException {
  101. bout.write(b);
  102. }
  103. }
  104. }

在web.xml中配置Web资源缓存过滤器

  1. <filter>
  2. <description>Web资源缓存过滤器</description>
  3. <filter-name>WebResourceCachedFilter</filter-name>
  4. <filter-class>cn.zy.filter.WebResourceCachedFilter</filter-class>
  5. </filter>
  6.  
  7. <filter-mapping>
  8. <filter-name>WebResourceCachedFilter</filter-name>
  9. <!-- 映射需要缓存输出的JSP页面,这几个页面都只是单纯作为输入UI,不会有太多的变化,因此可以缓存输出 -->
  10. <url-pattern>/login.jsp</url-pattern>
  11. <url-pattern>/test.jsp</url-pattern>
  12. <url-pattern>/test2.jsp</url-pattern>
  13. </filter-mapping>

JavaWeb学习总结(十五)--过滤器的应用的更多相关文章

  1. javaweb学习总结(十五)——JSP基础语法

    任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依然有其自己扩充的语法,而且在JSP中,所有的JAVA语句都可以使用. 一.JSP模版元素 JSP页面中的HTML内容称之 ...

  2. javaweb学习总结十五(web开发的相关概念以及常用服务器介绍)

    一:java web开发的相关概念 1:web分为静态web和动态web 2:模拟web服务器 web页面如果想让外部网络访问,必须通过网络程序读取资源,流程: a:用户通过浏览器访问网络程序 b:网 ...

  3. JavaWeb学习 (二十五)————监听器(Listener)

    一.监听器介绍 1.1.监听器的概念

  4. javaweb学习总结(十五)——JSP基础语法(转)

    任何语言都有自己的语法,JAVA中有,JSP虽然是在JAVA上的一种应用,但是依然有其自己扩充的语法,而且在JSP中,所有的JAVA语句都可以使用. 一.JSP模版元素 JSP页面中的HTML内容称之 ...

  5. python3.4学习笔记(十五) 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)

    python3.4学习笔记(十五) 字符串操作(string替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) python print 不换行(在后面加上,end=''),prin ...

  6. 201671010140. 2016-2017-2 《Java程序设计》java学习第十五周

    java学习第十五周 Java的GUI界面设计,框架以及主要部件填充,归置,布局管理,在第十一章和第十二章进行了系统的学习,在这两章的知识奠基下,可以简单的构造一个GUI用户界面,在两周的学习后,可以 ...

  7. 学习笔记:CentOS7学习之十五: RAID磁盘阵列的原理与搭建

    目录 学习笔记:CentOS7学习之十五: RAID磁盘阵列的原理与搭建 14.1 RAID概念 14.1.1 RAID几种常见的类型 14.1.2 RAID-0工作原理 14.1.3 RAID-1工 ...

  8. 风炫安全WEB安全学习第二十五节课 利用XSS键盘记录

    风炫安全WEB安全学习第二十五节课 利用XSS键盘记录 XSS键盘记录 同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源.所以xyz.com下的js脚本采用a ...

  9. (C/C++学习笔记) 十五. 构造数据类型

    十五. 构造数据类型 ● 构造数据类型概念 Structured data types 构造数据类型 结构体(structure), 联合体/共用体 (union), 枚举类型(enumeration ...

  10. JavaWeb学习 (二十四)————Filter(过滤器)常见应用

    一.统一全站字符编码 通过配置参数charset指明使用何种字符编码,以处理Html Form请求参数的中文问题 1 package me.gacl.web.filter; 2 3 import ja ...

随机推荐

  1. LA 3704 Cellular Automaton

    题意概述: 等价地,本题可以转化为下面的问题: 考虑$n \times n$的$0-1$矩阵$A$,在第$i$行上第$[-d+i, d+i]$(模$n$意义下)列对应的元素为$1$,其余为$0$.求$ ...

  2. Cow Bowling

    Cow Bowling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15585 Accepted: 10363 Descrip ...

  3. asp.net webapi初探(一)

    本人对webapi尚没有深入研究,初次接触发现了在数据请求时的几点现象. 先切入代码 1.如果action中开头带有Get默认就是get方式,不带Get默认就是post方式 public string ...

  4. 制作动画效果:《CSS3 Animation》

    在开始介绍Animation之前我们有必要先来了解一个特殊的东西,那就是"Keyframes",我们把他叫做“关键帧”,玩过flash的朋友可能对这个东西并不会陌生.下面我们就一起 ...

  5. JS获取url参数及url编码、解码

    完整的URL由这几个部分构成:scheme://host:port/path?query#fragment ,各部分的取法如下: window.location.href:获取完整url的方法:,即s ...

  6. hdu 2089 不要62 数位dp

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  7. AIM Tech Round 3 (Div. 2) A

    Description Kolya is going to make fresh orange juice. He has n oranges of sizes a1, a2, ..., an. Ko ...

  8. java-以月为单位,得到一年中某一个月份的范围

    简单说:得到某一月份的第一天,第一小时,第一分钟,第一秒和某一月份的最后一天,最后一小时,最后一分钟,最后一秒. 实现: //月初 private Date getBeginTimeOfMonth(i ...

  9. Intent官方教程(5)在manifest中给组件添加<Intent-filter>

    Receiving an Implicit Intent To advertise which implicit intents your app can receive, declare one o ...

  10. JavaScript的循环语句

    JavaScript的循环语句 1.JavaScript的循环语句 (1)for循环语句 - 循环代码块一定的次数: (2)for/in循环语句 - 循环遍历对象的属性: (3)while循环语句 - ...