Java EE基础知识学习(五)

来源:互联网 发布:大数据时代马云 编辑:程序博客网 时间:2024/04/25 14:47

在之前的学习中,我们主要学习的是JSP的一些使用方法,在这一节中我们将学习关于Servlet的编写。

1、Servlet简单编写

JSP的本质就是Servlet,使用JSP编写我们的Web应用可以帮助我们简化应用表现层的代码,如果我们直接使用Servlet来编写和JSP同样的一个页面,你会发现我们需要使用大量的out语句来给浏览器输出HTML语句。因此MVC规范出现以后,Servlet的责任明确下来,Servlet仅仅作为控制器使用,不需要去生成表现层的代码,这样就让我们的Servlet编写变的更简便了。

例如下面的代码:
a.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"    pageEncoding="ISO-8859-1"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body>form id="form1" action="b.jsp" method="post">用户名:<input type="text" name="username">密码:<input type="text" name="password"><input type="submit" value="登录"></form></body></html>

b.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"    pageEncoding="ISO-8859-1"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body><%String username=request.getParameter("username");String password=request.getParameter("password");%></form></body></html>

c.java:

public class Servlet extends HttpServlet{    public void service(HttpServletRequest request,HttpServletResponse response)throws ServletException,java.io.IOException    {        request.setCharacterEncoding("GBK");        response.setContentType("text/html;charSet=GBK");        String username=request.getParameter("username");        String password=request.getParameter("password");          out.println("\r\n");          out.println("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n");          out.println("<html>\r\n");          out.println("<head>\r\n");          out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\">\r\n");          out.println("<title>Insert title here</title>\r\n");          out.println("</head>\r\n");          out.println("<body>\r\n");          out.println("用户名"+username);          out.println("密码"+password);          out.println("</body>\r\n");          out.println("</html>");    }}

在上述的三个文件中,a.jsp中我们定义了一个表单,让用户输入用户名和密码,然后b.jsp可以获取到用户的输入,如果我们想直接编写一个Servlet获取用户的输入并且将他们输出到浏览器中,那我们就可以用c.java的这段代码。
在c.java的代码中,首先我们声明了一个类叫Servlet并且它继承了HttpServlet,在这个类中我们重写service方法,在service方法中我们获取了用户的用户名和密码并且输出到浏览其。通过这段代码我们可以看出,如果我们要用Servlet同时负责表现层的代码,会非常麻烦,每一行代码都要用out输出流输出到浏览器中才能实现,所以我们在编写Servlet时尽量避免编写表现层的代码。

2、Servlet的配置

Servlet主要有两种配置方式:

  1. 在Servlet类中使用@WebServlet注解进行配置。
  2. 在web.xml中进行配置。

当我们使用Servlet类的@WebServlet注解进行配置的时候,将会用到以下几条属性:

  1. asyncSupported:指定该Servlet是否支持异步操作模式。
  2. displayName:指定该Servlet的显示名。
  3. initParams:给该Servlet配置参数。
  4. loadOnStartup:将该Servlet配置为load-on-startup的Servlet。
  5. name:指定该Servlet的名称。
  6. urlPatterns/value:都是用来指定该Servlet处理的URL。

当我们使用注解配置Servlet时,要注意不要在web.xml的根元素中指定metadata-complete=”true”,同时不要在web.xml中配置这个Servlet。

如果我们要用web.xml配置,则要配置Servlet的名字和URL,分别对应于元素和元素。要想让我们的Servlet页面能够响应用户的请求,我们必须要配置URL。

例如下面的一段代码就是用来在web.xml中配置一个Servlet的:

<?xml version="1.0" encoding="UTF-8"?><web-app    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instancehttp://www.springmodules.org/schema/cache/springmodules-cache.xsd http://www.springmodules.org/schema/cache/springmodules-ehcache.xsd"    xmlns="http://xmlns.jcp.org/xml/ns/javaee"    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"    id="WebApp_ID" version="3.1">    <display-name>WebTest</display-name>    <servlet>        <servlet-name>servlet</servlet-name>        <servlet-class>Servlet</servlet-class>    </servlet>    <servlet-mapping>        <servlet-name>servlet</servlet-name>        <url-pattern>/ser</url-pattern>    </servlet-mapping></web-app>

3、JSP/Servlet的生命周期

在Servlet中主要有三个函数,分别是init、service和destroy函数,当客户端第一次请求一个Servlet的时候,我们就会创建一个Servlet的实例并且使用init方法进行初始化并且使用service方法响应用户,接下来每当客户端请求一次这个Servlet,我们都用调用一次service方法来响应用户,直到调用destroy方法销毁了这个实例,通常我们在关闭Web应用的时候调用destroy方法。以上就是一个Servlet的生命周期,但是还有一种Servlet并不是在用户请求时才创建实例,而是在Web应用启动的时候就创建了实例,这种Servlet我们叫做load-on-startup Servlet。
要想配置一个Servlet成为load-on-startup Servlet,我们可以在web.xml中用以下代码配置:

    <servlet>        <load-on-startup>1</load-on-startup>    </servlet>

或者使用@WebServlet注解配置:

@WebServlet(loadOnStartup=1)

4、Servlet配置参数

配置Servlet时还可以增加额外的配置参数。具体使用方法如下:

在@WebServlet注解中配置:

@WebServlet(name="servlet",urlPatterns={"/ser"},    initParams={        @WebInitParam=(name="username",value="dasyang"),        @WebInitParam=(name="password",value="12312")})    }

然后可以使用以下代码获取参数:

String username=config.getInitParameter("username");String password=config.getInitParameter("password");

或者我们可以在web.xml中配置额外参数:

    <servlet>        <init-param>            <param-name>username</param-name>            <param-value>dasyang</param-value>        </init-param>           <init-param>            <param-name>password</param-name>            <param-value>494894</param-value>        </init-param>    </servlet>
0 0
原创粉丝点击