jsp chapter 6 java servlet 基础

目录

一 servlet 的部署,创建和运行

1 Servlet 类:

2 字节码文件的保存

3编写部署文件web.xml

4运行Servlet

5向Servlet传值

二Servlet的工作原理

三 通过jsp页面调用servlet

1通过form表单向servlet提交数据

  2 通过超链接访问servlet

3 example.jsp

 4 example_Servlet.java

5 web.xml

四 共享变量

五 重定向和转发

1重定向(sendredirect())

2转发(forward())

3 区别 

 


一 servlet 的部署,创建和运行

1 Servlet 类:

写一个servlet就是编写“javax.servlet.http.HttpServlet”的子类,HttpServlet实现了Servlet接口

2 字节码文件的保存

将源文件保存在服务目录(ch6)\WEB-INF\classes\moon\sun中,在classes目录用

javac -cp servlet-api.jar moon\sun\java文件名.java

注意:将去Tomcat安装目录lib子目录中的servlet-api.jar文件复制到\ch6\WEB-INF\classes中,否则cp参数必须显示给出servlet-api.jar位置。如j

avac -cp D:\tomcat\lib\servlet-api.jar moon\sun\java文件名.java

3编写部署文件web.xml

在 ch6\WEB-INF中编写web.xml文件,内容如下:

<?xml version = “1.0” encoding = "utf-8”? >
<web-app>
  <servlet>
    <servlet-name>hello</servlet-name>        <%--系统标记servlet文件的名字  --%>    
    <servlet-class>moon.sun.Example6_1</servlet-class>       <%-- servlet文件的位置 --%> 
  </servlet>
  <servlet-mapping>
    <servlet-name>hello</servlet-name>             <%-- 系统标记servlet文件的名字 --%>  
    <url-pattern>/lookHello</url-pattern>              <%-- servlet文件对应的“在浏览器输入的名字” --%>
  </servlet-mapping>
<web-app>

4运行Servlet

http://127.0.0.1:8080/ch6/lookHello

5向Servlet传值

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

url-pattern?参数1=值&参数2=值...参数n=值

相应的,servlet也可以获取参数对应的值,格式为:

request.getParameter(参数n);

二Servlet的工作原理

一个Servlet对象的生命周期由三部分构成

初始化servlet

servlet调用service方法响应用户的请求

自动调用destroy销毁servlet

三 通过jsp页面调用servlet

1通过form表单向servlet提交数据

form形式:

<form action="url-pattern">             <--详情见前面的web.xml-->
</form>

url-pattern形式

url-pattern?参数1=值&参数2=值...参数n=值

  2 通过超链接访问servlet

可以用<a herf="url-pattern"> </a>访问servlet

接下来,用一个例子来帮助读者来理解上述内容

3 example.jsp

<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
<style>
   #textStyle{
      font-family:宋体;font-size:36;color:blue 
   }
</style>
<HTML><body bgcolor=#ffccff>
<form action="computeBill?discount=6" id= textStyle method=post>
  输入账单:<br>
<textArea name='billMess' id =textStyle rows=5 cols=30 >
 剁椒鱼头:62.9元,烤鸭:199元,红焖大虾:289.9元。
</textArea>
<br><input type=submit id=textStyle value="提交">
</form>
</body></HTML>

 4 example_Servlet.java

package moon.sun;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Example6_3_Servlet extends HttpServlet{
   public void init(ServletConfig config) throws ServletException{
      super.init(config);
   }
   public void service(HttpServletRequest request,HttpServletResponse response)
                       throws IOException{
      request.setCharacterEncoding("utf-8");
      response.setContentType("text/html;charset=utf-8");
      PrintWriter out=response.getWriter();
      out.println("<html><body bgcolor=yellow>");
      String discountMess=request.getParameter("discount");
      double discount = Double.parseDouble(discountMess);
      String billMess=request.getParameter("billMess");
      if(billMess == null) {
         out.print("没有账单");  
         return;
      }
      double bill = getPriceSum(billMess); //账单金额。
      double billDiscount = bill*(discount/10); //优惠后的金额。
      out.print("<h2>"+billMess+"<br>消费:"+bill+"圆"); 
      out.print("优惠"+discount+"折<br>后的金额:"+billDiscount+"圆");       
      out.print("</h2></body></html>");
   } 
   public double getPriceSum(String input){  // 定义方法
      Pattern pattern;          //模式对象
      Matcher matcher;          //匹配对象
      String regex="-?[0-9][0-9]*[.]?[0-9]*" ;//匹配数字的正则表达式
      pattern = Pattern.compile(regex);  //初试化模式对象
      matcher = pattern.matcher(input);  //初始化匹配对象,用于检索input
      double sum = 0;
      while(matcher.find()) {
         String str = matcher.group(); 
         sum += Double.parseDouble(str);
      } 
      return sum;
   }
}

5 web.xml

<web-app>
<servlet-name>computeBill</servlet-name>
<servlet-class>moon.sun.Example6_3_Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>computeBill</servlet-name>
<url-pattern>/computeBill</url-pattern>
</servlet-mapping>
</web-app>

四 共享变量

在servlet声明的成员变量可以被所有访问这个servlet的用户共享

用户对servlet属性的修改会影响其他用户

五 重定向和转发

重定向的功能是用户从当前页面或servlet重定向到另一个jsp页面或servlet,因此,重定向的目标页面或servlet无法用request获取用户提交的数据

转发的功能是用户对当前页面或servlet的请求转发给另一个jsp页面或servlet

1重定向(sendredirect())

2转发(forward())

1得到RequestDispatcher对象,通过servlet调getRequestDispatche

r(string path),path是一个isp页面的url或servlet的url-pattern

2转发。在步骤1中得到的RequestDispatcher对象调用forward( ServletRequest request,ServletResponse response)转发到jsp页面或servlet

3 区别 

用户可以看到转发到的页面或servlet运行效果,到时看不到“转发到的页面或servlet运行效果”的url

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值