java深入探究07-jsp
RequestDispatcher
是web资源包装类
<jsp:include>只能实现固定jsp文件名
他可以翻译为:RequestDispatcher(filename).include(request,response);
这里实现的是:跳转到指定的fileName地址,包含
转发重定向区别:
requset,response信息一起过去
我们可以把它想成一个web资源的盒子,用来对web资源封装好一起处理
转发:请求不变只是请求发给服务器后,服务器将请求还了一个给浏览器,所以浏览器的url不变
重定向:发送请求给服务器,服务器response回一个新的链接给浏览器,让浏览器从新发送一个请求给服务器,这就是重定向,之前的request中的保存的东西也就不在了,我们能看到的区别就是url变了
1.为什么出现JSP
Servlet是动态开发语音,而jsp是可以html与Servlet结合的不仅能编写java代码可以布局样式,类似于.NET中的cshtml
2.Jsp的执行过程
a) 找到Tomcat的work目录存放jsp的临时文件-》翻译成java文件-》编译成class文件-》构造类对象-》调用方法
b) Jsp中html部分被编译到Servlet中server方法中,java部分被编译到jsp_server中
3.Jsp的生命周期
a) Servlet生命周期
构造方法-》init方法-》service方法-》destroy方法
b) Jsp的生命周期
翻译jsp->java->编译java-class->构造方法-》init方法-》service方法-》destory方法
4.Jsp语法
a) Jsp模板:html部分就是jsp模板
b) Jsp表达式:<%=变量或表达式 %>想浏览器输出变量或表达式结果,out.writer();
c) Jsp脚本:<% java脚本 %> jsp编译器直接将这部分代码复制到jsp_service()方法
d) jsp声明:<%!变量或方法%>声明jsp的成员变量和成员方法
e) Jsp注释:<%!--jsp注释-->
5.Jsp的三大指令
a) Include指令
- 静态引入其他页面,将两个jsp文件翻译为一个java文件,所以不能出现重复的模板html部分代码
- 语法:<%include file=”path路径”%>
b) Page指令
- 告诉tomcat怎么将jsp文件翻译为java文件
- 例子:
<% page import=”java.lang.util.*”
Language=”java”
pageEncoding=”utf-8”
contentType=”text/html; charset=utf-8”
errorPage=”” //指定当前错误页面的处理页面
isPageError=false;指定当前页面是否是错误处理页面,是的话可以用jsp内置错误对象exception,反之不可
%>
配置全局的错误处理页面方式
在web.xml中设置:不同的错误代码调到不同的错误页面全局配置
<!-- 全局错误处理页面配置 -->
<error-page><error-code>500</error-code><location>/common/500.jsp</location></error-page><error-page><error-code>404</error-code><location>/common/404.html</location></error-page>
Session=true;
Buffer=8kb; jsp页面的缓存器大小
isELIngore=false 是否忽略EL
例子:语法例子
<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"import="java.util.*"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>jsp语法</title> </head> <body><!-- jsp表达式 --><%//变量String name="xiaoping";int a=10;int b=20;%><%=name %><%=(a-b) %><!-- jsp脚本 --><%//生成随机数Random d=new Random();float num=d.nextFloat();%><%for(int i=1;i<6;i++){%><!-- 穿插html 代码 --><h<%=i %>>标题<%=i %></h<%=i %>><%}%><!-- 练习:使用html代码显示99乘法表 --><%for(int i=1;i<9;i++){for(int j=1;j<9;j++){%><%=i %> x <%=j %>=<%=(i*j) %> <%}%><br/><% }%><%String age="20";%><!-- jsp声明 --><%!String name="xiaoping";public String getName(){return name;}%><!-- html注释 --><%-- <jsp:forward page="/jsp1/index/jsp">内置标签</jsp:forward> --%><%-- jsp注释--%> </body> </html>
View Code
c) Taglib指令
- 引入标签
6.jsp的内置对象
a) 内置对象
在Jsp开发中我们会频繁用到一些对象,一一创建太麻烦,sun提供了内置对象为我们创建好了,目前有8种重要的内置对象
Response,request,config(ServletConfig),pageContext,out(jspWriter),application(ServletContext),page(Object this),exception(Throwable)
b) 内置对象详解
- Out对象
- jspWriter类型向缓冲区写内容;printWriter向浏览器写内容
- 什么情况下缓冲区内容会输出:溢出;刷新;关闭;执行完毕jsp页面
- PageContext
在定义标签的时候pageContext时常使用
- 就是ServletContext对象就是PageContext类型可以获取其他八种内置对象
a) 原因:在将jsp中java代码部分翻译到jsp_Service()中去时在这里面创建完8中内置对象,之后又将这8中对象封装到pageContext中了
b) 调用方法:pageContext.getXXX();
- 本身也是域对象下面四个域对象pageContext都能用
a) ServeltContext context域
b) PageContext; page域
c) HttpSession; session域
d) HttpServletRequest Request域
一:保存数据
1)默认情况保存的是page域:PageContext.setAttribute(“name”);
2)可以向四个域中保存对象:PageContext.setAttribute(“name”,域范围常量)
二:获得数据
1)默然情况获得page域的:PageContext.getAttribute(“name”);
2)可以向四个域中保存对象:PageContext.sgetAttribute(“name”,域范围常量)
3)自动从四个域中查找:pageContext.findAttribute("name");
4)域范围常量:
PageContext.PAGE_SCOPE
PageContext.REQUEST_SCOPE
PageContext..SESSION_SCOPE
PageContext.APPLICATION_SCOPE
5)域顺序:page->request->session->appliction(serlvetContext)
6)这四个域的作用范围:
a) Page域:只能在jsp页面当前页面使用
b) Request域:只能在同一个请求中使用
c) Session域:只能在同一个回话中使用
d) Context域:可以在整个web应用中使用
例子:
<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"import="java.util.*"session="true"isErrorPage="true"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>测试jsp的语法</title> </head> <body> <!-- 内置对象 --><!-- pageContext --><%/* 1)可以获取其他8种内置对象 */response.getWriter().write("是否相等?"+(out==pageContext.getOut())+"<br/>");%><!-- 域对象 --><!--pageContext:作用于当前jsprequest:作用于同一请求session:作用于同一回话context:作用于当前web --><%//保存数据,默认情况,保存到page域中pageContext.setAttribute("message","page's message");pageContext.setAttribute("message", "session's message", PageContext.SESSION_SCOPE);//保存到session 中pageContext.setAttribute("message", "request's message", pageContext.REQUEST_SCOPE);//保存到request域中//request.setAttribute("message", "request's message")//等价于上面一个%><%//获取数据,默认情况保存在page域中String message=(String)pageContext.getAttribute("message");out.write(message);%><!-- 从Request域中获取对象原则:1)在哪个域保存数据,就必须从哪个域中取出数据 --><%=pageContext.getAttribute("message",PageContext.PAGE_SCOPE) %><br/><%=pageContext.getAttribute("message",PageContext.REQUEST_SCOPE) %><br/><%=pageContext.getAttribute("message",PageContext.SESSION_SCOPE) %><br/><%=pageContext.getAttribute("message",PageContext.APPLICATION_SCOPE) %><br/><!-- 按照一定的顺序查找查找顺序:page域-》request-》session域-》Context域原则小范围到大范围 --><%=pageContext.findAttribute("message") %><!-- 转发从定向 --><%//装发request.getRequestDispatcher("/jsp1/index.html");//从定向/* response.sendRedirect("/jsp1/index.html"); */%></body> </html>
View Code
7.Jsp与Servlet如何结合
a) Jsp+Servlet模式
Jsp通过java代码擅长输出html
Servlet任务:
接受参数-》处理逻辑代码-》将结果保存在域对象中-》跳转到jsp界面
Jsp任务:
从域对象中获得数据-》把数据显示在浏览器中
例子:百万富翁竞猜游戏
jsp:
<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"import="java.util.*"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>百万富翁竞猜游戏</title> </head> <body><%//显示提示信息String msg=(String)request.getAttribute("msg");if(msg!=null){out.write("<font color='red'>"+msg+"</font>");}%><%//获取竞猜次数Integer times=(Integer)request.getAttribute("times");if(times!=null){out.write(",你还有"+(5-times)+"次机会!");}%><!-- 提交表当数据 --><form action="/jsp1/GuessServlet" method="post">请输入30以下的整数:<input type="text" name="lucyNo"/><!-- 这里可以提交我们的尝试次数 --><%if(times!=null){%><input type="hidden" name="times" value="<%=times%>"/><%}%><input type="submit" value="开始竞猜"/></form> </body> </html>
View Code
Servlet
package Servlet;import java.io.IOException; import java.util.Random;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;/*** 产生一串幸运数字*/ public class GuessServlet extends HttpServlet {private static final long serialVersionUID = 1L;int answer;/*** 新游戏方法。产生一个新的幸运数字*/public void newGame(){Random random = new Random();answer = random.nextInt(30);}public GuessServlet(){//第一次访问 newGame();}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8");//1.接收输入的数字String lucyNoStr = request.getParameter("lucyNo");System.out.println("答案:"+answer);Integer lucyNo = null;//2.判断幸运数字和用户的数字//2.1 把用户输入的数字转成整数if(lucyNoStr!=null || !lucyNoStr.equals("")){lucyNo = Integer.parseInt(lucyNoStr);}//标记记录当前竞猜的次数Integer times = 1;//初始值//接收客户当前竞猜次数String timesStr = request.getParameter("times");if(timesStr!=null && !timesStr.equals("")){times = Integer.parseInt(timesStr)+1;}if(times<5){String msg = "";//比较if(lucyNo>answer){//大了msg = "可惜,大了点";}else if(lucyNo<answer){//小了msg = "可惜,小了点";}else if(lucyNo==answer){//等于,中奖msg = "恭喜你,中得1000000元现金大奖,请带身份证到xxx地方领奖!";times = null;}//把当前竞猜的次数放入域对象request.setAttribute("times", times);//把信息放入域对象中request.setAttribute("msg", msg);}else{//产生新的幸运数字 newGame();//游戏结束response.getWriter().write("游戏结束。<a href='"+request.getContextPath()+"/05.guess.jsp'>再来一盘</a>");return;}//转发request.getRequestDispatcher("/05.guess.jsp").forward(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub doGet(request, response);}}
View Code
8.EL表达式
1)出现的原因
jsp开发的原则:jsp页面少写甚至不写java代码;就出现了EL 来代替jsp中的java部分代码
作用:想浏览器输出域对象中的变量值或者表达式计算的结果
2)语法
a)获取标识符数据${标识符}:内部原理是调用了PageContext.findAttribute(标识符)从request,session,application,page域对象中找对应的值找不到就放回null
b)获取javabean中的属性,数组,Collection,Map类型的集合中的数据
${user.address.city}
${user.list[0]}:访问有序集合中的摸个位置元素
3)11个隐式对象web开发常用对象
$(隐式对象名称):获得对象的引用
c)注意事项:
EL表达式是JSP2.0规范中的一门技术,想要正确解析,需要支持Servlet2.4、JSP2.0技术
如果Tomcat不能使用EL表达式
、 升级Tomcat6.0;<% page isELIgnored=false%>
例子:
<%String name="xiaoping";//放到域对象总pageContext.setAttribute("name", name);%><%--1)从四个域中自动搜索EL表达式:${name}等级与<%=pageContext.findAttribute("name")%>2)从指定与中获取对象:EL有12种隐式对象${pageScope.name}等价于:<%=pageContext.getAttribute("name",PageContext.pageScope)%>--%>${pageScope.name }<!-- 2.输入不同类型的数据 --><%Student student=new Student("xiaoping",20);pageContext.setAttribute("student", student);%><%--使用EL获取对象 --%>${student.name}-${student.age}<!-- 3。EL表达式 -->${10+5}${10>5 }${true&&false}${empty name}
View Code
9.Jsp标签
1)出现原因:
替代jsp中java代码,代码简化
2)标签分类:
内置标签;自定义标签;jstl(java Standard tag libarary java标准标签库)
想要使核心标签:需要先将核心标签导入
a)内置标签:
<jsp:forward>//request.getRequestDipsacher("/路径").forward(request,response);
<jsp:param/> 参数标签 ?name=eric
<jsp:include> 包含其他页面,动态包含
b)jstl:
使用步骤:
1)导入包到项目中
2)在jsp页面中导入标签库
<%@taglib url="标签库声明文件tld文件的标记" prefix="前缀"%>
3)使用标签库中的标签
核心标签库:
<c:set /> 保存数据到域对象中
<c:out/> 从域中取出数据
<c:if/> 单条件判断
<c:choose/> + <c:when/> + <c:otherwise/> 多条件判断
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=gb2312" %> <c:set value="${param.count}" var="count“ /> <c:choose><c:when test="${count == 0}">对不起,没有符合您要求的记录。</c:when><c:otherwise>符合您要求的记录共有${count}条.</c:otherwise> </c:choose>
View Code
<c:forEach /> 遍历数据
varStatus="": 当前正在遍历元素的状态对象。(count属性:当前位置,从1开始)
<c:forTokens/> 遍历特殊字符串
<c:redirect/> 重定向
例子:
<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"import= "java.util.*,Servlet.Student"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> </head> <body> <!-- 动作标签 --><%--转发 --%><%//request.getRequestDispatcher("urlpath").forward(request, response);%><%--参数--%><%-- <jsp:forward page="url地址"><jsp:param value="name" name="value"/><jsp:param value="name" name="value"/></jsp:forward> --%><%--包含 --%><jsp:include page="/common/header.jsp"><jsp:param value="name" name="value"/></jsp:include><%@include file="/common/header.jsp" %><!-- 两个包含的区别:前者是包含被编译后的文件;后者是包含没有编译的文件html --><!-- 核心标签库 --><%--1.需要导入标签连接:<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>2.<c:out/><c:set/><c:if/><c:foreach/><c:forTokens/><c:redrect/>--%><c:set var="name" value="xiaopinig" scope="request"></c:set>${name }<%-- default: 当value值为null时,使用默认值escapeXml: 是否对value值进行转义,false,不转义,true,转义(默认) --%><c:out value="${name }" default="<h3>标题3</h3>" escapeXml="true"></c:out><c:if test="${empty msg}" var="aaa" >条件成立</c:if><!-- choose标签+when标签+otherwirse标签: 多条件判断 --><c:set var="score" value="56"></c:set><c:choose><c:when test="${score>=90&&score<=100 }">优秀</c:when><c:when test="${score>=90&&score<=100 }">优秀</c:when><c:when test="${score>=90&&score<=100 }">优秀</c:when><c:when test="${score>=90&&score<=100 }">优秀</c:when></c:choose><%-- <c:forEach></c:forEach> --%><%//ListList<Student> list = new ArrayList<Student>();list.add(new Student("rose",18));list.add(new Student("jack",28));list.add(new Student("lucy",38));//放入域中pageContext.setAttribute("list",list);//MapMap<String,Student> map = new HashMap<String,Student>();map.put("100",new Student("mark",20));map.put("101",new Student("maxwell",30));map.put("102",new Student("narci",40));//放入域中pageContext.setAttribute("map",map);%><hr/><c:forEach items="${list }" var="student" varStatus="varSta">序号:${varSta.count }-姓名:${student.name }-年龄:${student.age }<br/></c:forEach><%-- <c:forTokens items="" delims=""></c:forTokens> 循环特殊字符串--%><%String str="sdfas-df-a-sdf-a";pageContext.setAttribute("str", str);%><c:forTokens items="${str }" delims="-" var="s">${s }<br/></c:forTokens><!-- redrict:重定向 --><c:redirect url="http://www.baidu.com"></c:redirect> </body> </html>
View Code
c)自定义标签
步骤:编写java类继承SimpleTagSupport类,叫标签处理器-》
在web项目的WEB-INF目录下建立tld文件,这个tld叫标签库的声明文件-》
在jsp页面头部导入自定义标签:<%@taglib uri="http://gz.itcast.cn" prefix="itcast"%>-》最后再使用
自定义标签的执行过程:
访问jsp文件,tomcat把jsp文件编译成class文件-》构造对象,调用_jspService()方法-》
检查jsp的tablib标签,是否存在tld文件,不存在就报错-》存在后读到子标签查询tld文件中是否有这个对象-》
找到了就找到了class文件-》构造对象调用方法
构造ShowIpTag对象,然后调用ShowIpTag里面的方法
生命周期:
SimpleTag接口:
setParent(JspTag parent); //设置父标签
setJspContext(JspContext context);//获得PageContext内置对象
setXXX(值); //设置属性,前提是在定义一个私有变量
doTag(); //执行标签时调用的方法
setJspBody(JspFrament jspBody) //设置标签体内容,内容封装到JspFragment
输出标签体内容格式:
JSP: 在传统标签中使用的。可以写和执行jsp的java代码。
scriptless: 标签体不可以写jsp的java代码
empty: 必须是空标签。
tagdependent : 标签体内容可以写jsp的java代码,但不会执行
例子:
java文件:
public class ShowIpTag extends SimpleTagSupport{@Overridepublic void doTag()throws JspException, IOException {//向浏览器输入客户端ip地址PageContext page=(PageContext)this.getJspContext();HttpServletRequest request=(HttpServletRequest) page.getRequest();String host=request.getRemoteHost();JspWriter out=page.getOut();out.write("使用自定义标签输出客户的IP地址:"+host);}}
View Code
tld文件
<?xml version="1.0" encoding="UTF-8"?> <taglib xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"version="2.1"><!-- 标签可的版本 --><tlib-version>1.1</tlib-version><!-- 标签库的前缀 --><short-name>Mybiaoqian</short-name><!-- tld文件唯一标记 --><uri>http://xiaoping.com</uri><!-- 标签的声明 --><tag><name>showIp</name><tag-class>Biaoqian.ShowIpTag</tag-class><body-content>scriptless</body-content></tag> </taglib>
View Code
jsp文件
<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%> <%@taglib uri="http://xiaoping.com" prefix="Mybiaoqian"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>自定义标签</title> </head> <body><Mybiaoqian:showIp></Mybiaoqian:showIp> </body> </html>
View Code
10.javaBean
咖啡豆,一种开发规范,也可以说是一种技术
满足一定条件:
1)必有有无惨构造函数2)属性私有化3)提供getset方法设置属性
使用场景
1)项目中用到实体对象(entity)符合javabean规范
2)EL表达式访问对象属性。${student.name} 调用getName()方法,符合javabean规范。
3)jsp标签中的属性赋值。 setNum(Integer num)。符合javabean规范。
4)jsp页面中使用javabean。符合javabean规范
关于javaBean的动作元素
1)<jsp:useBean>:查找或者实例化一个javaBean对象
2)<jsp:setProperty>标签:设置一个javaBean组件的属性
3)<jsp:getProperty>标签:得到一个javaBean组件的属性
web项目:通讯录的web项目
1.实体
package contact1; /*** 联系人* @author Administrator**/ public class Contact {private String id;private String name;private String gender;private int age;private String phone;private String email;private String qq;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getQq() {return qq;}public void setQq(String qq) {this.qq = qq;}@Overridepublic String toString() {return "Contact [age=" + age + ", email=" + email + ", gender="+ gender + ", id=" + id + ", name=" + name + ", phone=" + phone+ ", qq=" + qq + "]";}}
View Code
2.工具类
XmlUtil,JdbcUtil
package contact1;import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties;/*** 对jdbc的操作* @author Administrator**/ public class JdbcUtil {private static String url = null;private static String user = null;private static String password = null;private static String driverClass = null;/*** 静态代码块中(只加载一次)*/static{try {//读取db.properties文件Properties props = new Properties();/*** . 代表java命令运行的目录* 在java项目下,. java命令的运行目录从项目的根目录开始* 在web项目下, . java命令的而运行目录从tomcat/bin目录开始* 所以不能使用点.*///FileInputStream in = new FileInputStream("./src/db.properties");/*** 使用类路径的读取方式* / : 斜杠表示classpath的根目录* 在java项目下,classpath的根目录从bin目录开始* 在web项目下,classpath的根目录从WEB-INF/classes目录开始*/InputStream in = JdbcUtil.class.getResourceAsStream("/db.properties");//加载文件props.load(in);//读取信息url = props.getProperty("url");user = props.getProperty("user");password = props.getProperty("password");driverClass = props.getProperty("driverClass");//注册驱动程序 Class.forName(driverClass);} catch (Exception e) {e.printStackTrace();System.out.println("驱程程序注册出错");}}/*** 抽取获取连接对象的方法*/public static Connection getConnection(){try {Connection conn = DriverManager.getConnection(url, user, password);return conn;} catch (SQLException e) {e.printStackTrace();throw new RuntimeException(e);}}/*** 释放资源的方法*/public static void close(Connection conn,Statement stmt){if(stmt!=null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();throw new RuntimeException(e);}}if(conn!=null){try {conn.close();} catch (SQLException e) {e.printStackTrace();throw new RuntimeException(e);}}}public static void close(Connection conn,Statement stmt,ResultSet rs){if(rs!=null)try {rs.close();} catch (SQLException e1) {e1.printStackTrace();throw new RuntimeException(e1);}if(stmt!=null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();throw new RuntimeException(e);}}if(conn!=null){try {conn.close();} catch (SQLException e) {e.printStackTrace();throw new RuntimeException(e);}} }}
View Code
package contact1;import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties;/*** 对jdbc的操作* @author Administrator**/ public class JdbcUtil {private static String url = null;private static String user = null;private static String password = null;private static String driverClass = null;/*** 静态代码块中(只加载一次)*/static{try {//读取db.properties文件Properties props = new Properties();/*** . 代表java命令运行的目录* 在java项目下,. java命令的运行目录从项目的根目录开始* 在web项目下, . java命令的而运行目录从tomcat/bin目录开始* 所以不能使用点.*///FileInputStream in = new FileInputStream("./src/db.properties");/*** 使用类路径的读取方式* / : 斜杠表示classpath的根目录* 在java项目下,classpath的根目录从bin目录开始* 在web项目下,classpath的根目录从WEB-INF/classes目录开始*/InputStream in = JdbcUtil.class.getResourceAsStream("/db.properties");//加载文件props.load(in);//读取信息url = props.getProperty("url");user = props.getProperty("user");password = props.getProperty("password");driverClass = props.getProperty("driverClass");//注册驱动程序 Class.forName(driverClass);} catch (Exception e) {e.printStackTrace();System.out.println("驱程程序注册出错");}}/*** 抽取获取连接对象的方法*/public static Connection getConnection(){try {Connection conn = DriverManager.getConnection(url, user, password);return conn;} catch (SQLException e) {e.printStackTrace();throw new RuntimeException(e);}}/*** 释放资源的方法*/public static void close(Connection conn,Statement stmt){if(stmt!=null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();throw new RuntimeException(e);}}if(conn!=null){try {conn.close();} catch (SQLException e) {e.printStackTrace();throw new RuntimeException(e);}}}public static void close(Connection conn,Statement stmt,ResultSet rs){if(rs!=null)try {rs.close();} catch (SQLException e1) {e1.printStackTrace();throw new RuntimeException(e1);}if(stmt!=null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();throw new RuntimeException(e);}}if(conn!=null){try {conn.close();} catch (SQLException e) {e.printStackTrace();throw new RuntimeException(e);}} }}
View Code
3.操作通讯录
1)接口
package contact1;import java.util.List; /*** 操作联系人接口* @author Administrator**/ public interface ContactDao {public void addContact(Contact contact);//添加联系人public void updateContact(Contact contact);//修改联系人public void deleteContact(String id);//删除联系人public List<Contact> findAll(); //查询所有联系人public Contact findById(String id);//根据编号查询联系人public boolean checkContact(String name);//根据姓名查询是否重复 }
View Code
2)面向xml存储数据的实现类,面向MySql数据库的实现类
package contact1;import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.UUID;import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element;public class ContactDaoImpl implements ContactDao {/*** 添加联系人*/public void addContact(Contact contact) {try {File file = new File("e:/contact.xml");Document doc = null;Element rootElem = null;if(!file.exists()){/*** 需求: 把contact对象保存到xml文件中*///如果没有xml文件,则创建xml文件doc = DocumentHelper.createDocument();//创建根标签rootElem = doc.addElement("contactList");}else{//如果有xml文件,则读取xml文件doc = XMLUtil.getDocument();//如果有xml文件,读取根标签rootElem = doc.getRootElement();}//添加contact标签/*** <contact id="1"><name>eric</name><gender>男</gender><age>20</age><phone>1343333</phone><email>eric@qq.com</email><qq>554444</qq></contact>*/Element contactElem = rootElem.addElement("contact");/*** 由系统自动生成随机且唯一的ID值,赋值给联系人*/String uuid = UUID.randomUUID().toString().replace("-","");contactElem.addAttribute("id", uuid);contactElem.addElement("name").setText(contact.getName());contactElem.addElement("gender").setText(contact.getGender());contactElem.addElement("age").setText(contact.getAge()+"");contactElem.addElement("phone").setText(contact.getPhone());contactElem.addElement("email").setText(contact.getEmail());contactElem.addElement("qq").setText(contact.getQq());//把Document写出到xml文件 XMLUtil.write2xml(doc);} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e);}}/*** 删除联系人*/public void deleteContact(String id) {try {//1.读取xml文件Document doc = XMLUtil.getDocument();//2.查询需要删除id的contactElement contactElem = (Element)doc.selectSingleNode("//contact[@id='"+id+"']");//删除标签if(contactElem!=null){contactElem.detach();}//3.把Document写出到xml文件 XMLUtil.write2xml(doc);} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e);}}/*** 查询所有联系人*/public List<Contact> findAll() {//1.读取xml文件Document doc = XMLUtil.getDocument();//2.创建List对象List<Contact> list = new ArrayList<Contact>();//3.读取contact标签@SuppressWarnings("unchecked")List<Element> conList = (List<Element>)doc.selectNodes("//contact");for(Element e:conList){//创建COntact对象Contact c = new Contact();c.setId(e.attributeValue("id"));c.setName(e.elementText("name"));c.setGender(e.elementText("gender"));c.setAge(Integer.parseInt(e.elementText("age")));c.setPhone(e.elementText("phone"));c.setEmail(e.elementText("email"));c.setQq(e.elementText("qq"));//把Contact放入list中 list.add(c);}return list;}/*** 根据编号查询联系人*/public Contact findById(String id) {Document doc = XMLUtil.getDocument();Element e = (Element)doc.selectSingleNode("//contact[@id='"+id+"']");Contact c = null;if(e!=null){//创建COntact对象c = new Contact();c.setId(e.attributeValue("id"));c.setName(e.elementText("name"));c.setGender(e.elementText("gender"));c.setAge(Integer.parseInt(e.elementText("age")));c.setPhone(e.elementText("phone"));c.setEmail(e.elementText("email"));c.setQq(e.elementText("qq"));}return c;}/*** 修改联系人*/public void updateContact(Contact contact) {/*** 需求: 修改id值为2的联系人* 1)查询id值为2的contact标签* 2)修改contact标签的内容*/try {//1.读取xml文件Document doc = XMLUtil.getDocument();Element contactElem = (Element)doc.selectSingleNode("//contact[@id='"+contact.getId()+"']");//2.修改contact标签内容contactElem.element("name").setText(contact.getName());contactElem.element("gender").setText(contact.getGender());contactElem.element("age").setText(contact.getAge()+"");contactElem.element("phone").setText(contact.getPhone());contactElem.element("email").setText(contact.getEmail());contactElem.element("qq").setText(contact.getQq());//3.把Document写出到xml文件 XMLUtil.write2xml(doc);} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e);}}public static void main(String[] args) {//测试UUIDString uuid = UUID.randomUUID().toString().replace("-","");System.out.println(uuid);}/*** true:重复* false:不重复*/public boolean checkContact(String name) {//查询name标签的内容和传入的name值是否一致?Document doc = XMLUtil.getDocument();Element nameElem = (Element)doc.selectSingleNode("//name[text()='"+name+"']");if(nameElem!=null){return true;}else{return false;}}}
View Code
package contact1;import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; import java.util.UUID;public class ContactDaoMySQLImpl implements ContactDao{/*** 添加联系人*/public void addContact(Contact contact) {Connection conn = null;PreparedStatement stmt = null;try{//获取连接conn = JdbcUtil.getConnection();String sql = "INSERT INTO contact(id,NAME,gender,age,phone,email,qq) VALUES(?,?,?,?,?,?,?)";//创建PreparedStatementstmt = conn.prepareStatement(sql);String id = UUID.randomUUID().toString().replace("-", "");//设置参数stmt.setString(1, id);stmt.setString(2, contact.getName());stmt.setString(3, contact.getGender());stmt.setInt(4, contact.getAge());stmt.setString(5, contact.getPhone());stmt.setString(6, contact.getEmail());stmt.setString(7, contact.getQq());//执行 stmt.executeUpdate();}catch(Exception e){e.printStackTrace();throw new RuntimeException(e);}finally{JdbcUtil.close(conn, stmt);}}public boolean checkContact(String name) {Connection conn = null;PreparedStatement stmt = null;ResultSet rs = null;try{//获取连接conn = JdbcUtil.getConnection();String sql = "SELECT * FROM contact where name=?";//创建PreparedStatementstmt = conn.prepareStatement(sql);stmt.setString(1, name);//执行rs = stmt.executeQuery();if(rs.next()){return true;}else{return false;}}catch(Exception e){e.printStackTrace();throw new RuntimeException(e);}finally{JdbcUtil.close(conn, stmt ,rs);}}public void deleteContact(String id) {Connection conn = null;PreparedStatement stmt = null;try{//获取连接conn = JdbcUtil.getConnection();String sql = "DELETE FROM contact WHERE id=?";//创建PreparedStatementstmt = conn.prepareStatement(sql);//设置参数stmt.setString(1, id);//执行 stmt.executeUpdate();}catch(Exception e){e.printStackTrace();throw new RuntimeException(e);}finally{JdbcUtil.close(conn, stmt);}}public List<Contact> findAll() {Connection conn = null;PreparedStatement stmt = null;ResultSet rs = null;try{//获取连接conn = JdbcUtil.getConnection();String sql = "SELECT * FROM contact";//创建PreparedStatementstmt = conn.prepareStatement(sql);//执行rs = stmt.executeQuery();List<Contact> list = new ArrayList<Contact>();while(rs.next()){Contact c = new Contact();c.setId(rs.getString("id"));c.setName(rs.getString("name"));c.setGender(rs.getString("gender"));c.setAge(rs.getInt("age"));c.setPhone(rs.getString("phone"));c.setEmail(rs.getString("email"));c.setQq(rs.getString("qq"));list.add(c);}return list;}catch(Exception e){e.printStackTrace();throw new RuntimeException(e);}finally{JdbcUtil.close(conn, stmt ,rs);}}public Contact findById(String id) {Connection conn = null;PreparedStatement stmt = null;ResultSet rs = null;try{//获取连接conn = JdbcUtil.getConnection();String sql = "SELECT * FROM contact where id=?";//创建PreparedStatementstmt = conn.prepareStatement(sql);stmt.setString(1, id);//执行rs = stmt.executeQuery();Contact c = null;if(rs.next()){c = new Contact();c.setId(rs.getString("id"));c.setName(rs.getString("name"));c.setGender(rs.getString("gender"));c.setAge(rs.getInt("age"));c.setPhone(rs.getString("phone"));c.setEmail(rs.getString("email"));c.setQq(rs.getString("qq"));}return c;}catch(Exception e){e.printStackTrace();throw new RuntimeException(e);}finally{JdbcUtil.close(conn, stmt ,rs);}}/*** 修改*/public void updateContact(Contact contact) {Connection conn = null;PreparedStatement stmt = null;try{//获取连接conn = JdbcUtil.getConnection();String sql = "UPDATE contact SET NAME=?,gender=?,age=?,phone=?,email=?,qq=? WHERE id=?";//创建PreparedStatementstmt = conn.prepareStatement(sql);//设置参数stmt.setString(1, contact.getName());stmt.setString(2, contact.getGender());stmt.setInt(3, contact.getAge());stmt.setString(4, contact.getPhone());stmt.setString(5, contact.getEmail());stmt.setString(6, contact.getQq());stmt.setString(7, contact.getId());//执行 stmt.executeUpdate();}catch(Exception e){e.printStackTrace();throw new RuntimeException(e);}finally{JdbcUtil.close(conn, stmt);}}}
View Code
XmlUtil package contact1;import java.io.File; import java.io.FileOutputStream;import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter;/*** xml操作类* @author Administrator**/ public class XMLUtil {/*** 读取xml文档方法* @return*/public static Document getDocument(){try {Document doc = new SAXReader().read(new File("e:/contact.xml"));return doc;} catch (DocumentException e) {e.printStackTrace();throw new RuntimeException(e);}}/*** 写出到xml文档中*/public static void write2xml(Document doc){try {FileOutputStream out = new FileOutputStream("e:/contact.xml");OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("utf-8");XMLWriter writer = new XMLWriter(out,format);writer.write(doc);writer.close();} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e);}} }
View Code
3)自定义的重名异常类
package contact1;public class NameRepeatException extends Exception{/*** */private static final long serialVersionUID = 1L;public NameRepeatException(String msg){super(msg);} }
View Code
4.web项目逻辑层代码
1)增删改接口:
package contact1;import java.util.List; /*** Servlet中要操作的接口* @author Administrator**/ public interface ContactService {public void addContact(Contact contact)throws NameRepeatException;//添加联系人public void updateContact(Contact contact);//修改联系人public void deleteContact(String id);//删除联系人public List<Contact> findAll(); //查询所有联系人public Contact findById(String id);//根据编号查询联系人 }
View Code
2)实现接口的服务类
package contact1;import java.util.List;/*** 处理 项目中出现的业务逻辑* @author Administrator**/ public class ContactServiceImpl implements ContactService{//ContactDao dao = new ContactDaoImpl();ContactDao dao = new ContactDaoMySQLImpl();public void addContact(Contact contact) throws NameRepeatException {//执行业务逻辑判断if(dao.checkContact(contact.getName())){//重复/*** 注意: 如果业务层方法出现任何业务异常,则返回标记(自定义异常)到servlet*/throw new NameRepeatException("姓名重复,不可使用");}//如果不重复,才执行添加方法 dao.addContact(contact);}public void deleteContact(String id) {dao.deleteContact(id);}public List<Contact> findAll() {return dao.findAll();}public Contact findById(String id) {return dao.findById(id);}public void updateContact(Contact contact) {dao.updateContact(contact);} }
View Code
5.Servletweb项目逻辑层
1.AddContactServlet package Servlet; import java.io.IOException;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import contact1.Contact; import contact1.ContactService; import contact1.ContactServiceImpl; import contact1.NameRepeatException;public class AddContactServlet extends HttpServlet {/*** */private static final long serialVersionUID = 1L;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("utf-8");//接受参数String name = request.getParameter("name");String gender = request.getParameter("gender");String age = request.getParameter("age");String phone = request.getParameter("phone");String email = request.getParameter("email");String qq = request.getParameter("qq");//调用逻辑Contact contact = new Contact();contact.setName(name);contact.setGender(gender);contact.setAge(Integer.parseInt(age));contact.setPhone(phone);contact.setEmail(email);contact.setQq(qq);ContactService service = new ContactServiceImpl();try {service.addContact(contact);//添加的时候可能添加重名的所有生命这个异常} catch (NameRepeatException e) {//处理自定义业务异常类request.setAttribute("msg", e.getMessage());//这里跳转是因为有需要保存的request.getRequestDispatcher("/addContact.jsp").forward(request, response);return;}//跳转页面不需要保存是么所以是重定向response.sendRedirect(request.getContextPath()+"/ListContactServlet");}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}} DeleContactServelt package Servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import contact1.ContactService; import contact1.ContactServiceImpl;public class DeleContactServlet extends HttpServlet {/*** */private static final long serialVersionUID = 1L;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//1获得参数String id = request.getParameter("id");//2.处理业务逻辑ContactService service = new ContactServiceImpl();service.deleteContact(id);//3.跳转页面这里是重定向不是跳转了因为这里不需要保存是么东西在request中了用重定向好些response.sendRedirect(request.getContextPath()+"/ListContactServlet");}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}} ListContactServlet package Servlet; import java.io.IOException; import java.util.List;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import contact1.Contact; import contact1.ContactService; import contact1.ContactServiceImpl;public class ListContactServlet extends HttpServlet {/*** */private static final long serialVersionUID = 1L;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//从数据库中获得ContactService service = new ContactServiceImpl();List<Contact> list = service.findAll();//将数据保存到requset域对象request.setAttribute("contacts", list);//跳转到jsp页面request.getRequestDispatcher("/listContact.jsp").forward(request, response); }public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}} QueryContactServlet package Servlet;import java.io.IOException;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import contact1.Contact; import contact1.ContactService; import contact1.ContactServiceImpl;/*** 修改一列时,先获得者列数据* @author Administrator**/ public class QueryContactServlet extends HttpServlet {/*** */private static final long serialVersionUID = 1L;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//1.接收idString id=request.getParameter("id");//2.调用service根据id查询联系人的方法ContactService service = new ContactServiceImpl();Contact contact = service.findById(id);//3.查询结果放到request对象中去request.setAttribute("contact", contact);//4.跳转到更新页面request.getRequestDispatcher("/updateContact.jsp").forward(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}} UpdateContextServlet package Servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import contact1.Contact; import contact1.ContactService; import contact1.ContactServiceImpl;public class UpdateContextServlet extends HttpServlet {/*** */private static final long serialVersionUID = 1L;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("utf-8");//1.接收参数String id = request.getParameter("id");String name = request.getParameter("name");String gender = request.getParameter("gender");String age = request.getParameter("age");String phone = request.getParameter("phone");String email = request.getParameter("email");String qq = request.getParameter("qq");//封装成Contact对象Contact contact = new Contact();contact.setId(id);contact.setName(name);contact.setGender(gender);contact.setAge(Integer.parseInt(age));contact.setPhone(phone);contact.setEmail(email);contact.setQq(qq);//业务逻辑ContactService service = new ContactServiceImpl();service.updateContact(contact);//跳转不需要保存是么就可以用重定向了response.sendRedirect(request.getContextPath()+"/ListContactServlet");}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);} }
View Code
6.连接数据库参数的配置文件
db.properties
url=jdbc:mysql:thin:@127.0.0.1:3306:contactsys_web user=root password=mysql driverClass=com.mysql.jdbc.Driver
View Code
7.jsp
addContact.jsp
addContact.jsp <%@ page language="java" import="java.util.*,contact1.Contact" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>添加联系人</title> </head><body><center><h3>添加联系人</h3></center><form action="${pageContext.request.contextPath }/AddContactServlet" method="post"><table align="center" border="1" width="400xp"><tr><th>姓名</th><td><input type="text" name="name"/><font color="red">${msg }</font></td></tr><tr><th>性别</th><td><input type="radio" name="gender" value="男"/>男<input type="radio" name="gender" value="女"/>女</td></tr><tr><th>年龄</th><td><input type="text" name="age"/></td></tr><tr><th>电话</th><td><input type="text" name="phone"/></td></tr><tr><th>邮箱</th><td><input type="text" name="email"/></td></tr><tr><th>QQ</th><td><input type="text" name="qq"/></td></tr><tr><td colspan="2" align="center"><input type="submit" value="保存"/> <input type="reset" value="重置"/></td></tr></table></form></body> </html>
View Code
listContact.jsp
<%@ page language="java" import="java.util.*,contact1.Contact" pageEncoding="utf-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>查询所有联系人</title> <style type="text/css">table td{/* 文字居中 */text-align: center;}table{border-collapse: collapse;} </style> </head><body><center><h3>查询所有人</h3></center><table align="center" border="1" width="700px"><tr><th>编号</th><th>姓名</th><th>性别</th><th>年龄</th><th>电话</th><th>邮箱</th><th>QQ</th><th>操作</th></tr><c:forEach items="${contacts }" var="con" varStatus="varSta"><tr><td>${varSta.count}</td><td>${con.name}</td><td>${con.gender}</td><td>${con.age}</td><td>${con.phone}</td><td>${con.email}</td><td>${con.qq}</td><td><a href="${pageContext.request.contextPath }/QueryContactServlet?id=${con.id}">修改</a> <a href="${pageContext.request.contextPath }/DeleteContactServlet?id=${con.id}">删除</a></td></tr></c:forEach><tr><td colspan="8" align="center"><a href="${pageContext.request.contextPath }//addContact.jsp">[添加联系人]</a></td></tr></table></body> </html>
View Code
<%@ page language="java" import="java.util.*,contact1.Contact" pageEncoding="utf-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>修改联系人</title> </head><body><center><h3>修改联系人</h3></center><form action="${pageContext.request.contextPath }/UpdateContactServlet" method="post"><input type="hidden" name="id" value="${contact.id }" /><table align="center" border="" width="300px"><tr><th>姓名</th><td><input type="text" name="name" value="${contact.name }"/></td></tr><tr><th>性别</th><td><input type="radio" name="gender" value="男" <c:if test="${contact.gender=='男' }">checked="checked"</c:if> />男<input type="radio" name="gender" value="女" <c:if test="${contact.gender=='女' }">checked="checked"</c:if> />女</td></tr><tr><th>年龄</th><td><input type="text" name="age" value="${contact.age }"/></td></tr><tr><th>电话</th><td><input type="text" name="phone" value="${contact.phone }"/></td></tr><tr><th>邮箱</th><td><input type="text" name="email" value="${contact.email }"/></td></tr><tr><th>QQ</th><td><input type="text" name="qq" value="${contact.qq }"/></td></tr><tr><td colspan="2" align="center"><input type="submit" value="保存"/> <input type="reset" value="重置"/></td></tr></table></form></body> </html>
View Code
转载于:https://www.cnblogs.com/xiaoping1993/p/6839296.html
java深入探究07-jsp相关推荐
- 基于javaweb的物流快递管理系统(java+ssm+html+js+jsp+mysql)
基于javaweb的物流快递管理系统(java+ssm+html+js+jsp+mysql) 运行环境 Java≥8.MySQL≥5.7.Tomcat≥8 开发工具 eclipse/idea/myec ...
- Java Web中的jsp技术
在动态网页开发中,经常需要动态生成html内容,如果使用servlet来实现html页面数据的改变会导致程序十分臃肿.为了克服这些缺点,Oracle(Sun)公司推出了jsp技术. JSP全名是Jav ...
- JAVA自学笔记07
JAVA自学笔记07 1.构造方法 1) 例如:Student s = new Student();//构造方法 System.out.println(s);// Student@e5bbd6 2)功 ...
- 【扫盲帖】Java、JavaScript、JSP、JScript 的区别与联系
[转自]http://developer.51cto.com/art/200907/140294.htm ==>JavaScript与Java的联系和区别 JavaScript与Java的语法比 ...
- Java开发之掌握JSP技术
一.Java初级开发之jsp概述 1.关于jsp JavaServer Pages简称jsp,从"server"这个词可以看出,这其实也是一门java服务端技术,其实可以简单的把j ...
- Java web后端5 JSP技术
JSP概述 HTML代码与Java代码共同存在 浏览器中显示 启动Tomcat 浏览器访问:http://localhost:8083/JSPWeb_war_exploded/hello.jsp &l ...
- JAVA WEB篇3——JSP
JAVA WEB篇3--JSP 1.JSP是什么 JSP是Java Server Pages的简称,跟Servlet一样可以动态生成HTML响应, JSP文件命名为 xxx.jsp 与Servlet不 ...
- app嵌入jsp页面的项目工作量_好程序员Java学习路线分享jsp为什么用的不多了
好程序员Java学习路线分享jsp为什么用的不多了,曾经JavaEE开发前端多数用的是JSP技术,因为在JSP出现之前,程序员基本都是在Servlet端直接通过out.print的方式拼接出一个页面返 ...
- sonar扫描java、js、jsp技术
最近在弄sonar扫描的事情,之前一直只能扫描java代码,这样统计出来的数据上报领导很多开发人员不服(说我不用写jsp了不用写js了?), 那么好,于是乎继续整sonar,在官网中看到sonar其实 ...
- Java服务器页面:JSP
目录 1.JSP技术的基础概念 1.1 什么是 JSP? 1.2 什么是JSP的主要作用? 1.3 为什么使用JSP? 1.3 如何创建一个 jsp 动态页面程序 ? 2.jsp 的运行原理(要求知道 ...
最新文章
- 传统图像处理与深度学习又一结合:时空多尺度非局部自相似集成视频超分
- 未能加载文件或程序集“XXX”或它的一个依赖项,试图加载格式不正确的程序...
- UVA1455 - Kingdom(并查集 + 线段树)
- Java Activiti 工作流引擎 流程审批 后台框架源码 springmvc SSM
- android 安全讲座第三层 linux权限基础知识
- HTML打开网页拒绝访问,192.168.1.1拒绝访问怎么办?
- Rainbond 5.0正式发布, 支持对接管理已有Kubernetes集群
- untitled软件怎么用_苹果手机怎么用4G网络于App Store下载超过200MB以上的软件
- php utc时间_PHP转换UNIX时间戳 UTC时间(TZ格式) 标准时间的方法 UNIX UTC GMT时间、本地时间互转...
- 了不起的 Unicode!
- 一张图片即可入侵你的电脑
- Android 之度量单位px,dp,dip,sp,in,mm详解
- CFree5构建中止问题
- 【论文解读 arXiv 2019 | DEAN】DEAN: Learning Dual Emotion for Fake News Detection on Social Media
- 服务器装win7无限重启吗,win7下机子无限重启解决办法
- 计算机与电视连接方式是什么,电脑投屏到电视机怎么设置(详解两者间的投屏方法)...
- visibility的用法
- APP开发后如何运营?
- 数据库入门---mysql
- CSS样式表中的颜色表