Servlet基本介绍

一、什么是servlet?

servlet是Server Applet的缩写 译为”服务端小程序“,是一种Java语言来开发动态网站的技术

  1. Servlet就是一个接口, 定义了Java类被浏览器访问到(tomcat识别)的规则。

  2. 将来我们自定义一个类,实现Servlet接口,复写方法也可完成接收用户的请求,处理用户的请求,响应信息给客户端,

  • Servlet是在服务器端运行的Java程序,可以接收客户端的请求并做出响应

  • Servlet可以动态生成HTML内容对客户端进行响应

  • Servlet与JSP的关系

    • JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。

    • JSP更擅长表现于页面显示,servlet更擅长于逻辑控制。

二、实现servlet的方法

实现servlet有三种方法

  • 实现Javax.servlet.Servlet接口;
  • 继承Javax.servle.GenericServlet类
  • 继承Javax.servlet.http.httpServlet类【重点、因为我用的的就是这个、方便】

注解:用我的话来说,其实servlet就是一个处理逻辑的地方,因为规则上不允许jsp页面出现java代码,他本身是用来显示的,所以用到了servlet来处理逻辑,然后,将处理的结果再保存到一个域对象里去(后面再说),再回到jsp页面利用el表达式去调取


servelt使用详解

1、实现servlet接口

public interface Servlet{
    public void init(servletConfig config) throws ServletException;
    public ServletConfig getServletConfig();
    public void service(ServletRequest req, ServletResponse resp) throws ServletException,IOException;
    public String getServletInfo();
    public void destory();
}

2、自定义一个类实现servlet接口,重写方法如下:

public class HelloServlet implements Servlet {          
    public LoginServlet1() {创建}
	public void destroy() {销毁}
	public ServletConfig getServletConfig() {
		return null;
	}
	public String getServletInfo() {
		return null;
	}	    
	public void init(ServletConfig arg0) {初始化}  
	public void service(ServletRequest arg0, ServletResponse arg1) {处理请求}           
}

配置servlet映射路径,让浏览器访问这个映射路径,再通过这个映射路径去访问servlet

  • 给servlet配置servlet路径,需要在web.xml中对servlet进行配置。

  <!-- 配置servlet(HelloServlet) -->
  <servlet>
  	<servlet-name>HelloServlet</servlet-name>
  	<servlet-class>com.zking.HelloServlet</servlet-class>
  </servlet>
  <!-- 映射servlet(HelloServlet) -->
  <servlet-mapping>
  	<servlet-name>HelloServlet</servlet-name>
  	<url-pattern>/请求路径</url-pattern>
  </servlet-mapping>

<!-- 注意:但凡是改了web.xml文件的内容 务必记得重启服务器再运行!!! -->

大家会不会觉得这样很麻烦呢?没有关系 servlet3.0他来了

Servlet3.0

在Servlet3.0开始,可以通过注解的方式进行配置Servlet,不用在web.xml中再进行配置。

  • 好处:

    • 支持注解配此。可以不要web. xml了。

  • 步骤:

    • 创建JavaEE项目, 选择Servlet的版本3.0以上,可以不创建web . xml

    • 定义一个类,实现Servlet接口

    • 复写方法

    • 在类上使用@WebServlet注解,进行配说

      • @webServlet("资源路径")| I

Servlet的生命周期

void init(ServletConfig):出生之后(1次)
void service(ServletRequest request,ServletResponse response):每次处理请求时都会被调用
void destory():临时之前调用(1次)

【总结】servlet由我们编写,但对象由服务器来创建,并且由服务器来调用相应的方法。

Servlet提前执行init方法

默认情况地下,只有在初次访问Servlet时才会执行init方法。有的时候,我们可能需要在这个方法里面执行一些初始化工作,甚至是做一些比较耗时的逻辑。这个时候就需要让init方法提前执行,免得影响初次访问的体验。

想要让init方法提前执行,需要在web.xml文件中对需要提前执行的Servlet进行设置

<!-- 向Tomcat注册Servlet servlet-name:Servlet的名称, servlet-class:具体的路径 -->
      <servlet>
          <servlet-name>TestServlet</servlet-name>
          <servlet-class>cn.liuwei.servlet.TestServlet</servlet-class>
          <!-- 设置Servlet的init方法提前执行 -->
          <load-on-startup>2</load-on-startup>
      </servlet>

load-on-startup的值越小,提前执行的优先级越高。并且一般不设置为1,因为1是Tomcat的的Servlet的优先级

继承javax.servlet.http.HttpServlet类

HttpServlet是Servlet接口的一个实现类,并且它是一个抽象类,servlet.http包中定义了采用HTTP通信协议(一个无状态协议)的HttpServlet类。

创建HttpServlet步骤

  • 继承HttpServlet抽象类

  • 重写HttpServlet的部分方法,如doGet()或doPost()方法

  • 获取HTTP请求信息。通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串

  • 生成HTTP响应结果。通过HttpServletResponse对象生成响应结果

HttpServlet的实现由两种方式

实现方式一:.xml配置实现
    A.配置xml文件(实现方式同Servlet接口的.xml配置相同,此处不再重复)
    B.继承HttpServlet抽象类
    C.重写get()、post()方法
实现方式二:注解实现
    直接在Package包下新建Servlet

HttpServletRequest

Servlet容器对于接受到的每一个Http请求,都会创建一个ServletRequest对象,并把这个对象传递给Servlet的Sevice( )方法。其中,ServletRequest对象内封装了关于这个请求的许多详细信息。

  • HttpServletRequest表示Http环境中的Servlet请求。它扩展于javax.servlet.ServletRequest接口

【String getParameter(String name)】:根据name值得到value值
【String[ ] getParameterValues(String name)】:根据name值得到多个value值 例如:爱好

【void setCharacterEncoding(String charset)】:设置请求的编码方式 防止中文乱码
【void setAttribute(String key, Object value)】:存值[键值对的方式]
【Object getAttribute(String key)】:根据键拿到值

其中,getParameter是在ServletRequest中最常用的方法,可用于获取查询字符串的值。

HttpServletResponse

javax.servlet.ServletResponse接口表示一个Servlet响应,在调用Servlet的Service( )方法前,Servlet容器会先创建一个ServletResponse对象,并把它作为第二个参数传给Service( )方法。ServletResponse隐藏了向浏览器发送响应的复杂过程。

【void setContentType(String arg0)】:设置响应的编码方式
【PrintWriter getWriter()】:获得内置对象out

其中的getWriter方法,它返回了一个可以向客户端发送文本的的Java.io.PrintWriter对象。默认情况下,PrintWriter对象使用ISO-8859-1编码(该编码在输入中文时会发生乱码)。

JSP页面表单提交方式

- 1.type="submit"
- 2.type="image"
- 3.使用链接来提交表单,javascript的DOM模型
- 4.通过onsubmit事件提交
- 5.通过ajax提交

<form action="请求路径url" method="get/post"></form>

表单提交有两种方式:
        1.get(默认)  地址栏会显示信息,安全性低;有数据长度的限制
        2.post 反之  以后推荐使用post

get是用来从服务器上获得数据,而post是用来向服务器上传递数据。get可以在URL后面看见所提交的数据,但是Post是不会看见的!get安全性非常低,post安全性较高

页面跳转的方式

  • 使用href超链接标记 客户端跳转

  • 表单提交 客户端跳转

  • 使用RequestDispatcher.forward()(转发) 服务器跳转

  • 使用 response.sendRedirect()(重定向) 客户端跳转

  • 使用forward动作标记 服务器跳转【后面将 JSTL】

  • 使用response对象实现页面跳转的第二种方法,setHeader()方法【】

  • 使用JavaScript 客户端跳转

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值