Los atributos de solicitud no están disponibles en la página jsp cuando se usa sendRedirect desde un servlet

Soy nuevo en jsp y servlet. Mi escenario es el siguiente

Tengo una página jsp que tiene un formulario en ella. Con dos campos. El código snipet de la página jsp es el siguiente.

Archivo MyFirstJSP.jsp

<body>
<h1> This is my first jsp and servlet project</h1>
<%
//System.out.println(request.getAttribute("fname"));

if(request.getAttribute("fname")!=null){
    System.out.println(request.getAttribute("fname"));
}else{
    System.out.println("No request ");
}
%>
<form action="MyFirstServlet" method="get">
First Name<input type="text" name="fname" value= ${fname}><br>
Last Name<input type="text" name="lname" value= ${lname}>
<input type="submit" value="Send">
</form>
</body>

Cuando envío este formulario, se llama a MyFirstServlet que verifica el primer nombre ingresado por el usuario. Si el primer nombre es igual a "abc", el servlet establece el atributo para solicitar el objeto y lo envía a la página jsp de llamada, es decir, la página anterior. Que obtendrá el valor del objeto de solicitud y lo completará en el campo de formulario correspondiente. También tengo el lenguaje Java Expression para el mismo efecto.

Aquí está mi código snipet del archivo de servlet MyFirstServlet.java

/**
 * Servlet implementation class MyFirstServlet
 */
public class MyFirstServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

/**
 * @see HttpServlet#HttpServlet()
 */
public MyFirstServlet() {
    super();
    // TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {       // TODO Auto-generated method stub
    String firstname=request.getParameter("fname");
    if(firstname.equalsIgnoreCase("abc")){
        System.out.println("Setting attributes");
        request.setAttribute("fname",firstname);
        request.setAttribute("lname",request.getParameter("lname"));
        response.sendRedirect("MyFirstJSP.jsp");
    }else{
        System.out.Println("No problem");
    }
}
/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    PrintWriter p=response.getWriter();
    p.println("Success!");
    doGet(request,response);
}
}

Pero cuando ejecuto el código, el servlet redirige a la página jsp pero no llena los campos del formulario con los valores respectivos. Para encontrar la causa, agregué el bloque if-else para conocer la causa y llego a saber que el atributo de objetos de solicitud no está disponible aquí.

Si uso el despachador de solicitudes en este caso, los valores estarán disponibles y el formulario se rellenará con los valores, pero la url en la barra de direcciones no cambia y siempre muestra la url al servlet.

Así que mi consulta es

** 1) Por qué el objeto de solicitud no está disponible para la página jsp usando sendRedirect.

2) ¿Hay alguna otra forma de mostrar mi formulario en la página jsp con los valores ingresados ​​por el usuario si el servlet envía redirecciones al jsp de la llamada para que el usuario no tenga que volver a ingresar los datos para formar. **

Por favor guíame amigos en este problema ¡Gracias!

Respuestas a la pregunta(2)

Su respuesta a la pregunta