JSP闲谈

  • Post author:
  • Post category:其他


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



}



}



版权声明:本文为qq_36025062原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。