`

31、servlet--开发方式

    博客分类:
  • mvc
 
阅读更多
servlet:利用java技术开发动态网页的技术,是学习javaweb的基础。
1、他是用web容器调用和执行的
2、他是java语言写de
3、按照servlet规范编写
4、功能强大,能完成所有服务器端的所有需求
5、是jsp的基础


servlet的生命周期
1、web容器首先去检查是否已经装载并创建了该servlet的实例;
2、装载并创建该servlet的一个实例
3、调用实例的init()方法;
4、创建HttpServletRequest和HttpServletResponse实例,调用servlet的service()方法,请求和响应作为service()方法的参数。
5、web应用/容器 被停止或重启,卸载之前调用Servlet的destroy()方法;

开发Servlet的3中方法:
1、实现Servlet接口(servlet-api.jar)
2、继承HttpServlet
3、继承GenericServlet

public class MyServlet implements Servlet{
    //销毁实例,只调用一次
	public void destroy() {
		System.out.println("摧毁前调用");
	}

	public ServletConfig getServletConfig() {
		System.out.println("不会执行");
		return null;
	}

	public String getServletInfo() {
		System.out.println("不会执行");
		return null;
	}
    //初始化servlet,将其实例存放在内存中,只调用一次    
	public void init(ServletConfig arg0) throws ServletException {
		System.out.println("最先执行");
	}
    //该方法在每次请求时都会调用,请求和响应作为参数
	public void service(ServletRequest arg0, ServletResponse arg1)
			throws ServletException, IOException {
		System.out.println(arg0.getLocalPort());
		System.out.println("再次调用");
		//如何在浏览器中显示?
		arg1.getWriter().println("ok");
		arg1.getWriter().println(arg0.getLocalPort());
	}
}

根据Servlet规范,需要部署Servlet,部署在web.xml文件中
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>org.nick.server.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/test1</url-pattern>
</servlet-mapping>
注:每次localhost:8182/web/test1这个请求时,都会调用org.nick.server.MyServlet里面的service()方法,第一次调用和关闭|重启web容器时,会调用init()和destroy()方法。
web容器启动时,会检查该servlet是否存在实例。

执行结果:
最先执行
8182
再次调用
8182
再次调用
信息: Stopping service Catalina
摧毁前调用

页面输出:
ok
8182

联想:一个请求需要单独写个Servlet?


使用继承GenericServlet 需要复写service()方法,也是一个请求需要一个Servlet
  <servlet>
		<servlet-name>MyGenericServlet</servlet-name>
		<servlet-class>org.nick.server.MyGenericServlet</servlet-class>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>MyGenericServlet</servlet-name>
		<url-pattern>/test2</url-pattern>
	</servlet-mapping>

public class MyGenericServlet extends GenericServlet {
	@Override
	public void service(ServletRequest arg0, ServletResponse arg1)
			throws ServletException, IOException {
		arg1.getWriter().print("test2");
		
	}
}



使用继承HttpServlet,需要复写doGet()和doPost()方法,也是一个请求一个Servlet
	 <servlet>
		<servlet-name>MyHttpServlet</servlet-name>
		<servlet-class>org.nick.server.MyHttpServlet</servlet-class>
	</servlet>

public class MyHttpServlet extends HttpServlet{
	public void doGet(HttpServletRequest req,HttpServletResponse rep){
		doPost(req,rep);
	}
    public void doPost(HttpServletRequest req,HttpServletResponse rep){
    	try {
    		System.out.println(req.getParameter("name"));
		rep.setCharacterEncoding("gbk");
		rep.getWriter().print("你好");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
}

get与post请求的区别
1、post比较安全
2、get数据<2k,post理论无限制,最好<64k
3、get速度快
4、get保留uri地址,利于收藏


注:
1、一个servlet可以配置多个servlet-mapping
2、使用通配符*的灵活应用;
3、Servlet被加载到内存中后,直到web应用|容器重启或停止,才被释放,在内存中以单例存在
4、一个变量被多个用户操作时,应当添加同步机制 :
   将其设置为成员变量
   public class MyHttpServlet extends HttpServlet{
       int s = 2;
      doPost(req,rep){
          synchronized(this){ s--;}
     }
     如果设置为局部变量,是没用的,每次调用方法,局部变量又恢复原来的值了。
5、<load-on-startup>配置,在web启动后,并没有直接将Servlet加载到内存中,而是有请求到该Servlet时,才将其放入内存中,配置该元素后,就是在web容器启动时,加载到内存中,j见spring的配置信息。
分享到:
评论

相关推荐

    javax.servlet-api-3.0.1.jar中文文档.zip

    api-***.jar中文文档.zip,java,javax.servlet-api-***.jar,javax.servlet,javax.servlet-api,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,javax,servlet,api,中文API文档,手册,开发手册,使用手册,...

    servlet-api.jar 下载地址

    现在,开发者更倾向于使用Spring MVC或Spring WebFlux等高级框架,它们提供了更简洁、更强大的Web开发方式,但底层依然基于Servlet API。 总的来说,servlet-api.jar是Java Web开发的基础,它定义了Servlet的生命...

    javax.servlet-api-4.0.1.jar中文文档.zip

    api-***.jar中文文档.zip,java,javax.servlet-api-***.jar,javax.servlet,javax.servlet-api,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,javax,servlet,api,中文API文档,手册,开发手册,使用手册,...

    javax.servlet-api-3.1.0.jar中文文档.zip

    api-***.jar中文文档.zip,java,javax.servlet-api-***.jar,javax.servlet,javax.servlet-api,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,javax,servlet,api,中文API文档,手册,开发手册,使用手册,...

    javax.servlet-api-3.1.0.jar

    在Java Web开发中,`javax.servlet-api-3.1.0.jar`是一个至关重要的组件,它代表了Servlet API的3.1.0版本,是实现服务器端动态网页处理的核心库。Servlet API是Java EE规范的一部分,由Java Community Process (JCP...

    servlet-api 各种版本

    这些版本的演变展示了Servlet-API如何逐步适应Web开发的变革,从简单的请求响应模型发展到支持更复杂的应用场景,如异步处理、WebSocket通信等。了解和掌握不同版本间的差异,有助于开发者根据项目需求选择最合适的...

    servlet-api-3.0.jar包

    Servlet-api-3.0.jar是Java Servlet API的第三版实现,它是开发Web应用程序的重要组成部分,特别是在基于Java的服务器端编程中。这个库包含了用于创建和管理HTTP服务端点的接口和类,允许开发者构建动态、交互式的...

    javax-servlet-api-3.0.1.jar

    6. `javax.servlet.annotation`包:包含了各种注解,比如`@WebServlet`、`@WebFilter`和`@WebListener`,使得开发者可以通过注解方式声明Servlet、过滤器和监听器,简化了web.xml配置文件的编写。 7. `javax....

    javax.servlet-api-4.0.0-b07.jar中文文档.zip

    api-***.jar中文文档.zip,java,javax.servlet-api-***.jar,javax.servlet,javax.servlet-api,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,javax,servlet,api,中文API文档,手册,开发手册,使用手册,...

    javax.servlet-api-3.1-b01.jar中文文档.zip

    api-***.jar中文文档.zip,java,javax.servlet-api-***.jar,javax.servlet,javax.servlet-api,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,javax,servlet,api,中文API文档,手册,开发手册,使用手册,...

    servlet-api.jar

    servlet-api,开发servlet必须的jar包,快来下载!!

    javax.servlet-api-4.0.0-b01.jar中文文档.zip

    api-***.jar中文文档.zip,java,javax.servlet-api-***.jar,javax.servlet,javax.servlet-api,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,javax,servlet,api,中文API文档,手册,开发手册,使用手册,...

    javax.servlet-api-3.1.0.jar javax.el-api-2.2.4.jar javax.el-2.2.4.jar

    在IT行业中,尤其是在Java Web开发领域,`javax.servlet-api`和`javax.el`库是至关重要的组件。这些库主要用于实现Servlet规范和表达式语言(EL)功能,它们为开发人员提供了与服务器交互以及处理HTTP请求的能力。...

    javax.servlet-api-3.1-b04.jar中文文档.zip

    api-***.jar中文文档.zip,java,javax.servlet-api-***.jar,javax.servlet,javax.servlet-api,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,javax,servlet,api,中文API文档,手册,开发手册,使用手册,...

    servlet-2_5-api.zip_servlet-2_5-api.jar

    Servlet 2.5 API是Java Web开发中的一个重要组成部分,它为构建动态Web应用程序提供了一组标准接口和类。这个API定义了服务器端如何处理HTTP请求并返回响应的规范。在这个"**servlet-2_5-api.zip**"压缩包中包含的"*...

    servlet-api.jar和jsp-api.jar文件

    Servlet-api.jar和jsp-api.jar是Java Web开发中两个非常重要的库文件,它们包含了Servlet和JSP(JavaServer Pages)的相关API,使得开发者可以构建动态Web应用程序。这两个文件通常由Java EE(Enterprise Edition)...

    javax.servlet-api-4.0.0-b04.jar中文文档.zip

    api-***.jar中文文档.zip,java,javax.servlet-api-***.jar,javax.servlet,javax.servlet-api,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,javax,servlet,api,中文API文档,手册,开发手册,使用手册,...

    servlet-api.jar 及源文件

    Servlet是Java编程语言中实现动态网页的一种方式,它接收HTTP请求并返回响应。javax.servlet包下的HttpServlet类是所有Servlet的基类,开发者通常会继承这个类来创建自己的Servlet实现。 具体来说,HttpServlet类...

    Servlet-api setvlet文档

    Servlet-api是Java Web开发中的核心组件,主要用于构建动态web应用程序。Servlet是一种Java程序,它可以接收并响应来自Web客户端(如浏览器)的请求。在Servlet-api文档中,包含了Servlet规范、接口和类的详细说明,...

    javax.servlet-api-4.0.1.jar

    Servlet API是一组接口和类,用于定义服务器端应用程序与Web服务器之间的交互方式。4.0.1版本在前一个版本的基础上进行了一些增强和优化,例如更好的异步处理、HTTP/2支持以及对WebSocket的改进等。`javax.servlet-...

Global site tag (gtag.js) - Google Analytics