Servlet重要练习

回顾:https://blog.csdn.net/qq_43711904/article/details/99226689

练习:

梳理的servlet、GenericServlet、HttpServlet的关系与ServletConfig对象的获取方式:

public class GetInfoServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    private ServletConfig servletConfig;
    
    @Override
    public void init(ServletConfig servletConfig1) {
        try {
            super.init(servletConfig1);
            this.servletConfig = servletConfig1;
        } catch (ServletException e) {
            e.printStackTrace();
        }
    }
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        /*
         * 得到ServletConfig对象的第一种方式
         * 
         * 配置信息被解析后会将数据加载到ServletConfig中保存到内存
         * ServletConfig中定义的方法:
         * getServletName();getServletContext();getInitParameter(java.lang.String name);getInitParameterNames()
         * (注:如果选用init(ServletConfig servletconfig)时,Tomcat不会初始化全局的ServletContex对象,即在方法体中无法通过this.getServletContex()获取信息)
         * 因为默认Servlet对象初始化时调用的是init()无参构造,如果需要在方法体中保存ServletConfig信息:
         * 就需要实现Servle接口中的方法public void init(ServletConfig servletconfig)
         * 此时则可以直接通过“servletConfig.方法”在Servlet中调用

         */
        System.out.println("Servlet名称:" + servletConfig.getServletName());
        System.out.println("key1:" + servletConfig.getInitParameter("key1"));
        System.out.println("key2:" + servletConfig.getInitParameter("key2"));
        /*
         * 得到ServletConfig对象的第二种方式
         * 
         * Servlet接口中的非周期方法:
         * 获取Servlet的信息getServletInfo();获取Servlet的配置信息getServletConfig()
         * 
         * servlet与GenericServlet,HttpServlet的关系:
         * GenericServlet,HttpServlet都是servlet的实现类,HttpServlet类又继承了GenericServlet类;

         * Servle接口中定义了三个周期方法:init() service() destroy();
         * HttpServlet类中定义的方法:doGet() doPost()
         * 
         * 所以当前类作为HttpServlet类的子类可以通过调用Servlet接口中getServletConfig()方法获取更多配置信息
         */
//        String servletName = this.getServletConfig().getServletName();
//        String value1 = this.getServletConfig().getInitParameter("key1");
//        String value2 = this.getServletConfig().getInitParameter("key2");
        
        /*
         * 得到ServletConfig对象的第三种方式
         * 
         * GenericServlet重写了ServletConfig接口中的getInitParameter()等方法
         * 而HttpServlet又继承了GenericServlet
         * 所以可以在当前类作为HttpServlet子类可以直接调用getInitParameter()等方法

         */
        String servletName = this.getServletName();
        String value1 = this.getInitParameter("key1");
        String value2 = this.getInitParameter("key2");
        
        out.println("<html><body>");
        out.println("Servlet名称:"+servletName+"<br>");
        out.println("key1:"+value1+"<br>");    
        out.println("key2:"+value2);
        out.println("</body></html>

掌握HttpServletRequest中的方法:

@WebServlet("/ShowHeadersServlet")
public class HeaderServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    @SuppressWarnings("deprecation")
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        out.println("<html><head></head><body><table width=\"100%\" border=\"1\">");
        /*
         * HttpServletRequest
         * getContextPath() /web_practise
         * getServletPath() /ShowHeadersServlet
         * getRequestURI()  /web_practise/ShowHeadersServlet
         * getRequestURL()  http://localhost:8080/web_practise/ShowHeadersServlet
         * getRealPath("/") 
         * getHeader(java.lang.String name) getHeaders(java.lang.String name)
         * getHeaderNames() 
         * getQueryString() 
         * getMethod() 
         */
        
        out.println("<tr><td>HeaderServlet at</td> " +"<td>"+ request.getContextPath() + "</td></tr>");
        
        Enumeration<String> names = request.getHeaderNames();
        while(names.hasMoreElements()) {
            String name = names.nextElement();
            out.println("<tr><td>" + name + "</td> " +"<td>"+ request.getHeader(name) + "</td></tr>");
        }
        out.println("<tr><td>request.getRequestURL()</td> " +"<td>"+ request.getRequestURL() + "</td></tr>");
        out.println("<tr><td>request.getRequestURI()</td> " +"<td>"+ request.getRequestURI() + "</td></tr>");
        out.println("<tr><td>request.getContextPath()</td> " +"<td>"+ request.getContextPath() + "</td></tr>");
        out.println("<tr><td>request.getServletPath()</td> " +"<td>"+ request.getServletPath() + "</td></tr>");
        out.println("<tr><td>request.getRealPath()</td> " +"<td>"+ request.getRealPath("/") + "</td></tr>");
        out.println("</table></body></html>

运行结果:

全局初始化参数:

<context-param></context-param>

Servlet初始化参数:

<servlet>
    
    <init-param></init-param>
</servlet>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值