jsp学习(四.JSP内置对象与Svervlet学习(1))

JSP内置对象与Svervlet将同时开始学习

目录

  • JSP内置对象
    • request对象
  • Servlet基础
    • 运行servlet需要的文件
      • WEB.XML文件:
    • example
    • 遇到的问题

JSP内置对象

request对象

jsp学习(四.JSP内置对象与Svervlet学习(1))_第1张图片

<%@ page contentType="text/html" %>
<%@ page pageEncoding="utf-8"%>
<%@  taglib tagdir="/WEB-INF/tags/"  prefix="getTriangleArea"%>
<%! 
	double a = 3;
	double b = 4;
	double c = 5;
%>
<html>
<body>
<p>

	面积<%=a%>
<getTriangleArea:getTriangleArea1 sideA="3" sideB="4" sideC="5"/>
</p>
</body>
</html>
<%@ tag pageEncoding="utf-8"%>
<%@ attribute name="sideA" required="true"%>
<%@ attribute name="sideB" required="true"%>
<%@ attribute name="sideC" required="true"%>

<%! public String getArea(double a, double b, double c){
	if (a+b>c && a+c>b && b+c>a)
	{
			double p = (a + b + c)/2;
	double area = Math.sqrt(p*(p-a)*(p-b)*(p-c));
	String result = String.format("%.2f",area);
	return "三角形的面积为:"+result;
	}
	else
	{
		return "不能构成三角形";
	}

}
	
%>

<%
	double a = Double.parseDouble(sideA);
	double b = Double.parseDouble(sideB);
	double c = Double.parseDouble(sideC);
	out.print(getArea(a,b,c));
%>

Servlet基础

Servlet是小型服务器程序,是拿来处理与响应用户的服务器程序,其实JSP就是servlet的简单一类

运行servlet需要的文件

WEB.XML文件:

这个项目的配置文件,需要在创建项目的时候勾上


<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>servletemo1_kaoyadisplay-name>
  <welcome-file-list>
    <welcome-file>index.htmlwelcome-file>
    <welcome-file>index.htmwelcome-file>
    <welcome-file>index.jspwelcome-file>
    <welcome-file>default.htmlwelcome-file>
    <welcome-file>default.htmwelcome-file>
    <welcome-file>default.jspwelcome-file>
  welcome-file-list>
    <servlet>
  	<servlet-name>servlet01servlet-name>
  	<servlet-class>com.ljq.firstservletservlet-class>
  servlet>
  <servlet-mapping>
  	<servlet-name>servlet01servlet-name>
  	<url-pattern>/servlet01url-pattern>
  servlet-mapping>
  <servlet>
  	<servlet-name>ServletDemo01servlet-name>
  	<servlet-class>com.ljq.ServletDemo01servlet-class>
  servlet>
  <servlet-mapping>
  	<servlet-name>ServletDemo01servlet-name>
  	<url-pattern>/servlet02url-pattern>
  servlet-mapping>
web-app>

属性说明

:当用户直接访问这个项目的地址时,服务器会一次查找里面的页面,如果没有就是404

:设置servlet的路径和名称
子属性有:
分别是名称和生产servlet的类(名称可以自己定)

:设置这个servlet给如何访问 子属属性
:同上
:比如我设置为 a1 ,用户访问这个servlet就是项目地址/a1

example

下面通过一个example讲解一下servlet

这是一个计算money的例子,在对话框利输入菜品和价格,计算出折扣后的价格,折扣是多少呢?为什么没有折扣的输入框,因为我想练习一下url-pattern额外传参

先看一下项目布局(重要,放不对位置就404):
整个项目叫servletemo1_kaoya
Java Resources子目录src里就是servlet文件
webContent就和在Tomcat里面的webapps/root的目录一样,是网页的根地址

jsp学习(四.JSP内置对象与Svervlet学习(1))_第2张图片
这个例子的功能:
jsp学习(四.JSP内置对象与Svervlet学习(1))_第3张图片
jsp学习(四.JSP内置对象与Svervlet学习(1))_第4张图片

代码

index.jsp(上图第一个界面)

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
<style>
.bg {
	width: 400px;
	height: 300px;
	background-color: red;
	margin:100px auto;
}
</style>
</head>
<body>
	<div class="bg">
	<!-- 发送给servlet01这个servlet并且附带参数discount,不能有空格-->
		<form action="servlet01?discount=6" method="post" id="te">
			<textarea name="billMess" rows="5" cols="30" id="te">
				剁椒鱼头:13.5元
				烤鸭:199元
				<%= request.getContextPath()%>
			</textarea>
			<!-- <input type=text name="discount">
			</input> -->
			<br><input type=submit value="提交">
		</form>
	<div>
</body>
</html>

firstservlet.java(上图第二个界面)
看里面注释

package com.ljq;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.security.auth.message.callback.PrivateKeyCallback.Request;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class firstservlet extends HttpServlet{
	
	@Override
	public void init(ServletConfig config) throws ServletException {
		// TODO Auto-generated method stub
		//这是一个初始化方法,类似与构造函数,但这个方法是继承的父亲的一个方法
		super.init(config);
	}

	@Override
//	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//		// TODO Auto-generated method stub
//		// TODO Auto-generated method stub
//
//	}

//这里先介绍三个可以继承的方法
//1. doPost 当用户的请求是post时执行
//2. doGet 当用户的请求是get时执行
//3. service 判断用户是那种请求方式
//下面使用doPost
//req(请求):是其他页面发过来的请求,可以获取参数,设置编码等等
//resp (响应):是服务器(这个servlet界面)的需要回复给浏览器的东西,可以设置浏览器的编码方式,可以获取浏览器的输入流
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");//设置编码
		resp.setContentType("text/html;charset=utf-8");//设置浏览器的编码方式
		PrintWriter out = resp.getWriter();//获取浏览器的输入流
		//下面是java的类容
		out.print("");
		String discountString = req.getParameter("discount");
		String billString = req.getParameter("billMess");
		if (billString == null || discountString==null) {
			out.print("billString:"+billString+"
discountString:"
+discountString); out.print("
错误"
); return; } double discount = Double.parseDouble(discountString); double price = getPriceSum(billString,discount); out.print(billString+"


打"
+discount+"折后价格:"+price); out.print(""); } public double getPriceSum(String input,double discount) { Pattern pattern; Matcher matcher; //正则表达式 见后面 String regex = "-?[0-9]+[.]?+[0-9]+"; pattern = Pattern.compile(regex); matcher = pattern.matcher(input); double sum = 0; while (matcher.find()) { double t = Double.parseDouble(matcher.group()); sum += t; } return sum * discount / 10; } }

jsp学习(四.JSP内置对象与Svervlet学习(1))_第5张图片
web.xml配置


<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>servletemo1_kaoyadisplay-name>
  <welcome-file-list>
    <welcome-file>index.htmlwelcome-file>
    <welcome-file>index.htmwelcome-file>
    <welcome-file>index.jspwelcome-file>
    <welcome-file>default.htmlwelcome-file>
    <welcome-file>default.htmwelcome-file>
    <welcome-file>default.jspwelcome-file>
  welcome-file-list>
    <servlet>
  	<servlet-name>servlet01servlet-name>
  	<servlet-class>com.ljq.firstservletservlet-class>
  servlet>
  <servlet-mapping>
  	<servlet-name>servlet01servlet-name>
  	<url-pattern>/servlet01url-pattern>
  servlet-mapping>
  <servlet>
  	<servlet-name>ServletDemo01servlet-name>
  	<servlet-class>com.ljq.ServletDemo01servlet-class>
  servlet>
  <servlet-mapping>
  	<servlet-name>ServletDemo01servlet-name>
  	<url-pattern>/servlet02url-pattern>
  servlet-mapping>
web-app>

遇到的问题

1.没有搞清楚index.jsp中action属性需要填什么
开始直接填的servlet的名字,访问不了。
需要填映射地址servlet01

2.如果运行网页的时候没有出现该出现的类容,请查看console窗口,
因为你的程序写错了,可能会造成子容器启动失败等异常,特别注意空指针

3,注意版本,新版本已经舍去了dynamic web project项目,我们没必要使用新版本,我用的sts4 为4.6版本,jdk为1.8,tomcat为9

你可能感兴趣的:(jsp,jsp,后端)