servlet的实现

JavaWeb

在使用Javaweb需要配置java服务器,也相当于承载web的容器,服务器就是安装了服务器软件的计算机,服务器软件用来接受用户的请求,做出响应,这里我使用tomcat作为服务器软件。比较常见的服务器软件有

  • weblogic:oracle公司,大型的javaEE服务器,支持所有的JavaEE规范,收费的

  • websphere:IBM公司,大型的javaEE服务器,支持所有的ovaTE规范,收费的

  • JBOSS:JBOSS公司,大型的javaEE服务器,支持所有的JavaIL规范,收费的

  • Tomcat:Apache基金组织,中小型的javaEE服务器,开源的,免费的

在web服务器中我们可以部署项目,用户可以通过浏览器来对我们的项目进行访问。

Servlet

servlet,filter,listener被称为JavaWeb的三大组件,servlet比较主要的就是设置其中的请求与响应。

使用servlet需要导入tomcat中servlet的包,再实现servlet接口,这里需要对xml文件进行配置

    <servlet>
        <servlet-name>Myservlet</servlet-name>
        <servlet-class>Weblearn.Controller.MyServlet</servlet-class>
        <load-on-startup>-1</load-on-startup>
        <!--        如果为负数不会先初始化-->
    </servlet>
    <servlet-mapping>
        <servlet-name>Myservlet</servlet-name>
        <url-pattern>/s2</url-pattern>
    </servlet-mapping>

servlet的执行原理就是通过访问ip地址服务器下的web文件(本地可直接用端口号进行访问)servlet-mapping标签中url-pattern,找到servlet-name,映射到servlet标签下的servlet-name,然后我们就去找对应文件,通过servlet-class找到对应包下的文件。当然我们也可以通过注解进行配置,对注解@WebServlet传参,里面有很多参数,默认参数为value。

我们实现servlet接口需要重写对应的方法

 @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        //初始化
        System.out.println("初始化"+this.getClass().getName());
    }
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//请求接口会调用的代码
        System.out.println("请求");
        System.out.println(servletRequest.getRemoteAddr());
    }
    @Override
    public String getServletInfo() {
        return null;
    }
    @Override
    public void destroy() {
        //销毁垃圾数据
        System.out.println("销毁");
    }

我们通过方法名也应该大概了解其中的作用,init()可以设置servlet的初始化内容,初始化只执行一次,当且仅当启动该servlet文件时。service()处理请求和响应,每次访问servlet都会执行一次,destroy用来销毁垃圾数据,当服务器正常关闭时执行,释放资源。

Httpservlet

正常我们在使用servlet是实现servlet接口再对其方法重写调用,而HttpServlet内部已经引用了该接口,再对http协议进行了一次封装,所以我们使用HttpServlet只需要继承并重写doGet和doPost方法就能实现对应功能,简化操作。

@WebServlet("/hs")
public class HttpServlet extends javax.servlet.http.HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println(req.getMethod());//请求方法
        System.out.println(req.getParameter("username"));//对应参数名的输入内容
        System.out.println(req.getContextPath());//虚拟项目名字
        System.out.println(req.getQueryString());//所有参数跟对应值,相邻用&
        System.out.println(req.getServletPath());//获取项目下的servlet的路径
        System.out.println(req.getRequestURL());//stringBuffered
        System.out.println(req.getRequestURI());//string
        System.out.println(req.getHeader("cookie"));//直接获取对应请求头中属性的值
        Enumeration<String> headerNames = req.getHeaderNames();//获取请求头中所有的属性名称(枚举)
        while (headerNames.hasMoreElements()){
            String names = headerNames.nextElement();
​
            System.out.println(names+""+req.getHeader(names));
        }
    }
​
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println(req.getParameter("username"));//对应参数名的输入内容
        System.out.println(req.getContextPath());//虚拟项目名字
    }
}

get方法与post方法的区别主要就是发送参数的方式不同,get是直接拼接在访问路径上,而post是在请求体中以报文的形式发送。post的安全性稍微比get高一些,因为get是直接拼接在路径上的,安全性不高,在参数量上,get有长度限制,而post没有。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值