JSP就是HTML与java代码的结合
   JSP内置对象直接可以用,不用实例化。
   
   request是请求,每一个请求都调用request。
   
   response是响应,服务器响应时调用。
   
   session 会话 用浏览器登录web时就会产生一个session,当浏览器关闭时,session就结束了。
   
   application 在项目开启的时候就会产生application,而且只有一个。当项目关闭的时候application结束。
   servlet相当于是JSP与Java业务代码之间的桥梁,所谓桥梁,就是需要数据的传输。
   
   servlet其实是java中的一个类,但它却不需要谁调用就运行了,是因为在工程中
   
   web.xml中配置了servlet的路径
   
   <servlet-mapping>
   
   <servlet-name>MajorSer</servlet-name>
   
   <url-pattern>/MajorSer</url-pattern>
   
   </servlet-mapping>
   
   <servlet-mapping>
   
   <servlet-name>StudentSer</servlet-name>
   
   <url-pattern>/StudentSer</url-pattern>
   
   </servlet-mapping>
   
   <servlet-mapping>
   
   <servlet-name>AdminSer</servlet-name>
   
   <url-pattern>/AdminSer</url-pattern>
   
   </servlet-mapping>
   
   在HTML表单中在往“action=”/web/StudentSer” method=”post””提交时,就调用了servlet中的doPost()方法。
   
   数据传输呢?
   
   servlet中可以用request.getParament(“表单名”);来得到表单上传的对应值。
   
   返回数据呢?
   
   可以用内部跳转,传输数据。
   
   数据先存起来
   
   response.setAttribute(“students”,Object);
   
   //后面的Object是任何的数据类型,这里我们假设是List<Student>集合。
   
   然后写数据要到的地址
   
   RequestDispatcher dispatcher = request.getRequestDispatcher(“/pages/selectStudent.jsp”);
   
   //内部跳转是会自动给你添加项目名,所以在写跳转路径时不用写项目名
   
   发送
   
   dispatcher.forward(request, response);
   数据传到JSP后,怎么取出来,可以用
   
   <% List<Student> students = request.getAttribute(“sudents”); %>
   
   数据的存取和对应的取出
   
   request.getSession().setAttribute(“session”, value);
   
   <%request.getSession().getAttribute(“session”);%>
   
   request.getServletContext().setAttribute(“sexs”,sexs);
   
   <%request.getServletContext().getAttribute(“application”); %>
   //如果ser与目标页面没有数据的传递,可以使用外部跳转
   
   response.sendRedirect(“/test/pages/selectStudent.jsp”);
   jstl是java代码在HTML中的一种书写规则,这种写法要比<%  %>更容易嵌套在HTML中
   
   在写时,一定要在HTML中加这句,类似java中导包,就可以直接在HTML中写jstl语句了
   
   <%@ taglib uri=”http://java.sun.com/jsp/jstl/core”  prefix=”c” %>
   
   下面常用的:
   
   输出到HTML页面
   
   <c:out value=”test”/>
   
   单判断(if)
   
   <c:if test=”${5>3}”>
   
   <c:out value=”ture”/>
   
   </c:if>
   
   多判断(if…else…)
   
   <c:choose>
   
   <c:when test=”${5>3}”> </c:when>
   
   <c:otherwise> </c:otherwise>
   
   </c:choose>
   
   遍历(forever)可以遍历数组,集合
   
   String[] string = {“Tom”,”Jake”,”Green”,”Bob”,”Lus”,”Obama”,”Hi”};
   
   <c:forEach items=”string”  var=”char”>
   
   
   
   ${char}<br />
   
   </c:forEach>
   
   就会逐个输出结果。
   
   类似for循环,会输出0到10.
   
   <c:forEach begin=”0″ end=”10″ step=”1″ var=”num”>
   
   ${num}
   
   </c:forEach>
   分割(按”,”进行分割并逐个遍历)
   
   String string = “I,Love,You,!”;
   
   <c:forTokens items=”string” delims=”,” var=”char”>
   
   ${char}<br/>
   
   </c:forTokens>
   链接(还可以传送数据)
   
   <c:url value=”#” var=”up”>
   
   
   
   <c:param name=”sid” value=”123″ />
   
   </c:url>
   
   <a href=”${up}”>提交</a>
   过滤器 filter
   
   在编码问题时,有三个地方要设置,一个HTML中,一个Tomcat中,一个就是servlet中
   
   request.setCharacterEncoding(“UTF-8”);
   
   response.setCharacterEncoding(“UTF-8”);
   
   但是如果新建一个servlet就要设置编码,太麻烦了。
   创建一个类MyFilter,实现接口javax.servlet.Filter;
   
   然后在web.xml配置下,就可以用了
   
   
   
   <filter>
   
   
   
   <filter-name>myfilter</filter-name>
   
   
   
   <filter-class>filter.MyFilter</filter-class>
   
   
   
   </filter>
   
   
   
   <filter-mapping>
   
   
   
   <filter-name>myfilter</filter-name>
   
   
   
   <url-pattern>/*</url-pattern>
   
   
   
   </filter-mapping>
   
   有过滤器之后就可以才过滤器中设置,而只要设置一次,如果不是UTF-8的编码就访问不了。
   
   public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
   
   
   
   FilterChain chain) throws IOException, ServletException {
   
   
   
   servletRequest.setCharacterEncoding(“UTF-8”);
   
   
   
   servletResponse.setCharacterEncoding(“UTF-8”);
   
   
   
   chain.doFilter(servletRequest, servletResponse);
   
   
   
   }
   有的网页必须用户登录之后才可以访问,所以我们可以通过过滤器设置访问权限。
   
   创建一个AdminFilter,实现接口javax.servlet.Filter;
   
   到web.xml配置。
   
   
   
   <filter>
   
   
   
   <filter-name>adminfilter</filter-name>
   
   
   
   <filter-class>filter.AdminFilter</filter-class>
   
   
   
   </filter>
   
   
   
   
   
   
   
   
   
   <filter-mapping>
   
   
   
   <filter-name>adminfilter</filter-name>
   
   
   
   <url-pattern>/pages/*</url-pattern>
   
   
   
   </filter-mapping>
   
   在路径中设置pages包名下的所有JSP文件访问权限(这里路径也是可以不用写项目名的,会自动添加)
   
   过程:登录界面上传用户登录账号和密码到AdminSer类中(servlet类)。
   public void doPost(HttpServletRequest request, HttpServletResponse response)
   
   
   
   throws ServletException, IOException {
   
   
   
   String name =  request.getParameter(“aname”);//得到用户账号
   
   
   
   String pass = request.getParameter(“apass”);//得到用户密码
   
   
   
   if(name.equals(pass)){       //这里简单的匹配相当用户登录的账号与密码确认
   
   
   
   request.getSession().setAttribute(“aname”,name);//把用户账号存到session中
   
   
   
   response.sendRedirect(“/test/pages/selectStudent.jsp”);跳转到功能界面
   
   
   
   }
   
   
   
   }
   
   
   
   因为设置了过滤器,所以请求会经过AdminFilter中的doFilter方法。
   public void doFilter(ServletRequest request, ServletResponse response,
   
   
   
   FilterChain chain) throws IOException, ServletException {
   
   
   
   HttpServletRequest hsr = (HttpServletRequest)request;
   
   
   
   HttpServletResponse res = (HttpServletResponse) response;
   
   
   
   HttpSession session = hsr.getSession();
   
   
   
   if(session.getAttribute(“aname”)!=null){  //判断这个浏览器session中是否有用户名
   
   
   
   chain.doFilter(request, response); //有,说明用户是登录过的,可以访问,释放请求。
   
   
   
   }else{
   
   
   
   res.sendRedirect(“/test/login.jsp”);//没有,说明请求没有权限,跳转到登录界面。
   
   
   
   }
   
   
   
   }