J2EE 5.Servelet

版权声明:本文为博主原创文章,转载请声明原创网址。 https://blog.csdn.net/lagoon_lala/article/details/83116531

Servelet

创建servlet的类、怎样在Tomcat服务器上保存编译这个类所得到的字节码、怎样编写部署文件、怎样请求Tomcat服务器创建一个servlet。

      写一个创建servlet的类就是编写一个特殊类的子类,这个特殊的类就是javax.servlet.http包中的HttpServlet类。这样的子类创建的对象习惯地被称作一个servlet。

字节码文件的保存

为了调试代码的方便,可以事先将创建servlet的类的源文件,按着其包名,保存到Web服务目录的下述子目录中:\WEB-INF\classes\myservlet\control

然后按如下格式编译源文件(如图5.1):

classes>javac  myservlet\control\Servlet源文件

例如:

classes>javac  myservlet\control\Example5_1_Servlet.java

 

部署文件web.xml:

编写的web.xml文件需要保存到Web服务目录的WEB-INF子目录中,比如ch5\WEB-INF中。根据给出的Servlet类,web.xml文件的内容如下):

<?xml version="1.0" encoding="iso-8859-1"?>

<web-app>

    <servlet>

        <servlet-name>hello</servlet-name>

        <servlet-class>myservlet.control.Example5_1_Servlet</servlet-class>

    </servlet>

    <servlet-mapping>

        <servlet-name>hello</servlet-name>

        <url-pattern>/lookHello</url-pattern>

    </servlet-mapping>

</web-app>

1. <servlet>标记及子标记

<servlet>标记需要有2个子标记:

       <servlet-name>和<servlet-class>

  其中<servlet-name>标记的内容是创建的servlet的名字.

  <servlet-class>标记的内容指定用哪个Servlet类来创建servlet。

2. <servlet-mapping>标记及子标记

        一个<servlet>标记会对应地出现一个<servlet-mapping>标记,<servlet-mapping>标记需要有两个子标记:

          <servet-name>和<url-pattern>.

          其中<servet-name>标记的是创建的servlet的名字,< url-pattern >标记用来指定用户用怎样的URL格式来请求servlet,比如,<url-pattern >标记的内容是:/lookHello,

那么用户必须在浏览器的地址栏中键入:

http://127.0.0.1:8080/ch5/lookHello

来请求名字是hello的servlet。

 

3.0版本D web Project

Build\class->webinfo

包中新建servelet

URL mapping映射

生命周期方法

Init service destroy

网址后加@WebServlet的地址

Alt+/提示

 

Jsp在<%中写java

Servelet在service中out.print HTML

 

向servelet传递参数的值

 

     在请求一个servlet时,可以在请求的url-pattern中额外的加入参数及其值,格式是:

servlet名?参数1=值1&参数2=值…参数n=值

那么被请求的servlet就可以使用request对象获取参数的值,例如:

request.getParameter(参数n)

比如可以在浏览器的浏览器键入:

http://127.0.0.1:8080/ch5/lookHello?moon=loveliness

 

创建servelet文件时新建可选(不是选class),才会自动配置web.xml

JSP文件在深一层目录的话要改url映射: <url-pattern>/ch5/computeBill</url-pattern>

 

Servlet:配置方法注解、web.xml

 

正则表达式:‘+’表示至少出现一次。* 就是单个字符匹配任意次,即贪婪匹配。 表达式 .*? 是满足条件的情况只匹配一次,即最小匹配

servlet的工作原理

一个请求一个线程

Servelet是单例

 

servlet的生命周期主要有下列三个过程

  1. init方法完成必要的初始化工作。
  2. 诞生的servlet再调用service方法响应用户的请求。
  3. 当服务器关闭时,调用destroy方法,消灭servlet

 

Jsp页面访问servlet:

web.xml文件中<servlet-mapping>标记的子标记<url-pattern>指定的请求servlet的格式是“/lookHello”,那么JSP页面请求servlet时,必须要写成 “lookHello”,不可以写成“/lookHello”,否则将变成请求root服务目录下的某个servlet。

 

通过表单向servlet提交数据

<url-pattern>指定的请求servlet的格式是"/computeBill",那么

<form  action= "computeBill "  … …>

</form>

    当请求一个servlet时,可以加入参数及其值,格式是:

<form  action= "computeBill?sideA=10.66&sideB=23.9&sideC=897 "  … …>

</form>

通过超链接访问servlet

如果web.xml文件中<url-pattern>指定的请求servlet的格式是"/triangle",

href的值是" triangle ",如下所示意:

       <a href="triangle"></a>

共享变量

Servlet类所创建的servlet的,用户将共享该servlet的成员变量

doGetdoPost方法

 

重定向与转发

区别:转发后的页面可以保留原request的内容

页面地址栏无变化

重定向:void sendRedirect(String location)

 

实现转发的步骤如下:

1.得到RequestDispatcher对象

      RequestDispatcher dispatcher=

                  request.getRequestDispatcher("a.jsp");

2.转发

例如:  dispatcher.forward (request,response);

      将用户对当前JSP页面或servlet的请求转变成对a.jsp页面的请求。

使用session

HttpSession session=request.getSession(true);

实验

运行a.jsp页面如图:

如果输入内容不为空,比如输入“中国”,提交给Servlet,Servlet将用户请求再转发到b.jsp页面,在该页面显示输入的内容。

代码:

//Servlet.java
package servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Servlet extends HttpServlet{
   public void init(ServletConfig config) throws ServletException{
      super.init(config);
   }
   public void doPost(HttpServletRequest request,HttpServletResponse response) 
                        throws ServletException,IOException{
      String number=request.getParameter("name");     
      try{
//    	  double n=Double.parseDouble(number);
                RequestDispatcher dispatcher= 
                request.getRequestDispatcher("b.jsp");
                dispatcher.forward(request, response);//转发
             
      }
      catch(NumberFormatException e){
           response.sendRedirect("a.jsp");  //重定向
      }
   } 
   public  void  doGet(HttpServletRequest request,HttpServletResponse response) 
                        throws ServletException,IOException{
        doPost(request,response);
   }
}
<!-- a.jsp -->
<%@ page contentType="text/html;charset=gb2312" %>
<HTML><body bgcolor=cyan><font size=2>
<form action="twoPath" method=post>
    输入名字: <input type=text name="name">
 <br><input type=submit value="提交">
</form></body></HTML>
<!-- b.jsp -->
<%@ page contentType="text/html;charset=gb2312" %>
<HTML><body bgcolor=pink><font size=2>
 <%
     String s= request.getParameter("name");
      byte [] bb= s.getBytes("iso-8859-1");
      s = new String(bb,"gb2312");
 %>
 <b><br>用户输入的是<%= s%>  
</body></HTML>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>t5</display-name>
  <servlet>
     <servlet-name>twoPath</servlet-name>
     <servlet-class>servlet.Servlet</servlet-class>
  </servlet>
	<servlet-mapping>
	     <servlet-name>twoPath</servlet-name>
	     <url-pattern>/twoPath</url-pattern>
	</servlet-mapping>
  
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

猜你喜欢

转载自blog.csdn.net/lagoon_lala/article/details/83116531