servlet+重定向+转发+数据传递
- 1,最简单的servlet使用
i,写一个类,类名以Servlet结束(不强制)
清单:src/servlet/TestServlet.java
TestServlet extends HttpServlet
override method:
//页面form中的method以post方式发送调用该方法
doPost(HttpServletRequest req,HttpServletResponse resp)
//页面form中的method以get方式发送调用该方法
doGet(HttpServletRequest req,HttpServletResponse resp)
ii,配置servlet
清单:/WebRoot/WEB-INF/web.xml
//配置servlet在程序中对应的类
<servlet>
//指定servlet名字,用于在servlet-mapping中进行对应
<servlet-name>test</servlet-name>
//指定servlet对应的class
<servlet-class>servlet.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
//对应servlet名字
<servlet-name>test</servlet-name>
//在页面的form中的action为test时匹配该mapping(action中不需要带'/')
<url-pattern>/test</url-pattern>
</servlet-mapping>
iii,写界面
<form action="test" method="get/post">
//elements
<input type="submit" value="submit"/>
</form>
流程:
用户访问,提交请求,服务器读取web.xml,匹配请求对应的servlet-mapping,
进而匹配servlet对应的class,根据请求执行对应的doGet/doPost,doGet/doPost中
处理完数据进行重定向或者转发到另一个页面。在这期间,可以进行数据传递。
重定向(redirect):客户端的要求当前服务器无法达到,请求别的服务器帮助,当前服务器相当于代理
servlet中
response.sendRedirect("URL");
jsp中
<%response.sendRedirect("URL")%>
i,可以是任何一个地址,也可以是jpg,png,avi等文件
ii,改变了浏览器的访问地址
转发(forward):属于服务端的动作,有一系列完整的客户端请求响应动作,无需别的服务器帮助
servlet中
request.getRequestDispatcher("本工程路径[默认为WebRoot]").forward();
jsp中
<jsp:forward page="本工程路径[默认为WebRoot]"/>
i,只能是本工程的文件,不能是servlet等类
ii,不改变浏览器的访问地址
数据传递
i,jsp的隐式对象(9个)容器
request(客户端每一次请求都将生成一个request,请求结束request被销毁)
servlet传值
request.setAttribute("attName","attValue");
jsp拿值
i,<%request.getAttribute("attName")%> // 使用隐式对象拿值
ii,${attName} //使用El拿值
cookie(客户端所携带的信息,由request获得,由客户清空信息)
servlet中拿值
request.getCookies() return Cookie[]
session(客户端访问服务端的整个过程[认为是在交谈所以称为会话],
浏览器关闭丢失sessionId,随后服务将销毁session)
servlet传值
session.setAttribute("attName","attValue");
jsp拿值
i,session.getAttribute("attName");
ii,${attName}
application(服务器开启对象被生成,关闭被销毁)
application实际对应的是ServletContext
servlet传值
this.getServletContext().setAttribute("attName","attValue");
jsp拿值
i,<%application.getAttribute("attname')%>
ii,${attName}
request,response,cookie,session和application解释
学生和老师交谈,学生问一句,老师答一句,
request表示学生问的信息
response表示老师答的信息
cookie表示学生本身携带的信息,例如学生的名字。
session表示整个交谈都一直存在的信息,例如学生一直围绕一道题而产生很多的问题,
那么这道题可以理解为session,其他的题可以理解为request。
application表示所有学生在与老师交谈中都可以拿到的信息,可以理解成在javaSE中的
static修饰后的效果,每个方法为一个学生。每个客户访问都共享一个application对象。
ii,url传值
xx.jsp?parameterName = parameterValue & parameterName1 = parameterValue1
获得值
request.getParameter(parameterName);
(EL无法获得参数内容)
iii,form传值(相当于request.setAttribute("attName","attValue"))
前提:可携带值的元素(text,hidden,,,)带有name属性
servlet拿值
request.getAttribute("name");