Servlet:
Servlet类必须继承httpServlet。
用html协议访问Servlet:
1.在Servlet里面设置好response.setContentType(CONTENT_TYPE);
CONTENT_TYPE = text/html;charset = utf-8”;
2.在WEB-INF里面设置好xml的Servlet-name以及Servlet-mapping(似乎在tomcat8里面能够使用注解来代替xml)
使用post访问:
需要写一个包含post请求的form网页
--> <form method =”post” action = “/webpage/testServletPost”(为相对路径)>
<input type=”submit” name=”提交” value=”submit”></input>
</form>
Request:
包含对Servlet请求的所有信息,主要用于接受客户端通过HTTP协议传给服务器的数据:包括请求的来源、cookies和请求相关的参数等
通过request可以查看请求参数的配置情况-->调用getParameter
request对象方法分为两大类:
1.request特性信息——只能读取,不能修改:客户端信息、HTML头信息、服务器端信息
2.request携带信息——可以进行写入和读出:
客户端上传信息(主要是From表单的信息和URL的query传递的信息)
请求的属性(由开发者自定的用于将需要的信息传递给其他的Servlet和JSP)
持久对象信息(客户端持久对象Cookies和服务器端Session)
request.getParameter(value)能够得到name为value的值的值有多个值的话就应该使用getParameterValues(String name),返回一个String的数组
当不知道上传信息变量名的时候用getParameterNames,其返回值的是一个Enumeration
Response:定义头文件信息,用于定义HTML的头/状态信息,包括字符编码格式、cookies/页面跳转的方法
JSP(Java Server Pages):
不算是一种特殊的技术,更像是一种特殊的书写形式,目的是为了简化Servlet的书写,其最后终究还是自动编译成Servlet进行运行,所以其运行效率明显高于PHP和ASP。
request可以携带完整的对象,将其传递到另一个JSP或Servlet中-->使用get/setAttribute即可。
介绍一种jsp语法推荐的获取参数的方式:
通过useBean方式获取:
<jsp:useBean id=”username” scope=”Session” class=”java.lang.String”></jsp:useBean>
id是request中对象的调用名,同时也是整个页面中调用这个对象的调用名。
scope说明调用的形式,共4种(他们的作用范围?)。
class说明我们希望从request中取出的对象的类型。
Servlet:out.println(“<title></title>”)
JSP:
<%@page contentType=”text/html;charset=utf-8”%>
<%=”Hello World!”%> == <%out.println(“Hello World!”)%>
MVC的三层设计模式:JSP-Servlet-Bean
在Serlvet中不要包含任何的逻辑处理程序,也不要将页面在Serlvet中直接输出,因此处理相关数据用其他类,输出采用JSP。
Send只能传简单的信息:response.sendRedirect(“showdirect.jsp?username = odin)<自动通过URL进行跳转,和HTML的跳转功能是一样的>
Despatch(常用,能够传递较为复杂的信息):
1.必须使用完全的相对地址,而不是从Servlet的目录开始写,String servletURL是跳转目标的根路径。
2.跳转命令要包含Servlet的request和respose。
代码:
RequestDespatcher rd = getServletContext().getRequestDespatcher(“/showattribute.jsp”);
rd.forward(request,response);
持久对象
Session:放在服务器,储存的是对象
String userName = “demaxiya”;
//生成新的Session对象
HttpSession userinfo = request.getSession(true);
userInfo.setAttribute(“userName”,userName);
response.sendRedirect(“showattribute.jsp”);
使用java的方式获取:
HttpSession userInfo = request.getAttribute(false);userinfo.getAttribute(“username”);
Cookie: 放在客户端,只能存放String,存在时间由程序定义,而不是服务器定义。
相比于Session的优点:
1.存在时间长,关闭浏览器甚至电脑后依然有效,而Session当关闭浏览器后就失效了。
2.Cookie不占用浏览器的资源,不会给服务器造成压力。
3.Cookie能够被JavaScript等页面语言所使用,而Session不行。
Cookie的生成:
1.new Cookis(name,value)
2.response.setCookie(cookie)
Cookie 的获取:request.getCookies() <返回一个Cookie的数组>
综合运用
JSP中导入另一个JSP
<%@ include file=”data.jsp”%>
文件上传
上传文件使用的是标准的HTML方式:
<form action=”servletfileup” enctype=”multipart/form-data” method=”POST”>
默认使用表单传输,通过I/O解析的方法(能够被request自动解析“application/www-form-urlencoded”)
<input type=”file” name=”fileStream” /> 能够上传文件的标记
<input type=”submit” />提交按钮
文件的服务器端的获取:request.getInputStream-->new InputStreamReader-->new BufferReader-->LineNumberReader-->String
编写一个获取Form表单的通用方法
要求:
1.判断form上传信息的形式
2.如果可以用标准的request自动解析,则采用request自动解析,将Form上传的名值对放入一个标准的容器中
3.如果form信息包含了上传文件,则将非文件的信息和自动解析一样放入一个标准的数据容器中,将上传文件放入指定目录中(如果没有指定目录则放入默认目录中),并且将上传文件名作为该项目的值,项目名作为调用名一起放入标准容器中。
XML解析
通过Dom4j的SAX进行解析(自己编写)