一、什么是servlet
servlet就是在服务器端运行的java程序,它可以接收用户的请求并作出响应。
二、为什么要用servlet
从servlet的概念我们就可以看出,它最重要的作用就是接收用户的请求,并作出响应,有了servlet,我们做的html页面就不再是静态页面了,就可以实现交互功能,这才是我们开发的目的。
三、常用方法
我们在创建servlet项目时,它会自动的继承HttpServlet类,而且必须要覆盖重写它下面的doGet方法和doPost方法,而doPost方法最终也是调用doGet方法,而doGet方法就是我们需要重写的方法,怎么获取用户的请求,并作出响应,这就要说一下这个方法里面两个非常重要的参数:requset(请求)response(响应)。
1.ServletRequest(获取客户端请求的数据)接口常用方法
①Svoid setCharacterEncoding(String charset) //设置请求体的字符编码,这个方法常用来处理乱码,如果不设置字符编码,展示给用户的数据会变成乱码
①String getParameter(String name)//返回指定请求参数的值
页面1:用户传入数据,并发出请求
页面2:服务器接收数据,并作出响应
如上图所示,此方法主要就是获取用户传递过来得数据,并进行处理,此方法传入的参数必须是html页面中的name名,否则是接不到值得。
②RequestDispatcher getRequestDispatcher( String path )//返回指向指定路径的请求分发对象(也就是我们常说得转发)
通过上面的方法,我们可以获取到用户所填的数据,然后做完判断之后需要响应用户界面,此时就可以用转发来实现这个功能,需要注意的是,如果只是调用这个方法,是不能带着数据跳转的,需要加上forward方法,将我们的请求和响应一起带去展示界面,但是转发有一个缺点就是会让用户看到不应该看到的url,所以我们一般不用整个方法。
③String[ ] getParameterValues (String name )//返回指定请求参数的全部值
在业务中肯定会遇到多选框的情况,此时传递过来的值的name都是一样,但是却有多条数据,如果再用 getParameter 这个方法肯定不合适,此时就会用到这个方法,来处理。
图1:用户选择多条数据
图2:调用此方法,来创建一个数组接收多条数据
④HttpSession getSession( )//获取此次请求的session对象,如果没有就会新建一个session,session中有两个很重要的方法,就是 session.setAttribute(String name, Object object)和session.getAttribute(String name);分别来向session会话中存数据和从session会话中取值,这两个方法的使用很简单,只要在此次session中,就可以从其他页面获取数据
需要注意的是有几种情况会让我们的session失效:
a.浏览器关闭:如果用户将浏览器关闭,那这次的session会话就会失效
b.服务器关闭:同理,如果服务器关闭,此次session会话也会失效
c.超时:我们的session会话的默认存在时长是30分钟,可以通过session.setMaxInactiveInterval(Long second)方法来设置session会话存在时长
d.会话失效:可以手动调用session.invalidate();方法来让session会话失效
⑤Cookie[ ] getCookies( )//获取返回客户端在此次请求中发送的所有cookie对象,
cookie也是一种会话技术,cookie会话的使用方法和session会话类似,在response中有void addCookie ( Cookie cookie )来向我们的cookie对象中添加数据,然后再调用方法来获取cookie中的数据。
图1:将数据存储在cookie中,同样也可以使用cookie1.setMaxAge(Long second)来设置cookie会话存在的时长
图2:获取cookie中的数据
cookie会话的使用也是比较简单的,我们可以通过这个会话技术来实现免登录,因为它会将数据存在我们的浏览器端。这里我做了一个简单的免登录的例子:从浏览器端是可以看到我们的账户名和密码的,这也暴露了cookie的另一个弊端,那就是不安全。
session和cookie同为会话技术,他们之间还有有很多的区别的:
a.存储位置不同(sion保存在服务器,cookie保存在浏览器)
b.存储类型不一样(cookie中保存的是字符串,sion中保存的是object类型)
c.sion会话结束数据也会销毁,而cookie能长时间保存数据
d.安全性(cookie保存在浏览器,相对来说不安全)
⑥Object getAtrribute(String name)//获取名称为name的属性
⑦void setAttribute(String name,Object object)//在请求中保存名为name的属性
上面这两个方法的使用和session对象中的两个方法的使用类似,一个是往我们的请求对象中赋值,一个是从我们的请求对象中取值,我们的servlet中也也有这两个方法,这三者之间的区别就是作用的范围不一样:
session中的取值赋值只在此次session会话中有效,request中的取值和赋值只在此次请求范围内有效,二servlet中的方法则在整个servlet项目中有效
2.ServletResponse(设置响应参数和向客户端发送响应数据 )接口常用方法
①void setCharacterEncoding (String charset )//设置响应的字符编码
②void setContentType ( String type )//设置发送到客户端的响应的内容类型
这两个方法的作用就是用来处理乱码,用法如下图所示:
③PrintWriter getWriter ( )//返回PrintWriter对象,用于向客户端发送文本,具体用法如下图所示:
④void addCookie ( Cookie cookie )//这个方法刚在cookie模块介绍过,这里就不再赘述了
⑤void sendRedirect(String location)//发送一个临时的重定向响应到客户端,以便客户端访问