- servlet是sun公司指定的一套技术标准,包含于web应用相关的一系列接口,是web应用实现方式的宏观解决方案。而具体的servlet容器负责提供标准的实现。
- servlet作为服务器端的一个组件,她的本意是“服务器端的小程序”。Servlet的实例对象由Servlet容器负责创建;Servlet的方法由容器在特定情况下调用。servlet容器会在web应用卸载时销毁servlet对象的实列。
- 简单可以理解为Servelt就是用来处理客户端的请求的。
- 狭义的servlet是指java语言实现的一个接口,广义的servlet是指实现了servlet接口的类。一般情况下,人们将servlet理解为后者。servlet运行于支持java的应用服务器中。从原理上讲,servlet可以响应任何类型的请求,但绝大多数情况下servlet只用来扩展基于Http协议的web服务器。
实际编码通过继承HttpServlet来完成Servlet的开发
public class LoginServlet extends HttpServlet{}
Servlet类的相关方法
doGet Sevlet中用于处理get请求的方法
@Override
protected void doGet(HttpServletRequest req,HttpServeltResponse)throws ServeletException,IOException{
super.doGet(req,resp);
}
doPost Servlet 中用于处理post请求的方法
@Override
protected void doGet(HttpServletRequest req,HttpServeltResponse)throws ServeletException,IOException{
super.doPost(req,resp);
}
service
- 在servlet的顶层实现中,在service方法中调用的具体的doget或者是dopost方法
- 在实际开发servlet的过程中,可以选择重写doget以及dopost或者直接重写service方法来处理请求
Service在web.xml中的配置
HttpServletRequest
-
该接口是ServletRequest接口的子接口,封装了http请求的相关信息,由servlet容器创建其实现类对象并传入service(ServletRequest req,ServletResponse res)方法中。以下我们所说的HttpServletRequest对象指的是容器提供的HttpServletRequest实现类对象。
-
HttpServletRequest对象的主要功能有
-
获取请求参数
-
在请求域中绑定数据
-
将请求转发给另外一个URL地址
HttpServletResponse
该接口是ServletResponse接口的子接口,封装了http响应的相关信息,由Servlet容器创建其实现类对象并传入service(ServletRequest req,ServletResponse res)方法中。以下我们所说的HttpServletResponse对象指的是容器提供的HttpServletResponse实现类对象
主要功能
使用PrintWriter对象向浏览器输出数据
实现请求的重定向
- 在登陆页面中录入用户名和密码,点击登录按钮提交登录请求
- 在loginservlet中通过request对象获取到页面提交的用户名和密码
- 调用Dao对象,将用户提交的用户名和密码与用户表的数据进行匹配
- 得出结果,完成响应
public class LoginSevlet extends HttpServlet{
常用的方法,doget dopost service
第一种方法 重写
doget:处理客户端的get'方式的请求
dopost:处理客户端的post方式的请求
第二种方法:重写
service:根据具体的请求方法去调用对应的doget dopost方法
@Override
protected void doGet(HttpServlet req,HttpServeletResponse resp)throws ServletException,IOException{
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException{
//登录功能的实现
System.out.println("登录请求来!!!");
//获取到用户输入的用户名的密码,进行登陆业务的处理
//获取用户输入的用户名和密码
String username = req.getParameter("username");
String password = req.getParameter("password");
//调用Dao对象,将用户提交的用户名和密码与数据库的用户表的数据进行匹配
UserDao dao = new UserDaoJdbcImpl();
User user = dao.findUserByUsernameAndPassword(username,password);
//设置响应头信息
resp.setContentType("text/html;charset=utf-8");
//获取输出流
PrintWriter out = resp.getWriter();
if(user==null){out.println("登陆失败!!");
else out.println("登陆成功");
out.close();
登陆功能实现-页面中错误提示
设计的技术知识点
- 请求重定向
- 请求转发
- jsp页面
- el表达式
- servlet接收到浏览器端请求并处理完成后,给浏览器端一个特殊的响应,这个特殊的相应要求浏览器去请求一个新的资源,整个过程中浏览器端会发出两次请求,且浏览器地址栏会改变为新资源的地址。
- 重定向的情况下,原servlet和目标资源之间就不能共享请求域数据了
- 实现重定向的api
response.sendRedirect("重定向地址");
请求转发
- Servlet接受到浏览器请求后,进行一定的处理,先不进行响应,而是在服务器端内部转发给其他Servlet程序继续处理。在这种情况下浏览器只发出了一次请求,浏览器地址栏不会发生变化,用户也感知不到请求被转发了
- 转发请求的servlet和和目标servlet共享同一个request对象
- 实现转发的api
RequestDispatcher rd=request.getRequestDispatcher("转发的地址"):
rd.forward(request,response);
重定向与转发的区别
Jsp页面
- Jsp全称Java Server Pages,顾名思义就是运行在Java服务器中的页面,也就是在我们Javaweb中的页面
涉及的技术知识点
Ajax
- Ajax是Asynchronous Javascript And Xml的简称。直译为,异步的js和xml
- ajax的实际意义是,不发生页面跳转、异步载入内容并改写页面内容的技术
- ajax也可以简单地理解为通过js向服务器发送请求
- 同步处理
在ajax出现之前,我们访问互联网时一般都是同步请求,也就是当我们通过一个页面向服务器发送一个请求,在服务响应结束前,我们的整个页面是不能操作的,也就是直观来看她是卡住不动的 - 异步处理
异步处理指的是我们在浏览网页的同时,通过ajax向服务器发送请求,发送请求的过程中我们浏览网页的行为并不会受到影响,甚至主观上感知不到在向服务器发送请求。当服务器正常响应请求后,相应信息会直接发送到ajax,ajax会根据服务器相应的内容做一些操作
- XMLHttpRequest对象是ajax中非常重要的对象,所有的ajax操作都是基于该对象的。XMLHTTPRequest对象用来封装请求报文,我们向服务器发送的请求信息全部都需要封装到该对象中。这里需要稍微注意一下,XMLHttpRequest对象并没有成为标准,但是现在的主流浏览器都支持该对象
cookie
- Http是无状态协议,服务器不能记录浏览器的访问状态,也就是服务器不能区分中两次请求是否有一个客户端发出,这样的设计严重阻碍的web程序的设计。如:在我们进行网购时,买了一条裤子,又买了一个手机。由于http协议是无状态的,如果不通过其他手段,服务器是不知道用户到底买了什么。
- cookie实际上就是服务器保存在浏览器上的一段信息。而浏览器有了cookie之后,每次向服务器发送请求时时都会同时将该信息发送给服务器,服务器收到请求之后,就可以根据该信息处理请求。
- cookie的用途
网上商城购物车
用户登陆状态的保持 - cookie的限制性:
1.cookie作为请求或响应报文发送,无形中增加了网络流量
2.cookie是明文传送的安全性差
3.各个浏览器对cookie有限制,使用上有局限
4.cookie的具体使用
①创建cookie
cookie mycookie = new cookie("username","zhangsanfeng");
mycookie.setPath("设置cookie的路径");
mycookie.setMaxAge("设置cookie的时间");
response.addcookie(mycookie);
cookie[] cookies = request.getcookies();
Session
- 使用cookie有一个非常大的局限,就是如果cookie很多,则无形的增加了客户端与服务端的数据传输量。而且由于浏览器对于cookie数量的限制,注定我们不能在cookie中保存过多的信息,于是session出现
- session的作用就是在服务器端保存一些用户的数据,然后传递给用户一个名字为JESSIONID的cookie,这个JESSIONID对应整个服务器中的一个session对象,通过它就可以获取到保存用户信息的session
- session的工作原理:
①:session的创建时机是在request.getSession()方法第一次被调用时
②Session被创建后,同时还会有一个名为JseSsionid的cookie被创建
③整个cookie的默认时效就是当前会话
④见到来说,session机制也是依赖于cookie来实现的 - session的具体使用
HttpSession session = request.getSession();
- session的时效问题
session默认有效时间为30分钟,可以在服务器的web.xml配置中修改
URL重写
- 整个会话控制技术体系中,保持jsessionid的值主要通过cookie实现。但cookie在浏览器端可能会被禁用我们还需要一些备用技术手段,例如:url
- URL重写其实就是将JESSIONID的值以固定格式附着在URL地址后面,以实现保持JESSIONID,进而保持会话状态。这个固定格式就是:URL;jsessionid=xxxxxx
- 实现方式:
String url = "targetServlet"; String encodeURL = response.encodeURL(url); response.sendRedirect(encodeURL);主页面访问权限控制 设计知识点 ~过滤器
过滤器
- 对于web应用来说,过滤器是一个驻留在服务器中web组件,他可以截取客户端和web资源之间的请求和响应信息。web资源可能包括servlet、jsp、html页面等
- 当服务器收到特定的请求后,会先将请求交给过滤器,程序员可以在过滤器中对请求信息进行读取修改等操作,然后将请求信息再发送给目标资源。目标资源做出响应后,服务器会再次将响应转交给过滤器,在过滤器中同样可以对相应信息做一些操作,然后将响应发送给服务器
- 也就是在过滤器可以在web资源收到请求之之前,浏览器收到响应之前,对请求和响应信息做一些相应的操作。
- 在一个web应用中可以部署多个过滤器,多个过滤器就组成了一个过滤器链,请求和响应必须经过多个过滤器后才能达到目标。
1.通过实现Filter接口完成过滤器的开发
2.Filter在web.xml中的配置
- 再进入主页面必须进行登陆状态的判断如果未登录状态不允许进入主界面
- 登陆状态的判断再通过过滤器实现,更为通用,而且可拔插
- Listener用于监听javawbe程序中的事件
- 例如:servletContext、httpsession、servletrequest的创建、修改和删除
- 监听器的类型分为 1.生命周期 2.数据绑定
- xml-可扩展标记语言extensible markup language
- 由w3
- xml的使命,就是一一个统一的格式,组织有关系的数据,为不同平台下的应用程序服务
- xml用来传输和存储数据,html用来显示数据
- xml没有预定义标签,均为自定义标签
1.配置文件javaweb的web.xml c3p0中的c3p0-config.xml
2.数据交换格式 Ajax webservcie
3.数据存储 保存关系型数据
- xml解析是指通过解析器读取xml文档,解释语法,并将文档转化成对象
- 常用的解析方式
DOM(document Object Model)
SAX(Simple api for xml) - DOM和sax解析的对比
- AJAX一开始使用的是xml的数据格式,xml的数据格式非常简单清晰,容易编写,但是由于xml中包含了过多的标签,以及十分复杂的结构,解析起来也相对负责,所以目前来讲ajax中已经几乎不使用xml来发送数据了,取而代之的时JSON
- JSON是JavaScipt Object Notation的缩写,是js提供的一种数据交换格式
- JSON对象本质上就是一个JS对象,但是这个对象比较特殊,它可以直接转换为字符串,在不同语言中进行传递,通过工具有可以转化成其它语言中的对象。
- 有如下一个JSON对象:
①{“name”:“sunwukong”,“age”:18,“address”:“beijing”}
②这个对象中有三个属性name age address
③如果将该对象使用单引号引起,那么它就变成了一个字符串
④变成字符串后有一个好处,就是可以在不同语言之间传递
⑤比如,将json作为一个字符串发送给servlet,在java中就可以把json字符串转化为一个java对象。
1.字符串 “字符串” 注意:不能使用单引号
2. 数字:123.4
3. 布尔值 true false
4. null值 null
5. 对象 {“name”:“sunwukong”,“age”:18}
- 在java中可以从文件读取json字符串,也可以是客户端发送的json字符串,所以第一个问题,我们先来看如何将一个json字符串转换成一个java对象
- 首先解析json字符串我们需要导入第三方的工具,目前主流的解析json的工具大概有三种 gson
- gson是google公司出品的解析json工具,使用简单解析性能好
- gson中解析json的核心是gson的咧,解析操作都是通过该类实现
- json字符串转化为对象
String json = "{"name":"zhangsan","age":18}";
Gson gson = new Gson();
Map stuMap = gson.fromJson(json,Map.class);
Student fromJson = gson.fromJson(json,Student.class);



