天天看点

使用XML配置通过表单访问Servlet的总结

  今日学习Spring和Web连用的时候,出现了无法访问Servlet问题,这在以前学习Servlet过程中是没有过的,通过查找各种回答,最后解决了问题,现提供一个完整的测试代码,尽可能把各种原因写全。

  一 附上工程路径图片

  A 这里需要注意的是web.xml文件必须放在web-inf目录下,这个是和tomcat启动配置有关。

使用XML配置通过表单访问Servlet的总结

二 JSP页面代码

  这里需要注意action=service/registerService这个路径,后面我们会讲,为什么是这个。

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
    <form action="service/registerService" method="post">
	用户名:<input type="text" name="name">
	密码:<input type="text" name="password">
	<input type="submit" value="注册">
    </form>
</body>
</html>
           

三 Servlet代码

 A  这一步只要求在service的package下新建一个Servlet文件就行了。

 B  为了使用xml文件进行配置Servlet访问,我们必须把开头的注释掉。(以下代码是使用注解方式进行Servelt的访问)

@WebServlet("/registerService")
           

    Servlet具体代码(除了注释掉webservlet,其他没有做任何改变):

package service;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class registerService
 */
//@WebServlet("/registerService")
public class registerService extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public registerService() {
        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
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}
           

四  web.XML文件的配置

  首先要进行一些补充知识:

  4.1 如何直接访问Servlet文件:

  前提:启动tomcat服务器

  在浏览器地址栏中输入 http://localhost:8080/spring_web/service/registerService 便可以直接访问。

  着这个url中我们可以得知:

   A service/registerService这个就是我们的对应文件路径

   B url是以我们项目名spring_web开头的

  4.2 xml文件代码:

   值得说的点:

   A :<servlet-name>可以随便取名字,不一定要和我们的servlet文件名一致,这里为了说明配置与名字无关,我就随便取了

   个login的名字。(当然正常开发时,应取一个有意义的名字)

   B : 接着A点,<servlet>和<servlet-mapping>两个便签类的servlet-name一定一致的

   C :<servlet-class>一定写的是完整的包名+类(Servlet)名

   D :url-pattern中的路径一定要加上“/”,否则tomcat服务器无法启动。这个路径就是我们之前url直接访问的项目名后面的路

   径名。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">
	<display-name>web02</display-name>

	<servlet>
		<!-- 声明Servlet对象 -->
		<servlet-name>login</servlet-name>
		<!-- 上面一句指定Servlet对象的名称 -->
		<servlet-class>service.registerService</servlet-class>
		<!-- 上面一句指定Servlet对象的完整位置,包含包名和类名 -->
	</servlet>
	<servlet-mapping>
		<!-- 映射Servlet -->
		<servlet-name>login</servlet-name>
		<!--<servlet-name>与上面<Servlet>标签的<servlet-name>元素相对应,不可以随便起名 -->
		<url-pattern>/service/registerService</url-pattern>
		<!-- 上面一句话用于映射访问URL -->
	</servlet-mapping>
</web-app>
           

  五 xml文件的作用

   以上就是我们代码部分需要注意的地方。那么xml文件的作用是什么呢?他的执行顺序是什么呢?

   1、tomcat启动,会查找到web-inf下的XML文件进行配置,初始化

   2 、当我们点击表单的提交后,浏览器会跳转到action中写的“service/registerService”这个地址下,注意这个并不是直接填

          写到url中的,它会去xml文件中找url-pattern为service/registerService的映射。

          最后我们会在浏览器中看到点击提交后跳转的地址是: http://localhost:8080/spring_web/service/registerService

          小结:了解原理后,可以预想到要是把jsp文件的action=“”换成任意名字也可以,只要保证他的名字和xml文件中url-pattern

          名字相同就可以,相应的可以看一下跳转后的浏览器地址,它是和action的名字保持一致的。大家可以试一试

   3 、在xml中,找到同名的映射后,根据servlet-name会找到servlet-class,对应的Servlet文件路径位置。

   六 总结:

    JSP文件的action路径名需要和XML文件中的url-pattern路径名相同。

继续阅读