当前位置: 首页 > news >正文

idea怎么运行jsp页面_【学习笔记】Jsp与Servlet技术

Jsp与Servlet技术

一.为什么要学习Jsp?

  • 我们以前学的都是静态网页的编程,比如 html之类的,我们希望静态网页能够有动态特性,则需要使用到 jsp技术。

  • Jsp页面大体由 html代码和 java代码组成。

【Demo01】使用Idea配置好Tomacat服务器,运行jsp项目。

  Created by IntelliJ IDEA.
User: 编程小哥令狐
Date: 2020/7/19
Time: 14:42
To change this template use File | Settings | File Templates.
--%>





第一个Jsp页面


id姓名
String color1="99caff";
String color2="88cc33";
for(int i=1;i<=10;i++){
String color="";
if(i%2==0){
color=color1;
}else{
color=color2;
}
out.println("");
out.println(""+i+"");
out.println("姓名"+i+"");
out.println("");
}
%>



7669c74d9193da90f377c0aa9d8fc71f.png

1.1Jsp工作原理

  • Jsp的工作对象分为:客户端,服务器端(包含了jsp引擎)

  • Jsp动作方式: 请求和 响应

  • 工作流程与原理:

  1. 客户端发送数据请求,web服务器接收到,将这个页面请求交给Jsp引擎处理。【常见的引擎Tomacat】。

  2. Jsp引擎将提交过来的页面准换成java源文件,Jsp源文件。进行编译,解析后生成Html文件发送到服务器端。客户端接收到服务器端响应之后展示信息给用户

093b93d8b28f8257f55fecf3a180c3b1.png

1.2实例—提交表单/发送数字/显示内容次数

1.2.1项目目录结构及其代码

  • **需求:**用户输入并提交Hello world打印的次数。

  • 一个html文件,一个jsp文件

08d14d28e58a584ded25f7ed92965001.png

html部分代码:

<html lang="en"><head><meta http-equiv="Content-Type" content="text/html" charset="UTF-8"><title>理解JSP工作原理title>head><body><p>请输入显示的次数:p><form action="index.jsp" method="get"><input type="text" name="times"><input type="submit" value="提交">form>body>html>

jsp部分代码:

  Created by IntelliJ IDEA.
User: 编程小哥令狐
Date: 2020/7/20
Time: 8:03
To change this template use File | Settings | File Templates.
--%>




理解JSP工作原理



int times=Integer.parseInt(request.getParameter("times"));
for(int i=0;i out.println("Hello world");
out.println("
");
}
%>






7549af45aa8d3d10122c59e7ef27045d.png
74b5c0d5ba8b6bf3f1d460f244539e4c.png

二.Jsp的构成

32a508fcf167bb1dd2be6f11691cdb91.png

三.JSP内建对象

在所有的JSP页面中都需要使用内部对象

常见的额JSP对象有:

  • out对象

out.print()和 out.println()方法都可以向客户端发送数据

  • request对象

对象请求,通过 getParameter()方法可以得到 request的参数

  • response对象

封装了JSP产生的响应。

  • session对象

保存用户操作状态,用户信息。

  • application对象

保存多个应用对象的信息

3.1使用Request对象案例

<html lang="en"><head><meta charset="UTF-8" http-equiv="Content-Type" content="text/html"><title>数据输入title>head><body><form method="post" action="requstDemo.jsp"><table><tr><td>请输入登录名:td><td><input type="text" name="name">td>tr><tr><td>请输入密码:td><td><input type="password" name="password">td>tr><tr><td><input type="submit" value="登录">td>tr>table>form>body>html>
  Created by IntelliJ IDEA.
User: 编程小哥令狐
Date: 2020/7/20
Time: 17:33
To change this template use File | Settings | File Templates.
--%>



request对象的使用


Request对象的信息:

out.println("
getMethod:");
out.println(request.getMethod());
out.println("
getParameter:");
out.println(request.getParameterNames());


%>



22b7425c0623bbf22ab76a01a469ebc6.png

3.2使用JavaBean创建商品信息展示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eaL6pswO-1595475011561)(Jsp与Servlet技术.assets/20200721102536.png)]

package demo;

public class CommodityInfoBean {
private String name;
private Float price;
private String status;

public String getName(){
return name;
}

public void setName(String name){
this.name=name;
}

public Float getPrice(){
return price;
}

public void setPrice(Float price) {
this.price = price;
}
public String getStatus(){
return status;
}

public void setStatus(String status) {
this.status = status;
}
public CommodityInfoBean(){
this.name="惠普笔记本电脑CQ515";
this.price=2950.0f;
this.status="在售";
}
}

  Created by IntelliJ IDEA.
User: linghu
Date: 2020/7/21
Time: 1:06
To change this template use File | Settings | File Templates.
--%>






显示商品信息



商品信息如下:


名称:


价格:


状态:




[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q9FzQdZA-1595475011985)(Jsp与Servlet技术.assets/20200721102536-1595404378410.png)]

Servlet技术

1.1Servlet技术介绍

  • Servlet是一个 Java类

  • Servlet部署在容器里,他的生命周期由容器管理。

1.1.1Servlet生命周期

生命周期如下几个阶段:

  1. 装载 Servlet

  2. 创建 Servlet实例

  3. 调用Servletintit()方法

  4. 容器接收到Servlet的请求后将调用Service()方法

  5. 实例被销毁,利用方法destory()

1.1.2使用HttpServlet处理客户端请求

  • doGet

ce1df25b7b7d5c2b2b535c2db3ae1f70.png

<html lang="en"><head><meta charset="UTF-8" http-equiv="Content-Type" content="text/html"><title>使用Get调用传递参数title>head><body><form action="doGetDemo" method="get">
请输入参数:<input type="text" name="name"/><input type="submit" value="提交"/>form>body>html>
package code1203;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name = "doGetDemo",urlPatterns = "/doGetDemo")
public class doGetDemo extends HttpServlet {
/*意思bai是定义程序序列化ID。序列化ID等同于du身份验证,主要zhi用于程序的版本dao控制,维护不同版本的兼容性以及避免在程序版本升级时程序报告的错误。*/
private static final long serialVersionUID=1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
request.setCharacterEncoding("gb2312");
response.setContentType("text/html;charset=gb2312");
PrintWriter out=response.getWriter();
out.println("获得一个参数值:name=
"+request.getParameter("name"));
out.flush();

}

}

ace954a3bb6a814f2a4deee792eb4c2e.png8d6f55f93a80d5c237a01573258b0cfd.pngdoPost

<html lang="en"><head><meta charset="UTF-8" http-equiv="Content-Type" content="text/html"><title>使用Post调用传递参数title>head><body><form action="doPostDemo" method="post">
请输入参数:<br><label><textarea rows="10" cols="50" name="data">textarea>label><br><input type="submit" value="提交">form>body>html>
package code1203;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/doPostDemo")
public class doPostDemo extends HttpServlet {
/*意思bai是定义程序序列化ID。序列化ID等同于du身份验证,主要zhi用于程序的版本dao控制,维护不同版本的兼容性以及避免在程序版本升级时程序报告的错误。*/
private static final long serialVersionUID=1L;

protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
request.setCharacterEncoding("gb2312");
response.setContentType("text/html;charset=gb2312");
PrintWriter out=response.getWriter();
out.println("获得一个参数值:data=
"+request.getParameter("data"));
out.flush();

}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-upbQ7tff-1595475011569)(Jsp与Servlet技术.assets/20200721210338.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fDvUWHYH-1595475011987)(Jsp与Servlet技术.assets/20200721210339.png)]

1.2Jsp与Servlet开发

**需求:**编写一个简单的Web应用,实现用户登录的功能

  • 采用模式二技术栈开发

JavaBean+Jsp+Servlet

package code1205;

public class UserBean {
private String validUserName;
private String validUserPassword;

public String getValidUserName(){
return validUserName;
}

public void setValidUserName(String validUserName){
this.validUserName=validUserName;
}

public String getValidUserPassword(){
return validUserPassword;
}

public void setValidUserPassword(String validUserPassword){
this.validUserPassword=validUserPassword;
}
//验证账户密码
public boolean isValidUser(String name,String password){
boolean result=false;
if(validUserName.equals(name)&&validUserPassword.equals(password)){
result=true;
}
return result;
}

}

package code1205;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.http.HttpResponse;

@WebServlet("/userLogin")
public class UserLogin extends HttpServlet {
private static final long serialVersionUID=1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)throws IOException {
/*
* request.getParameter就是把jsp里的内容读取出来进行封装
* */
String name=request.getParameter("name");
String password=request.getParameter("password");

//设置合法的用户信息
UserBean user=new UserBean();
user.setValidUserName("admin");
user.setValidUserPassword("admin");

response.setCharacterEncoding("gb2312");
response.setContentType("text/html;charset=gb2312");
PrintWriter out=response.getWriter();
if(user.isValidUser(name,password)){//调用javaBean的方法来验证用户
out.println("登录成功");
}else {
out.println("用户登录名或者密码错误,请重试");
}

}
protected void doPost(HttpServletRequest request, HttpResponse
response)throws IOException{
doGet(request, (HttpServletResponse) response);
}

}

  Created by IntelliJ IDEA.
User: Administrator
Date: 2020/7/22
Time: 14:59
To change this template use File | Settings | File Templates.
--%>




用户登录


用户名:密码:



997363ff9aeed370e3827eaf0fde5d88.png

169442484737bd2df54d2dd96f6c6097.png

5a256d2ffbc2ef234020000c38c99eb0.png


| 登录页面 |
| ----------------------------------------------- |
| [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hya5orZK-1595475011990)(Jsp与Servlet技术.assets/20200722160324.png)] |

| 登录成功 |
| ----------------------------------------------- |
| [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S1oj0t8Y-1595475011991)(Jsp与Servlet技术.assets/20200722160325.png)] |

| 登录失败 |
| ----------------------------------------------- |
| [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lMoyUbLk-1595475011992)(Jsp与Servlet技术.assets/20200722160326.png)] |

相关文章:

  • 获取js渲染后的html_关键渲染路径
  • python merge on多个条件_Python数据核对系列之2—power query VS pandas
  • C语言使用递归法计算n的阶乘
  • python解释器与编译环境_python入门之解释器环境安装
  • HDU 1299 基础数论 分解
  • simpledateformat格式_2020 年,你还在使用 Java 中的 SimpleDateFormat 吗?
  • 人生苦短我学python谁说的_人生苦短,我学python
  • [PY3]——logging
  • python笔记视频_python视频笔记之三(循环和函数)
  • 洛谷P3003 [USACO10DEC]苹果交货Apple Delivery
  • linux添加ip白名单_为什么IP代理需要授权?
  • 事件对象练习
  • yii beforeaction 如何赋值全局变量_讲讲 js 的内存泄漏、如何监控和分析
  • Java基础总结--变量、运算符总结
  • boolean mybatis_mybatis的环境搭建以及问题
  • 345-反转字符串中的元音字母
  • Android开源项目规范总结
  • crontab执行失败的多种原因
  • Docker容器管理
  • Git 使用集
  • JavaScript 基本功--面试宝典
  • mysql常用命令汇总
  • 从PHP迁移至Golang - 基础篇
  • 大快搜索数据爬虫技术实例安装教学篇
  • 关于for循环的简单归纳
  • 观察者模式实现非直接耦合
  • 盘点那些不知名却常用的 Git 操作
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 使用agvtool更改app version/build
  • 一起参Ember.js讨论、问答社区。
  • 用jQuery怎么做到前后端分离
  • 正则表达式
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (4) PIVOT 和 UPIVOT 的使用
  • (vue)页面文件上传获取:action地址
  • (二)linux使用docker容器运行mysql
  • (二)构建dubbo分布式平台-平台功能导图
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • ****Linux下Mysql的安装和配置
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NetCore项目nginx发布
  • .net项目IIS、VS 附加进程调试
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • /etc/fstab和/etc/mtab的区别
  • /etc/motd and /etc/issue
  • /usr/bin/env: node: No such file or directory
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • [.net]官方水晶报表的使用以演示下载
  • [1]-基于图搜索的路径规划基础
  • [2016.7 test.5] T1
  • [Android] Android ActivityManager
  • [AutoSar]BSW_Memory_Stack_003 NVM与APP的显式和隐式同步