Servlet基础知识

Servlet基础知识:

在eclipse使用dynamicWEBproject:

0.在eclipse 中部署Tomcat	
1.配置Servlet:(Eclipse环境)
2.建包和创建类,用于实现Servlet接口,重写一系列方法
3.配置
4.访问网页
5.简介HttpServlet,GenericServlet

0.在eclipse 中部署Tomcat

	Window/Preference/Server/Runtime Environment -> Add -> Apache Tomcat xx 
		-> next -> brower -> finish
	检测:
		建立Dynamic Web Project工程,再创建jsp文件,body中写入文本
	使用浏览器访问:
		http://localhost:8080/工程名称/xxx.jsp
	例如:
		http://localhost:8080/TryTom/NewFile.jsp
	如果正常访问,则部署成功

1.配置Servlet:(Eclipse环境)

0.建立Dynamic Web Project工程,
	建立的第三步选上:Generate web.xml deployment descriptor
	

1.此时实际工程结构:
	-ProjectName..
		-src
			-xxxPackages..
				-xxxClassName..
		-build
		-WebContent
			-META-INF
			-WEB-INF
				-lib
			   (-web.xml)
			-xxx.html
	
	web.xml配置时class: 
	  <servlet-class>xxxPackages.xxxClassName</servlet-class>
	在WebContent下的web.xml中进行配置。		

2.建包和创建类,用于实现Servlet接口,重写一系列方法

Servlet->GenericServlet->HttpServlet
接口			抽象类			抽象类

1.void destroy()   					//用于资源回收,仅执行一次
2.ServletConfig getServletConfig()
3.String getServletInfo()		
4.void init(ServletConfig config)	//资源申请,仅执行一次
5.void service(ServletRequest req, ServletResponse res) 
				//用于服务,每一次访问都会执行

3.配置:

方式:
	1.web.xml中配置
	2.注解配置(在Java6以后可以提供,如果使用这种方式,则建工程时不要xml文件)

具体:
1.web.xml中配置
	在<web-app>标签体中</web-app>填入以下信息:

		<servlet>
		  <servlet-name>demo1</servlet-name>
		  <servlet-class>DemoServlet.Servdemo</servlet-class>
		 </servlet>
		  
		 <servlet-mapping>
		  	<servlet-name>demo1</servlet-name>
		  	<url-pattern>/demo1</url-pattern>
		 </servlet-mapping>


	解释:
	Tomcat服务器的实际行为:
		由于:在浏览器的地址栏输入:localhost:8080/ProjectName/资源路径
		其中的资源路径:
			正是 <servlet-mapping> 中的<url-pattern>中的路径
		1.通过url-pattern中的资源路径访问网页,并通过映射找到servlet-name中的名称
		2.通过servlet-name中的名称在<servlet>标签中找到这个名称对应的servlet-class(完整包名路径)
		3.通过该路径可以加载这个路径指向的类,并创建该类对象,
			之后再创建Request,Response对象,并传入该类对象的service方法,再执行。


2.注解配置(在Java6以后可以提供)
	使用注释配置时,不必创建web.xml,甚至可以说是不要创建它
	在类上标注 @WebServlet("/demo1") 即可 //demo1为设置的资源路径

4.访问网页:

1.首先使用Debug运行类中的代码..可以看见日志信息
2.使用浏览器输入:
	http://localhost:8080/工程名/资源路径
	
	例如:
		http://localhost:8080/TryTom/demo1

GenericServlet:实现了Servlet接口,方法空实现,继承该类后仅需重写service方法

1.To write a generic servlet, you need only override 
	the abstract service method.
2.public abstract class GenericServlet extends java.lang.Object
	implements Servlet, ServletConfig, java.io.Serializable

GenericServlet_src:

public abstract class GenericServlet implements Servlet, ServletConfig,
java.io.Serializable {

    private static final long serialVersionUID = 1L;

    private transient ServletConfig config;

    public GenericServlet() {
        // NOOP
    }

    @Override
    public void destroy() {
        // NOOP by default
    }

    @Override
    public String getInitParameter(String name) {
        return getServletConfig().getInitParameter(name);
    }

    @Override
    public Enumeration<String> getInitParameterNames() {
        return getServletConfig().getInitParameterNames();
    }

    
    @Override
    public ServletConfig getServletConfig() {
        return config;
    }

    
    @Override
    public ServletContext getServletContext() {
        return getServletConfig().getServletContext();
    }

 
    @Override
    public String getServletInfo() {
        return "";
    }

    
    @Override
    public void init(ServletConfig config) throws ServletException {
        this.config = config;
        this.init();
    }

    
    public void init() throws ServletException {
        // NOOP by default
    }


    public void log(String msg) {
        getServletContext().log(getServletName() + ": " + msg);
    }

    public void log(String message, Throwable t) {
        getServletContext().log(getServletName() + ": " + message, t);
    }

    @Override
    public abstract void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException;

    @Override
    public String getServletName() {
        return config.getServletName();
    }
}

HttpServlet:实现了Servlet接口,继承该类后至少重写一种方法

Provides an abstract class to be subclassed to create an HTTP servlet suitable for a Web site. A subclass of HttpServlet must override at least one method, usually one of these:
	1.doGet, if the servlet supports HTTP GET requests
	2.doPost, for HTTP POST requests
	3.doPut, for HTTP PUT requests
	4.doDelete, for HTTP DELETE requests
	5.init and destroy, to manage resources that are held for the life of the servlet
	6.getServletInfo, which the servlet uses to provide information about itself

解释:
	service 会被判断网页的行为,并根据行为执行各自对应的方法,
		因此重写这些行为即可满足需求

HttpServlet_src:

protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {

    String method = req.getMethod();

    if (method.equals(METHOD_GET)) {
        long lastModified = getLastModified(req);
        if (lastModified == -1) {
            // servlet doesn't support if-modified-since, no reason
            // to go through further expensive logic
            doGet(req, resp);
        } else {
            long ifModifiedSince;
            try {
                ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);
            } catch (IllegalArgumentException iae) {
                // Invalid date header - proceed as if none was set
                ifModifiedSince = -1;
            }
            if (ifModifiedSince < (lastModified / 1000 * 1000)) {
                // If the servlet mod time is later, call doGet()
                // Round down to the nearest second for a proper compare
                // A ifModifiedSince of -1 will always be less
                maybeSetLastModified(resp, lastModified);
                doGet(req, resp);
            } else {
                resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
            }
        }

    } else if (method.equals(METHOD_HEAD)) {
        long lastModified = getLastModified(req);
        maybeSetLastModified(resp, lastModified);
        doHead(req, resp);

    } else if (method.equals(METHOD_POST)) {
        doPost(req, resp);

    } else if (method.equals(METHOD_PUT)) {
        doPut(req, resp);

    } else if (method.equals(METHOD_DELETE)) {
        doDelete(req, resp);

    } else if (method.equals(METHOD_OPTIONS)) {
        doOptions(req,resp);

    } else if (method.equals(METHOD_TRACE)) {
        doTrace(req,resp);

    } else {
        //
        // Note that this means NO servlet supports whatever
        // method was requested, anywhere on this server.
        //

        String errMsg = lStrings.getString("http.method_not_implemented");
        Object[] errArgs = new Object[1];
        errArgs[0] = method;
        errMsg = MessageFormat.format(errMsg, errArgs);

        resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg);
    }
}

post:提交表单可以展示出来;get:访问时可以展示出来

xxx.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="http://localhost:8080/WebServlet/demo3" method = "post">
	<label for = "user">登录:</label><input id = "user" name = "username" placeholder="输入用户名"></input>
	<br/>
	<label for = "pwd">密码:</label><input id = "pwd" type = "password" name = "password" placeholder="输入密码"></input> 
	<br/>
	<input type = "submit" value = "提交"></input>
	</form>
</body>
</html>
Insert title here

xxx.java

@WebServlet("/demo3")
public class HttpServDemo extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("get it");
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("post it");
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值