当前位置:网站首页>JSP+Dao整合
JSP+Dao整合
2022-07-24 05:15:00 【x0757】
1 接受超链接提交的数据
<%--超链接: 超链接如何传参 使用?key=value&key=value--%>
<a href="indexDo02.jsp?name=ykq&age=18">连接</a>
2 乱码如何解决
<%
request.setCharacterEncoding("utf-8");
String name= request.getParameter("uname");
String pwd = request.getParameter("pwd");
UserDao userDao = new UserDao();
User user = userDao.findByNameAndPwd(name,pwd);
if(user!=null){
session.setAttribute("user",user);
response.sendRedirect("success.jsp");
}else{
response.sendRedirect("login.jsp?error=1");
}
%>常见的编码:
ISO-8859-1: 国际编码 但是不支持中文。
UTF-8: 万能编码支持英文中文以及繁体中文。----企业开发都是用UTF-8
GBK: 中文编码.简体中文和繁体中文.
GB2312: 中文编码 但是它支持简体中文。
3 页面跳转

4 JSP+Dao整合
4.1登录
<title>Title</title>
<script>
function reg(){
location.href='register.jsp';
}
</script>
</head>
<body>
<%
String error = request.getParameter("error");
if(error!=null&&"1".equals(error)){
out.print("<font color='red'>账号或密码错误</font>");
}
%>
<form action="loginDo.jsp" method="post">
账号:<input type="text" name="uname"><br>
密码:<input type="password" name="pwd"><br>
<input type="submit" value="登录">
<input type="button" value="注册" onclick="reg()">
</form>
</body>
</html>
loginDo.jsp
<%
request.setCharacterEncoding("utf-8");
String name= request.getParameter("uname");
String pwd = request.getParameter("pwd");
UserDao userDao = new UserDao();
User user = userDao.findByNameAndPwd(name,pwd);
if(user!=null){
session.setAttribute("user",user);
response.sendRedirect("success.jsp");
}else{
response.sendRedirect("login.jsp?error=1");
}
%>4.2 注册
<title>注册页面</title>
<script>
function checkUsername(){
var uname = document.getElementsByName("uname")[0].value;
if(uname==null || uname.trim()==""){
alert("请输入账号");
return false;
}
return true;
}
function checkPassword(){
var pwd=document.getElementsByName("pwd")[0].value;
if(pwd==null || pwd.trim()==""){
alert("请输入密码");
return false;
}
return true;
}
function checkRealname(){
var realname=document.getElementsByName("realname")[0].value;
if(realname==null || realname.trim()==""){
alert("请输入姓名");
return false;
}
return true;
}
function ck(){
if(checkUsername()&&checkPassword()&&checkRealname()){
return true;
}
return false;
}
</script>
</head>
<body>
<h1>注册页面</h1>
<form action ="registerDo.jsp" method="post" onsubmit="return ck()">
账号:<input type="text" name="uname" onblur="checkUsername()"><br>
密码:<input type="password" name="pwd" onblur="checkPassword()"><br>
姓名:<input type="text" name="realname" onblur="checkRealname()"><br>
<input type="submit" value="提交">
</form>reginsterDo.jsp
<%
request.setCharacterEncoding("utf-8");
String name =request.getParameter("uname");
String pwd = request.getParameter("pwd");
String realname = request.getParameter("realname");
UserDao userDao = new UserDao();
User user =new User(name,pwd,realname);
userDao.insert(user);
response.sendRedirect("login.jsp");
%>4.3 删除
<%
String id = request.getParameter("id");
DepartmentDao departmentDao = new DepartmentDao();
departmentDao.delete(Integer.parseInt(id));
response.sendRedirect("success.jsp");
%>4.4 修改
<%
String id =request.getParameter("id");
DepartmentDao departmentDao = new DepartmentDao();
Department department = departmentDao.findById(Integer.parseInt(id));
%>
<form action="updateDo.jsp" method="post">
id号:<input type="text" value="<%=department.getId()%>" name="id" /><br>
部门:<input type="text" value="<%=department.getName()%>" name="deptname"/><br>
<input type="submit" value="确认修改"/>
</form>updateDo.jsp
<%
request.setCharacterEncoding("utf-8");
String id= request.getParameter("id");
String name = request.getParameter("deptname");
DepartmentDao departmentDao = new DepartmentDao();
Department d = new Department();
d.setId(Integer.parseInt(id));
d.setName(name);
departmentDao.update(d);
response.sendRedirect("success.jsp");
%>4.5 添加
<form action ="addDo.jsp" method="post">
id号:<input type="text" name="id"><br>
部门:<input type="text" name="deptname">
<input type="submit" value="添加">
</form>addDo.jsp
<%
request.setCharacterEncoding("utf-8");
String name =request.getParameter("deptname");
DepartmentDao departmentDao = new DepartmentDao();
Department department = new Department();
department.setName(name);
departmentDao.add(department);
response.sendRedirect("success.jsp");
%>5 九大内置对象
1. out对象---作用:用来输出信息到浏览器。常见的方法: print();
2. request对象--作用:请求对象。 常见的方法:getParameter(); setCharacterEncoding("") , getSession():获取session对象。
3. session对象-->作用:表示一次会话 同一个用户共享存储在session中的数据。 常见的方法:setAttribute(key,value) getAttribute(key); removeAttribute(key), invalidate();使当前session无效
4. response响应对象-->常用的方法: sendRedirect(). getWriter():获取out对象。
5.pageContext对象:表示当前页面对象。它可以共享当前页面的数据。可以获取其他8个内置对象。
6.application对象: 所有用户共享该对象存储的数据。
7.page对象: 表示当前页面的对象 this.
8.config对象: 用于获取servlet的配置信息。
9.exception对象: 异常对象。 如果该对象想使用必须网页是一个异常页面
6 四大域对象
在不同的对象中存储的数据,作用的范围不同。
1. pageContext: 可以存储数据,作用范围是当前页面有效。 2. request: 可以存储数据,作用范围是同一个请求有效。---请求转发跳转 3. session: 可以存储数据, 作用范围是同一个会话有效。---用户信息 4. application: 可以存储数据,作用范围是同一个应用。 以后就把数据保存到application中,打错特错 因为保存的时间越长占用的资源越长。
理解修饰符public protected 默认 private
7 重定向和请求转发的区别
7.1 重定向

7.2 请求转发
7.3 区别
1. 重定向地址栏会发生改变,而且会产生新的请求对象。无法获取request保存的数据。
2. 请求转发地址栏不会发生改变,而且用的是同一个请求对象。可以获取request保存的数据。
保存周期越长,占用的资源时间也就越长。 一般我们在开发时大部分数据习惯保存到request对象中。 只要少量的数据保存到session会话中。比如登录时用户的信息保存到session会话中。
8 jstl标签库和EL表达式
8.1 el表达式
EL表达式-->作用: 获取四大域对象中数据。
语法: ${xxxScope.key}
我们原来通过xxx.getAttribute(key)也可以获取到四大域中的数据,为什么还要使用EL表达式,因为EL表达式语法更加简洁。而且后期可以与我们的jstl标签库一起使用。如果EL表达式没有找到对于的key,则返回空字符串 "".
EL表达式属于jsp或者后面讲解thymeleaf的语法
<%
//往四大域存储数据
pageContext.setAttribute("name","pageContesxt的内容");
request.setAttribute("name","request的内容");
session.setAttribute("name","session的内容");
application.setAttribute("name","application的内容");
response.sendRedirect("b.jsp");
//request.getRequestDispatcher("b.jsp").forward(request,response);
%>
<hr>
通过getAttribute()获取四大域对象的内容<br>
<%=pageContext.getAttribute("name")%><br>
<%=request.getAttribute("name")%><br>
<%=session.getAttribute("name")%><br>
<%=application.getAttribute("name")%><br>
<hr>
通过el表达式获取四大域对象的内容<br>
${pageScope.name}<br>
${requestScope.name}<br>
${sessionScope.name}<br>
${applicationScope.name}<br>
<hr>
${name}<br>el表达式 还可以省略scope ${key} 那么它会从哪个对象中获取数据。默认从pageContext扫描有没有对于的key,如果有则不继续往下扫描了,如果没有则继续往下扫描request, 以此类推。
8.2 jstl标签库
里面提供了一些常用的标签---比如: 循环标签 判断标签。
使用这些标签的作用是为了减少jsp中java脚本代码的添加。 企业不建议大家在jsp中使用太多的<%%> 这样会使得网页比较乱。 这时就有人提供了JSTL标签库。
如何使用jstl标签库:
(1)web工程中引入jstl标签库的依赖

(2)在使用jstl标签的jsp网页上引入该标签库
<%--jsp网页的头部引入jstl核心标签库--%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
(3)使用
<%
List<Student> list = new ArrayList<>();
list.add(new Student(1,"张三",24,"上海",1));
list.add(new Student(2,"李四",21,"杭州",0));
list.add(new Student(3,"王五",20,"北京",1));
request.setAttribute("Students",list);
%>
<table border="1" width="500">
<tr>
<td>编号</td>
<td>姓名</td>
<td>地址</td>
<td>年龄</td>
<td>性别</td>
</tr>
<c:forEach items="${Students}" var="s">
<tr>
<td>${s.id}</td>
<td>${s.name}</td>
<td>${s.age}</td>
<td>${s.address}</td>
<c:if test="${s.sex==0}">
<td>女</td>
</c:if>
<c:if test="${s.sex==1}">
<td>男</td>
</c:if>
</c:forEach>
</tr>9 servlet控制层
9.1 什么是servlet?
就是java类代码。它可以介绍前端页面传递的数据,同时也可以把后端查询的结果响应给前端,以供前端能把数据展示到jsp网页.
9.2 为什么使用servlet

9.3 如何使用servlet
(0) 引入servlet-api.jar包

(1) 创建一个类并继承HttpServlet父类。
public class HelloServlet extends HttpServlet {
}
(2) 重写HttpServlet中service方法。---进行业务处理的。
//可以接受前端传递的参数 也可以把后端查询的数据保存并让前端获取
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
(3) 把自定义servlet配置到web.xml文件中
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>com.xzj.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>9.4 一个servlet处理多个请求
如果有很多不同的请求,难道我们就得为每个不同请求创建一个servlet吗,如果这样就会导致类中存在很多的servlet类。addUser deleteUser updateUser. 我们应该对同一种类只创建一个servlet。
比如: 对用户类的操作,UserServlet 对学生类的操作 StudentServlet. 如果使用一个servlet.那么如何区别是什么操作。 我们可以再跳转时传递一个参数用于表示它是什么操作.
一张表对应一个servlet。
一张表对应一个dao和entity
9.5 使用jsp+el+jstl+servlet完成crud

9.6 servlet的生命周期
就是servlet从创建到初始化再到服务最后到销毁的过程。就是servlet的生命周期。
servlet会在不同的阶段执行不同的方法。
(1)构造方法---->servlet被创建时执行
(2)初始化方法--->servlet创建完成后要初始化一些参数时该方法会被执行。
(3)执行方法--->servlet被调用时。
(4)销毁方法--->servlet被关闭。
发现:无论发送多少次请求,构造方法和初始化方法只会执行一次。而service每次请求都会被执行。
证明servlet为单例模式. 节约内存空间。
当服务器tomcat重启或者重写部署项目,那么servlet就会被销毁
上面当你第一次通过浏览器访问servlet时才会被创建和初始化。也可以通过配置当tomcat启动时就创建和初始化servlet。
10 过滤器Filter
什么是过滤器?
过滤掉一些不向要信息,让一些想要的信息通过。 例如:杯子的过滤网,高速上卡点。净化器。
程序中的过滤器?
让一些合法的请求通过该过滤器,而拦截一些不符合要求的请求路径。当请求到达该过滤器时,可以为请求设置一些参数。
过滤器的原理

如何来创建过滤器
(1)创建一个类并实现Filter接口并重写相应的方法
@WebFilter(filterName = "EncodingFilter",urlPatterns = "/*")
public class EncodingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException {
req.setCharacterEncoding("utf-8");//设置请求的编码 接受到的请求参数不会乱码。
resp.setCharacterEncoding("utf-8");//设置响应的编码,响应的数据不会出现乱码。
//放行
filterChain.doFilter(req,resp);
}
@Override
public void destroy() {
}
}
(2) 登录过滤器
@WebFilter(filterName = "LoginFilter", urlPatterns = "/*")
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain) throws IOException, ServletException {
//向下转型 有些方法在子类中存在。
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
//获取请求路径
String path = request.getRequestURI();
//1.判断当前的请求路径是否为要放行的路径
if(path.contains("/login.jsp")||path.contains("/UserServlet")){
filterChain.doFilter(req,resp);
return; //终止方法
}
//2.必须登录后才能放行。如何判断是否登录。
HttpSession session = request.getSession();
Object user = session.getAttribute("user");
if(user!=null){ //表示用户登录过
filterChain.doFilter(req,resp);
return;
}
//3.跳转到登录页面
response.sendRedirect("/web07/login.jsp");
}
@Override
public void destroy() {
}
}
边栏推荐
- 智能指针、左值引用右值引用、lambda表达式
- 13. Write a program, in which a user-defined function is used to judge whether an integer is a prime number. The main function inputs a number and outputs whether it is a prime number.
- MGRE and OSPF comprehensive experiment
- PPPoE gateway simulation environment setup
- Data annotation learning summary
- How to set up an internal wiki for your enterprise?
- postgresql:在Docker中运行PostgreSQL + pgAdmin 4
- Image to image translation with conditional advantageous networks paper notes
- 明星逆市入局的NFT,如何能走出独立行情?
- Zhaoyi innovation gd25wdxxk6 SPI nor flash product series comes out
猜你喜欢

Source code compilation!!
![[postgraduate entrance examination vocabulary training camp] day 10 - capital, expand, force, adapt, depand](/img/9a/a218c46806cf286f0518a72809e084.png)
[postgraduate entrance examination vocabulary training camp] day 10 - capital, expand, force, adapt, depand

Chapter 9 using image data

Fiddler抓包工具的使用

Blue Bridge Cup 31 day sprint 21 day (C language)
![Embedded system transplantation [2] - Construction of cross development environment](/img/96/8d209c04e41675fc0efaa872c35615.png)
Embedded system transplantation [2] - Construction of cross development environment

手写orm框架

SSM整合

Update C language notes

Performance test process
随机推荐
Data annotation learning summary
7. Find the sum of numbers between 100 and 300 that can be divided by 3.
This article takes you to understand C string functions and memory functions in simple terms
Fiddler抓包工具的使用
Chapter 9 using image data
How to avoid the most common mistakes when building a knowledge base?
power. The operation is in the low peak period of business. Import call will help you prepare each word
[deep learning] (III) image classification
Illustration and text demonstrate the movable range of the applet movable view
太空可再生能源的代币化
Heavy! The 2022 China open source development blue book was officially released
Kingbase v8r6 cluster installation and deployment case - script online one click expansion
1、基于增量式生成遮挡与对抗抑制的行人再识别
SSM整合
股票价格走势的行业关联性
Jetson设备 faild to download repository information使用小技巧记录
PostgreSQL: run PostgreSQL + pgadmin 4 in docker
JMeter upload and download files
Jetson device failed to download repository information use tips to record
线程的介绍
