• 【Servlet】Servlet应用的get、post访问及和JSP的配合使用


    Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。 

    它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。 

    Servlet是位于Web服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同。

    Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。

    Servlet实例化过程

    1. servlet容器负责创建servlet的一个实例(在第一次请求servlet的时候).

    2. 容器调用该实例的init()方法完成初始化工作.

    3. 如果容器对该servlet有请求,则调用此实例的service()方法,service()方法根据请求类型(get还是post)决定调用doXXX()方法.

    4. 当web应用被终止时,容器在销毁本实例前调用它的destroy()方法.

    5. 销毁并标记该实例以供作为垃圾收集.

    在servlet生命周期中,servlet的初始化和和销毁阶段只会发生一次。

    而service方法执行的次数则取决于servlet被客户端访问的次数。

    Servlet如何处理请求

    当用户发送一个请求到某个Servlet的时候,Servlet容器会创建一个ServletRequst和ServletResponse对象.

    在ServletRequst对象中封装了用户的请求信息,然后Servlet容器把创建好的ServletRequst和ServletResponse对象传给用户所请求的Servlet,Servlet把处理好的结果写在ServletResponse中,最后Servlet容器把响应结果传给用户。

    一个简单的Servlet

    package com.app.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class Jue extends HttpServlet{
    
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    			throws ServletException, IOException {
    		resp.setContentType("text/html; charset=utf-8");
    		PrintWriter out = resp.getWriter();
    		out.print("这是一个get");
    		out.close();
    	}
    
    	@Override
    	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    			throws ServletException, IOException {
    		resp.setContentType("text/html; charset=utf-8");
    		PrintWriter out = resp.getWriter();
    		out.print("这是一个post");
    		out.close();
    	}
    
    	@Override
    	public void destroy() {
    		// TODO Auto-generated method stub
    		super.destroy();
    	}
    
    	@Override
    	public void init() throws ServletException {
    		// TODO Auto-generated method stub
    		super.init();
    	}
    
    }
    

    配置Servlet的web.xml

    servlet和servlet-mapping中的servlet-name要保持一致。

    url-pattern即是该servlet的访问路径。

    <!--servlet逻辑名-->
    	<servlet>
    		<servlet-name>Jue</servlet-name>
    		<servlet-class>com.app.servlet.Jue</servlet-class>
    	</servlet>
    <!--servlet映射-->
    	<servlet-mapping>
    		<servlet-name>Jue</servlet-name>
    		<url-pattern>/jue.eee</url-pattern>
    	</servlet-mapping>

    Servlet的get访问

    Servlet默认的即为get访问。

    在地址栏输入:http://localhost:8888/WebDemo/jue.eee


    Servlet的post访问

    Servlet的post访问必须建立在JSP的表单的基础上。

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'MyJsp.jsp' starting page</title>
        
    	<meta http-equiv="pragma" content="no-cache">
    	<meta http-equiv="cache-control" content="no-cache">
    	<meta http-equiv="expires" content="0">    
    	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    	<meta http-equiv="description" content="This is my page">
    	<!--
    	<link rel="stylesheet" type="text/css" href="styles.css">
    	-->
    
      </head>
      <body>
        This is my JSP page. <br>
    	<form method="post" action="user.eee">
    		<table cellspacing="5" align="center" width="840" border-collapse="collapse">
    			<tr><td width="220" align="right"><img src="img/logo_login01.gif"/></tr>
                <tr ><td align="center"></td><td></td></tr>
      			<tr ><td align="right">账  号:  </td>
      			<td><input type="text"id="username" name="username"style="height:25px;250px" vspace="5"></td></tr>
                <tr><td align="right">密  码:  </td>
                <td><input id="password"type="password" name="password"style="height:25px;250px" vspace="5"></td></tr>
                <tr><td ></td><td><input type="checkbox">
                <font size="1" face="微软雅黑" color="red">  记住我一周</font></td>
                <tr><td ></td><td>
             	<input type="submit" name="submit" value="LOGIN"/>
                <a href="https://passport.csdn.net/account/forgotpassword" target="_blank" align="right">
                <font size="1"><u>忘记密码</u></font></a>
               </td></tr>
    		</table>
    	</form>
      </body>
    </html>
    


    访问该表单所在页面:http://localhost:8888/WebDemo/MyJsp.jsp


    登录后,页面即会跳转至 Servlet 的post页面 :http://localhost:8888/WebDemo/user.eee


  • 相关阅读:
    BZOJ4008: [HNOI2015]亚瑟王
    BZOJ4260: Codechef REBXOR
    BZOJ4408: [Fj Winter Camp 2016]神秘数
    BZOJ4010: [HNOI2015]菜肴制作
    ccc2016
    BZOJ3884: 上帝与集合的正确用法
    BZOJ1017: [JSOI2008]魔兽地图DotR
    BZOJ1011: [HNOI2008]遥远的行星
    BestCoder Round #73
    hdu4035(概率dp)
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3293799.html
Copyright © 2020-2023  润新知