1.jsp的执行过程
步骤一:翻译(jsp文件翻译成java文件)
步骤二:编译(java文件编译成class文件)
步骤三:执行(执行class(字节码)文件)
2.在jsp中实现日期输出在网页上
<%
SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String datenow=sdf.format(new Date())
%>
<%=
datenow
%>
3.在jsp中使用运算
<%
int numa=4,numb=5;
int result=numa+numb
%>
<%=
result
%>
4.jsp综合实战项目
步骤一创建maven工程
步骤二创建工程包 util(工具包)entity(封装包)dao(方法包)service(方法包)servlet(动态输出包)
步骤三:引入pom依赖 在pom.xml中将dependency中的内容替换成
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.32</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
步骤四创建Servlet类
步骤4.2测试webxml
打开WEB-INF下的web . xml
web-app中的默认代码改成如下
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>DemoServlet</servlet-name>名字
<servlet-class>cn.kgc.servlet.DemoServlet</servlet-class>里面放DemoServlet的路径
</servlet>
<servlet-mapping>
<servlet-name>DemoServlet</servlet-name>DemoServlet是名字,可以任意取名,但是要和上面的servlet-name统一
<url-pattern>/DemoServlet</url-pattern>这个是DemoServlet是ip地址。网址里输入localhost:8080/DemoServlet
</servlet-mapping>
步骤5:创建测试DemoServlet
在Servlet目录下new一个类型为DemoServlet的类把里面的代码替换成
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("index.jsp").forward(request,response);转发代码
}
步骤六.创建数据库和表
步骤七. 实例类
在entity包中对数据库进行封装(封装表内的所有属性名)
步骤八.在util包下新建basedao类
basedao类中放固定的工具
如:
//声明三大对象Connection,PreparedStatement,ResultSet
protected static Connection conn;
protected static PreparedStatement ps;
protected static ResultSet rs;
public static final String DRIVER="com.mysql.cj.jdbc.Driver";
public static final String URL="jdbc:mysql://localhost:3306/db_08";
public static final String USERNAME="root";
public static final String PASSWORD="123456";
//连接数据库的方法和关闭数据库的方法
public void getConnection(){
try {
Class.forName(DRIVER);
conn= DriverManager.getConnection(URL,USERNAME,PASSWORD);
// System.out.println(conn);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
//关闭
public void closeConn(){
try {
if (rs!=null){
rs.close();
}
if (ps!=null){
ps.close();
}
if (conn!=null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
//通用增删改
public int executeUpdate(String sql ,Object[] params){
int flag=0;
try {
getConnection();
ps=conn.prepareStatement(sql);
if (params!=null){
for (int i=0;i<params.length;i++){
ps.setObject(i+1,params[i]);
}
}
flag=ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
closeConn();
}
return flag;
}
//通用查询
public ResultSet executeQuery(String sql ,Object[] params){
getConnection();
try {
ps=conn.prepareStatement(sql);
if (params!=null){
for (int i=0;i<params.length;i++){
ps.setObject(i+1,params[i]);
}
}
rs=ps.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}
public static void main(String[] args) {
BaseDao bd=new BaseDao();
bd.getConnection();
}
步骤九
在dao包和service包内新建一个接口
接口中方法如下
public Integer addDemo(Demo demo);
public Interger delById(Integer id);
public Integer updateDemo(Demo demo);
public Demo findById(Integer id);
public List<Demo>findAll;
步骤10 DemoDaoImpl
在dao包下新建一个Impl包,Impl包里新建一个DemoDaoImpl类
DemoDaoImpl类首先继承basedao,再实现接口中的方法
可以使用alt加enter快捷键,重写接口中的所有方法
返回值调用父类(子类的方法中调用父类可以用super),在把sql语句传进BaseDao中,然后调用BaseDao中的方法
在DemoDaoImpl包中要写各个方法的sql语句
增删改:
增:return super. executeUpdate("insert into t_user (id,name,pwd)value(?,?,?)",
new Object [ ]{ demo.getId(),demo.getNme,demo.getPwd});
删:return super.executeUpdate("delete from t_user where id=?",new Object[ ]{id});
改:return super.executeUPdate("update t_user set name=? ,pwd=? where id=? ",
new Objer[ ]{demo.getName,demo.getPwd,demo.getId});
查询某个或者查询全部
查询某个:通用查询 有一个返回结果集用来写sql语句。增删改没有
Demo demo=new Demo();
rs=super.executeQuery(“ select*from t_uesr where id=?”,new Object[ ]{id})
try-catch
while(rs. next()){
demo.setId(rs.getInt("id"))
demo.setName(rs.getString("name"))
demo.setPwd(rs.getString("pwd"))
}循环遍历表中的数据,与id等于?的进行匹配
return demo;
查询全部:
List <Student>list=new ArrayList<>();
String sql="select *from t_user";
Object[ ]params=null;
rs=super . executeQuery(sql,parms)
try-catch-finally
while(rs. next()){
demo.setId(rs.getInt("id"))
demo.setName(rs.getString("name"))
demo.setPwd(rs.getString("pwd"))
list.add(demo); }
finally调用父类的关闭方法
return list;
步骤11:DemoService接口,方法同Demodao接口
步骤12.在Service包中建一个Impl包,Impl包中建一个DemoServiceImpl类
DemoServiceImpl类重写DemoService接口中的所有方法;
重写方法的上面加上:DemoDaoImpl ddi=new DemoDaoImpl();
增:return ddi.addDemo(DemoDaoImpl中增加的方法名)(demo)
删:return ddi.delByIdDemo (id)
改:return ddi.updateDemo (demo)
查某个:return ddi.findById(id)
查全部:return ddi.findall()
以上均为dao中的基础操作
步骤13 index.jsp
可以单独通过html的表格格式。table 和 tr让表格输出在网页上。不过这是死的表格
步骤14.Dmeoservlet
在步骤5中写了转发代码但是并没有写完
转发代码前。需要给服务器端赛数据
ArrayList<demo>list=new ArrayList<>();
Demo demo=new Demo();
demo.setId(1);
demo.setName("ls")
dmeo.setPwd("111")
Demo demo1=new Demo();
demo1.setId(2);
demo1.setName("zs")
dmeo1.setPwd("222")
list.add(demo)
list.add(demo1)
request.setAttribute("list",list)第二list是与list.add绑定的;第一个“list”与index.jsp中的${list}绑定
然后进行转发,转发到index.jsp
步骤14.2 在insex.jsp中引入jstl表达式并修改
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>//引入jstl表达式
<table cellpadding="0" cellspacing="0" border="1px solid">表格格式
<tr>
<td>编号</td>
<td>名称</td>
<td>昵称</td>
<td>身高</td>
</tr>第一行的死值
<c:forEach items="${lists}" var="list">(c:forEach等价于java中的循环遍历)(var="list" 给var一个别名,别名与下面的list.等价)
<tr>
<td>
${list.id}
</td>
<td>
${list.name}
</td>
<td>
${list.nickname}
</td>
<td>
${list.height}
</td>
</tr>
</c:forEach>
</table>
步骤15:servlet 调用service(调用数据库)
把方法中的代码替换成
DemoServiceImpl dsi=new DemoServiceImpl();new一个DemoServiceImpl
List<Demo>list=.findAll();(利用dao中查找全部的方法将数据塞入集合中)
request.setAttribute("lists",list);//在request 请求对象中绑定数据【servlet中绑定数据】(绑定集合)
request.getRequestDispatcher("index.jsp").forward(request,response);//转发到index.jsp(集合转发到index.jsp中)(循环遍历集合的数据输出在网页上)
步骤16:add.jsp
使用html将名称 昵称 身高,放进表格的列中
每一列在后面插入一个text 文本框
最好在table后面加上表格的边框格式 1像素,实线
表格最后加上一个提交按钮submit
<tr>
<td>昵称</td>
<td><input type="text"name="nickname"></td>
</tr>
优化StudentServlet
StudentServiceImpl ssi = new StudentServiceImpl();
String action = request.getParameter("action");//获取链接的参数。添加标记位
if (action.equals("list")) {
List<Student> list = ssi.findAll();调用StudentServiceImpl中查找全部的方法,将Student类的内容放在list集合中,
request.setAttribute("lists", list);//请求转发。获取list集合作为属性,属性名为lists。
request.getRequestDispatcher("index.jsp").forward(request, response);//请求转发到文件index。jsp中。转发的对象是在我上面获取的list集合
对应Index.jsp
else if (action.equals("toAdd")) {输入http://localhost:8080/Studentservlet?action=toADD跳转到add.jsp.
request.getRequestDispatcher("add.jsp").forward(request, response);}
实现后端(修改add.jsp)
在form中加入代码action="Studentservlet?action=add"method="post"
配置调用servlet中的后端添加路径 发送post请求
form action="Studentservlet?action=add"method="post">
<table border="1px" cellspacing="0" cellpadding="0">
<tr>
<td colspan="2" align="center">添加页面</td>
</tr>
<tr>
<td>名称</td>
<td><input type="text"name="name"></td>
</tr>
<tr>
<td>昵称</td>
<td><input type="text"name="nickname"></td>
</tr>
<tr>
<td>身高</td>
<td><input type="text"name="height"></td>>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit"value="添加"></td>
<input type="button"value="返回" onclick="javascript:window.location.href='Studentservlet?action=list'">
</tr>
</table>
</form>
修改xxxServlet
else if (action.equals("add")) {
String name = request.getParameter("name");
String nickname = request.getParameter("nickname");
String height = request.getParameter("height");
上面三行代表把我在网页上添加的内容传到request中
Student student = new Student();调用Student类
student.setName(name);
student.setNickname(nickname);
student.setHeight(Double.parseDouble(height));
把request中刚刚传进来的在传进Student类中
Integer flag = ssi.addStudent(student);
调用StudentSerletImpl中的方法,把传进来的值塞进addStudent方法中。增删改返回值都是Flag
if (flag > 0) {意思是如果我返回了值,那么就返回到初始list网页
request.getRequestDispatcher("Studentservlet?action=list").forward(request, response);
}
17修改功能
与增加功能基本一样
只不过得多传一个id,和多一个value值。
创建update。jsp
<form action="Studentservlet?action=update"method="post">
<table border="1px" cellspacing="0" cellpadding="0">
<tr>
<td colspan="2" align="center">修改页面</td>
</tr>
<tr>
<td>名称</td>
<input type="hidden" name="id"value="${student.id}">
<td><input type="text"name="name" value="${student.name}"></td>
</tr>
<tr>
<td>昵称</td>
<td><input type="text"name="nickname" value="${student.nickname}"></td>
</tr>
<tr>
<td>身高</td>
<td><input type="text"name="height"value="${student.height}"></td>>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit"value="修改">
<input type="button"value="返回" onclick="javascript:window.location.href='Studentservlet?action=list'"></td>
</tr>
</table>
</form>
修改StudentServlet
else if (action.equals("toupdate")) {
String idstr = request.getParameter("id");
Student s = ssi.findById(Integer.parseInt(idstr));
request.setAttribute("student", s);
request.getRequestDispatcher("update.jsp").forward(request, response);
} else if (action.equals("update")) {
String id = request.getParameter("id");
String name = request.getParameter("name");
String nickname = request.getParameter("nickname");
String height = request.getParameter("height");
Student s = new Student();
s.setId(Integer.parseInt(id));
s.setName(name);
s.setNickname(nickname);
s.setHeight(Double.parseDouble(height));
Integer flag = ssi.updateStudent(s);
if (flag > 0) {
request.getRequestDispatcher("Studentservlet?action=list").forward(request, response);
}
步骤18继承查询添加修改
index.jsp
<body>
<table cellpadding="0" cellspacing="0" border="1px solid">
<tr><th colspan="5"align="right"><a href="Studentservlet?action=toAdd">添加功能</a></th></tr>
<tr>
<td>编号</td>
<td>名称</td>
<td>昵称</td>
<td>身高</td>
<td>操作</td>
</tr>
<c:forEach items="${lists}" var="list">
<tr>
<td>
${list.id}
</td>
<td>
<a href="Studentservlet?action=tofindid&id=${list.id}">${list.name}</a>
</td>
<td>
${list.nickname}
</td>
<td>
${list.height}
</td>
<td><a href="Studentservlet?action=toupdate&id=${list.id}">修改</a>
<a href="Studentservlet?action=delbyid&id=${list.id}">删除</a>
</td>
</tr>
</c:forEach>
</table>
</body>
修改add.jsp
body>
<form action="Studentservlet?action=add"method="post">
<table border="1px" cellspacing="0" cellpadding="0">
<tr>
<td colspan="2" align="center">添加页面</td>
</tr>
<tr>
<td>名称</td>
<td><input type="text"name="name"></td>
</tr>
<tr>
<td>昵称</td>
<td><input type="text"name="nickname"></td>
</tr>
<tr>
<td>身高</td>
<td><input type="text"name="height"></td>>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit"value="添加"></td>
<input type="button"value="返回" onclick="javascript:window.location.href='Studentservlet?action=list'">
</tr>
</table>
</form>
</body>
修改update
<form action="Studentservlet?action=update"method="post">
<table border="1px" cellspacing="0" cellpadding="0">
<tr>
<td colspan="2" align="center">修改页面</td>
</tr>
<tr>
<td>名称</td>
<input type="hidden" name="id"value="${student.id}">
<td><input type="text"name="name" value="${student.name}"></td>
</tr>
<tr>
<td>昵称</td>
<td><input type="text"name="nickname" value="${student.nickname}"></td>
</tr>
<tr>
<td>身高</td>
<td><input type="text"name="height"value="${student.height}"></td>>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit"value="修改">
<input type="button"value="返回" onclick="javascript:window.location.href='Studentservlet?action=list'"></td>
</tr>
</table>
</form>
步骤19删除
Studentservlet
else if (action.equals("delbyid")){
String id=request.getParameter("id");
Integer flag = ssi.delById(Integer.parseInt(id));
if (flag>0){
request.getRequestDispatcher("Studentservlet?action=list").forward(request,response);
}
index.jsp
<a href="Studentservlet?action=delbyid&id=${list.id}">删除</a>
步骤20,查询详情
Studentservlet
else if(action.equals("tofindid")){
String s= request.getParameter("id");
Student byId = ssi.findById(Integer.parseInt(s));
request.setAttribute("demo",byId);
request.getRequestDispatcher("find.jsp").forward(request,response);
}
find.jsp
<table border="1px" cellspacing="0" cellpadding="0">
<tr>
<td colspan="2" align="center">详情页面</td>
</tr>
<tr>
<td>编号</td>
<td><input type="text"name="id" value="${demo.id}"readonly></td>
</tr>
<tr>
<td>名称</td>
<td><input type="text"name="name" value="${demo.name}"readonly></td>
</tr>
<tr>
<td>昵称</td>
<td><input type="text"name="nickname" value="${demo.nickname}"></td>
</tr>
<tr>
<td>身高</td>
<td><input type="text"name="height"value="${demo.height}"></td>>
</tr>
<td>
<td colspan="2"align="center">
<input type="button"value="返回" onclick="javascript:window.location.href='Studentservlet?action=list'"></td>
</td>
</tr>
</table>
Index.Jsp
<td>
<a href="Studentservlet?action=tofindid&id=${list.id}">${list.name}</a>
</td>
StudentServiceImpl