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”);//没有,说明请求没有权限,跳转到登录界面。
}
}