java serlvet 是运行在Web服务器或应用服务器上的程序,它是作为来自Web浏览器或者其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间的中间层。Servlet 可以使用 javax.servlet 和 javax.servlet.http 包创建,它是 Java 企业版的标准组成部分,Java 企业版是支持大型开发项目的 Java 类库的扩展版本。
Java Servlet 就像任何其他的 Java 类一样已经被创建和编译。在您安装 Servlet 包并把它们添加到您的计算机上的 Classpath 类路径中之后,您就可以通过 JDK 的 Java 编译器或任何其他编译器来编译 Servlet。
Servlet的主要功能在于交互地浏览和修改数据,生成动态Web内容,这个过程为:
// 继承HttpServlet类
public class Demoservlet extends HttpServlet {
/**
*处理get方法发送够来的请求
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
/**
*处理Post 方法发送过来的请求
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
// 实现Servlet 接口
class Demo1Servlet implements Servlet{
/**
*当Servlet第一次被创建对象时执行该方法,该方法在整个生命周期中只执行一次.
*/
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
/**
*返回个ServletConfig对象,可以得到web.xml文件中的信息。
*/
@Override
public ServletConfig getServletConfig() {
return null;
}
/**
*对客户端响应的方法,该方法会被执行多次,每次请求该servlet都会执行该方法;
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
/**
*它提供有关servlet的信息,如作者、版本、版权
*/
@Override
public String getServletInfo() {
return null;
}
/**
*当servlet被销毁时执行,只执行一次。
*/
@Override
public void destroy() {
}
}
// 继承GenericServlet,这是一个抽象类 必须重写其中的service方法。
class Demo3Servlet extends GenericServlet{
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
}
}
ServletContext: 是一个全局的储存信息的空间,服务器开始就存在,服务器关闭才释放。
获取方式
//1
ServeltContext sc = request.getServletContext();
// 2
sc = this.getServletContext();
// 3
sc = request.getSession().getServletContext();
// 实现请求派发
ServeltContext sc = request.getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher("/servlet/ServletContextDemo");
rd.forward(request,response);
Session:服务器会为每个会话创建一个session对象,所以session中的数据可供当前会话中所有servlet共享。
Cookie :是客户端技术,程序把每个用户的数据以cookie形式写个各自的浏览器,当用户使用浏览器访问web资源时就会带着各自的数据去访问。
主要方法:
// 构造方法
Cookie cookie = new Cookie(String name, String value);
// 得到名称
cookie.getName();
// 得到值
cookie.getValue();
//设置值
cookie.setValue(String newvalue);
//设置存活时间,int 秒数
cookie.setMaxAge(int seconeds);
//设置有效路径,当访问该路径时才会带上这个cookie
cookie.setPath(String uri);
// 删除cookie
cookie.setMaxAge(0);
//将cookie保存在客户端浏览器上
response.addCookie(cookie);
session是服务器端对象,保存在服务器端。并且服务器可以将创建session后产生的sessionid通过一个cookie返回给客户端,以便下次验证。
当禁用了Cookie之后进行url地址重写:使用方法:
response.encodeRedirectURL(String url) //用于对sendRedirect方法后的url地址进行重写。
response.encodeURL(String url)//用于对表单action和超链接的url地址进行重写
会话:用户打开浏览器会话开始,直到关闭浏览器会话才会结束。一次会话期间只会创建一个session对象。
获取方式
// 第一次调用时就会创建一个新的session
HttpSession session = request.getSession();
//方法
// 用于判断session是不是重写创建的
isNew()
//设置值
session.setAttribute("key",value);
// 获取值
session.getAttribute("key");
// 删除值
session.removeAttribute("key");
//销毁session
session.invalidate();
request:是表示一个请求,只要发出一个请求就会创建一个request,它的作用域:仅在当前请求中有效。
常用方法:
Enumeration reqHeadInfos = request.getHeaderNames()
获取所有的请求头;三大域对象,它们都可以看做是map,都有getAttribute()/setAttribute()方法。
客户端通过URL地址访问web服务器中的资源,如果Servlet程序想被外界访问,必须把sevlet程序映射到URL地址上,可以使用工作在web.xml文件中配置
和
元素。
<servlet>
<servlet-name>ServletClassNameservlet-name>
<servlet-class>com.learn.javaweb.ServletDemo1servlet-class>
<load-on-startup>1load-on-startup>
<init-param>
<param-name>nameparam-name>
<param-value>contextparam-value>
init-param>
<context-param>
<param-name>urlparam-name>
<param-value>jdbc:mysql://localhost:3306/dataparam-value>
context-param>
servlet>
<servlet-mapping>
<servlet-name>ServletClassNameservlet-name>
<url-pattern>/urlpattrensurl-pattern>
servlet-mapping>
<servlet-mapping>
<servlet-name>ServletClassNameservlet-name>
<url-pattern>/urlpattrens1.htmlurl-pattern>
servlet-mapping>
<servlet-mapping>
<servlet-name>ServletClassNameservlet-name>
<url-pattern>/*url-pattern>
servlet-mapping>
<servlet-mapping>
<servlet-name>ServletClassNameservlet-name>
<url-pattern>/url-pattern>
servlet-mapping>
<session-config>
<session-timeout>15session-timeout>
session-config>
注:如果"/“是给服务器用的,则代表当前的web工程,如果”/"是给浏览器用的,则代表webapps目录。
//请求派发,此处"/"用于服务器端,"/"表示web工程
this.getServletContext().getRequestDispatcher("/ingdex.jsp").forward(request,response);
//重定向,表示再次请求服务器,"/"代表的webapps目录;
response.sendRedirect("/javaProject/index.jsp");
//注:在jsp中${pageContext.request.contextPath}得到就是"/javaProject";