欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > Java Servlet

Java Servlet

2025/9/30 7:30:36 来源:https://blog.csdn.net/qq_36816794/article/details/141784907  浏览:    关键词:Java Servlet

1. Servlet进行动态网页开发

1.1. 用于开发动态的网页

书写流程:

  1. 写一个class类,去继承一个Httpservlet
  2. 重写service方法,注意一定要super.service()
  3. 进行动态网页的开发
  4. 在web.xml中配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"version="2.5"><servlet><servlet-name>Servlet01</servlet-name><servlet-class>com.wyb.servlet.Servlet01</servlet-class></servlet><servlet-mapping><servlet-name>Servlet01</servlet-name><url-pattern>/servlet/Servlet01</url-pattern></servlet-mapping>
</web-app>

注意:servlet-name是自己任意命名的,url-pattern也是的
5. 在网页中访问即可输入自己定义的url-pattern即可

1.2. 使用Servlet进行流程控制

  1. 进行流程的控制(重要的作用)
    在这里插入图片描述
public class DoLogin extends HttpServlet{@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 1. 接收login.jsp页面发送过来的数据String uname = request.getParameter("uname");String pwd = request.getParameter("pwd");// 2. 数据处理,得到结果--使用接收的数据去数据库做比较boolean flag = false;if("wyb".equals(uname) && "123".equals(pwd)) {flag = true;}// 3. 根据返回的结果给用户作出响应if(flag) {// 可以实现页面的跳转-转发request.getRequestDispatcher("admin/success.jsp").forward(request, response);} else {request.getRequestDispatcher("admin/login.jsp").forward(request, response);}}
}

总结:

  • Servlet是一个基于Java技术的动态网页技术,运行在服务器端,由Servlet容器管理,用于生成动态的内容,是JSP的前身,编写一个Servlet,实际上就是按照Servlet规范编写一个java类
  • Servlet是由Tomcat管理,没有main()方法
  • JSP的本质是一个Servlet
    • JSP执行过程:.jsp–翻译–.java(Servlet)–编译–.class–执行

2. Servlet生命周期

2.1. 生命周期

Servlet是一个单实例,多线程的程序

  1. 类加载:Class clazz = Class.forName("com.wyb.servlet");
  2. 实例化(离不开反射):Object obj = clazz.newInstance();
  3. 初始化(离不开反射)
  4. 服务请求(service)(离不开反射)
  5. 销毁操作(离不开反射)

2.2. 类加载时机

  1. 默认第一次访问Servlet进行类加载
  2. <load-on-startup>0</load-on-startup>(当启动服务器时加载)数字越小加载时机越往前
public class Servlet01 extends HttpServlet {// 实例化方法,只执行一次public Servlet01() {System.out.println("Servlet01");}// 请求服务-每一次请求都会执行@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) {System.out.println("Servlet01 doGet");}// 请求服务-每一个请求都会执行@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) {System.out.println("Servlet01 doPost");}// 判断调用doGet还是doPost,执行多次@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) {// 获得传递的方法名称-GET/POSTString method = request.getMethod();System.out.println(method);if("GET".equals(method)) {doGet(request, response);}else if("POST".equals(method)) {doPost(request, response);}else {System.out.println("执行其他方法");}}// 销毁操作,关闭服务器执行一次@Overridepublic void destroy() {System.out.println("Servlet01 destroy");}// 初始化方法-执行一次@Overridepublic void init() {System.out.println("Servlet01 init");}
}

3. Servlet API

3.1. 书写Servlet的方式

  • Servlet必须直接或间接实现javax.servlet.Servlet接口
  • 通过继承javax.servlet.GenericServlet类实现跨协议的Servlet
  • 通过继承javax.servlet.HttpServlet实现HTTP Servlet
  • 自己定义Servlet,其他的java类都继承此Servlet
    在这里插入图片描述

3.2. 接口和类

  • Servlet接口:所有的Servlet直接或间接实现的类
    • init(ServletConfig config)
    • service(ServletRequest req, ServletResponse res)
    • destory()
    • getServletInfo():获得Servlet信息
    • getServletConfig():获得Servlet相关配置信息
  • GenericServlet抽象类:implements Servlet, ServletConfig
    • 定义了一个通用的,不依赖于具体协议的Servlet,给出了除service()方法的其余四个方法的实现
    • public void init(ServletConfig config) throws SerletException; protected void init() throws SerletException第一个是Servlet接口的init(),调用第二个init(),重写第二个init()接口
  • HttpServlet类
    • public void service(ServletRequest req, ServletResponse res)
    • protected void service(HttpServletRequest req, HttpServletResponse res)
    • protected void doGet(req, res)
    • protected void doPost(req, res)
    • public service()是父类的方法,protected service()是自己的方法。根据HTTP请求方法的类型调用相应的doXxx()方法
    • 自己编写的Servlet应该继承HttpServlet,一般要覆盖Service或doPost/doGet方法

4. 参数读取

  1. 配置参数读取的意义:把参数提取到配置的信息中,大大增加了代码的实用性,方便维护
public class ParamServlet extends HttpServlet {String enc;String encc;String enc2;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) {System.out.println("初始化参数:" + enc);System.out.println(encc);System.out.println("上下文参数:" + enc2);}@Overridepublic void init() {// 获得初始化参数enc = this.getInitParameter("enc");encc = this.getServletConfig().getInitParameter("enc");// 获取上下文参数,this.getServletContext(): 获得全局的对象enc2 = this.getServletContext().getInitParameter("enc2");System.out.println("读取初始化参数完毕");}
}

4. 中文乱码处理

  1. post方式:request.setCharacterEncoding("utf-8")
  2. get方式:
    1. byte[] bytes = str.getBytes("iso-8859-1"); String cstr = new String(bytes, "utf-8");
    2. 在server.xml中指定对应的服务器编码:URIEncoding = "utf-8"

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词