1:使用tomcat服务器的JavaEE的包
2.根据工作时的方式,建立File文件,而不是jsp文件,由于是更改美工提供好的html文件
JSP页面中的注释
1.<!--注释内容-->
HTML注释,注释中的内容如果包含Java代码,这些Java代码会被执行;
2.<%--注释内容%>
JSP特有的注释,如果注释的内容中 出现Java代码,会被忽略;
jsp小脚本
语法规则:<%... ...%>
合法内容:能够写在方法里的Java代码片段都可以作为小脚本
转移成Servlet是的规则,原封不动成为Servlet类的
Service() 方法里面的一段代码
JSP表名
语法规则: <%=……%>
<% for(int i=0;i<20;i++){ %>
合法内容:变量,变量加运算符组合的表达式,有返回值得方法
转移成Servlet时的规则:在Service()方法中用out.print语句输出该变量,表达式,方法的值;
<%=i%>
<%=pf(i) %>
JSP定义函数
语法规则:<%!....%>
合法内容L成员属性或成员方法的声明;
<%@page pageEncoding=""utf-8"" %>
<!-- 1、JSP中可以直接写HTML-->
<!doctype html>
<html>
<head>
<meta charset=""utf-8"">
<title>第1个JSP</title>
</head>
<body>
<!-- 声明:定义函数 -->
<%!
public int pf(int n){
return n*n;
}
%>
<ul>
<!-- 2.JSP中可以写Java -->
<!-- 2.1 JSP脚本:完整的Java代码行 -->
<%
for(int i=0;i<20;i++){
%>
<!-- 2.2JSP表但是:要输出的变量 -->
<li><%=i%></li>
<li><%=pf(i) %></li>
<%
}
%>
</ul>
</body>
</html>"
JSP页面的指令:控制JSP在转译成Servlet类时生成的内容
语法规则<%@指令名 属性=值 %>
常见指令:
page指令
include指令
taglib指令
page指令
<!--pageEncoding:声明当前文件的编码。
contentType:响应是通知浏览器输出的内容格式。-->
<%@page pageEncoding=""utf-8""
contentType=""text/html""
import=""java.util.*,java.text.*""%>
include指令
<!-- 将date.jsp引入到此处,相当于将其内容复制到此处。 -->
<%@include file=""date.jsp"" %>
JSP工作原理
#JSP隐含(内置)对象
1.request
`-HttpServletRequest
2.response
`-HttpServletResponse
3.out
·-JSPWriter
·-相当于PrintWriter
4.config
.-ServletConfig
5.application
.-ServletContext
6.session
·-HttpSession
7.object
·-Object
8.exception
`-Throwable
`-网页中的异常,当异常发生时才可用
9.page
`-指代当前页面,相当于this
9.pageContext
`-可以给页面提供数据
·-事实上该对象引用了其他的8个隐含对象;
使用示例
<%=request.getParameter(“user”)%>
<%String user=request.getParameter(“user”);%>“`
/**
* 解决系统在出现异常时的不友好提示,避免客户端看到有关错误的任何说明
*
* 两种解决办法:
* 1:捕获到异常时,绑定错误提示信息,转发到指定的错误页面。
* 2:声明式处理,即在捕获到异常时,将其封装成ServletException 后抛给容器,在web.xml中添加配置,
* 在捕获到异常后由容器控制着跳转到指定的错误页面。
*
*/
public class ActionServlet extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding(""utf-8"");
response.setContentType(""text/html;charset=utf-8"");
PrintWriter out = response.getWriter();
//获取请求资源路径
String uri=request.getRequestURI();
//获取请求资源路径中除应用名以外的部分
String action=uri.substring(uri.lastIndexOf(""/"")+1,uri.lastIndexOf("".""));
HttpSession session=request.getSession();
//创建员工管理类
EmployeeDao dao=new EmployeeDao();
//判定请求动作种类,分不同种类情况处理
if(action.equals(""list"")){
try{
List<Employee> emps=dao.findAll();
//判定数据到request
request.setAttribute(""emps"", emps);
//转发
request.getRequestDispatcher(""listEmp.jsp"").forward(request, response);
}catch(Exception e){
e.printStackTrace();
//out.println(""系统繁忙"");
//1.编程式的处理异常
request.setAttribute(""err_msg"", ""系统出错,请重试"");
request.getRequestDispatcher(""error.jsp"").forward(request, response);
}
}else if(action.equals(""add"")){
String name=request.getParameter(""name"");
double salary=Double.parseDouble(request.getParameter(""salary""));
int age=Integer.parseInt(request.getParameter(""age""));
try{
Employee emp=new Employee();
emp.setName(name);
emp.setSalary(salary);
emp.setAge(age);
dao.save(emp);
response.sendRedirect(""list.do"");
}catch(Exception e){
e.printStackTrace();
//out.println(""系统繁忙"");
//2.将异常抛给容器,在web.xml中添加声明,变成声明式的处理异常
throw new ServletException(e);
}
}else if(action.equals(""load"")){
int id=Integer.parseInt(request.getParameter(""id""));
try{
Employee emp=dao.findById(id);
request.setAttribute(""emp"", emp);
request.getRequestDispatcher(""updateEmp.jsp"").forward(request, response);
}catch(Exception e){
e.printStackTrace();
out.println(""系统繁忙"");
}
}else if(action.equals(""delete"")){
int id=Integer.parseInt(request.getParameter(""id""));
try{
dao.delete(id);
response.sendRedirect(""list.do"");
}catch(Exception e){
e.printStackTrace();
out.println(""系统繁忙"");
}
}else if(action.equals(""update"")){
int id=Integer.parseInt(request.getParameter(""id""));
String name=request.getParameter(""name"");
double salary=Double.parseDouble(request.getParameter(""salary""));
int age=Integer.parseInt(request.getParameter(""age""));
Employee emp=new Employee();
emp.setName(name);
emp.setSalary(salary);
emp.setAge(age);
emp.setId(id);
try {
dao.modifty(emp);
response.sendRedirect(""list.do"");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else if(action.equals(""regist"")){
UserDao userDao=new UserDao();
//1.获取表单中的用户名等信息
String userName=request.getParameter(""username"");
String name=request.getParameter(""name"");
String pwd=request.getParameter(""pwd"");
String gender=request.getParameter(""sex"");
//2.根据用户名查询实体
//3.判断实体是否为null
//4.等于null则执行插入
//不等于空则判定提示信息后跳转
try{
User u=userDao.findByUserName(userName);
if(u!=null){
request.setAttribute(""regis_err"", ""用户名已存在"");
request.getRequestDispatcher(""regist.jsp"").forward(request, response);
}else{
u=new User();
u.setUserName(userName);
u.setPwd(pwd);
u.setName(name);
u.setGender(gender);
userDao.save(u);
response.sendRedirect(""login.jsp"");
}
}catch(Exception e){
e.printStackTrace();
throw new ServletException(e);
}
}else if(action.equals(""login"")){
UserDao userDao=new UserDao();
//1获取表单中的用户名等信息
String userName=request.getParameter(""name"");
String pwd=request.getParameter(""pwd"");
String number=request.getParameter(""vcode"");
String code=session.getAttribute(""code"").toString();
//2根据用户名查询实体
try{
User u=userDao.findByUserName(userName);
if(u==null ||!u.getPwd().equals(pwd)){
request.setAttribute(""login_err"", ""用户名或者密码错误"");
request.getRequestDispatcher(""login.jsp"").forward(request, response);
}else if(!code.equalsIgnoreCase(number)){
request.setAttribute(""validate_err"", ""验证码错误"");
request.getRequestDispatcher(""login.jsp"").forward(request, response);
}else{
//创建用户名及密码Cookie编码状态
Cookie userNameCookie=new Cookie(""userName"",URLEncoder.encode(userName,""UTF-8""));
Cookie pwdCookie=new Cookie(""pwd"",URLEncoder.encode(pwd,""UTF-8""));
//设置Cookie的路径
userNameCookie.setPath(""/web04"");
pwdCookie.setPath(""/web04"");
//设置Cookie的生存周期1个月及一次
userNameCookie.setMaxAge(30*24*60*60);
pwdCookie.setMaxAge(0);
//添加到response
response.addCookie(userNameCookie);
response.addCookie(pwdCookie);
response.sendRedirect(""list.do"");
}
}catch(Exception e){
e.printStackTrace();
throw new ServletException(e);
}
//3如果实体等于null或者密码不相等则绑定信息后转发回login
//4非空且密码相等则登录成功,重定向到查询页面
}
}
}
<%@page contentType=""text/html;charset=UTF-8"" pageEncoding=""UTF-8"" %>
<%@page import=""entity.*,java.util.*"" %>
<html>
<head>
<title>emplist</title>
<meta http-equiv=""Content-Type"" content=""text/html; charset=UTF-8"">
<link rel=""stylesheet"" type=""text/css"" href=""css/style.css"" />
</head>
<body>
<div id=""wrap"">
...
...
<div id=""content"">
<p id=""whereami"">
</p>
<h1>
Welcome!
</h1>
<table class=""table"">
...
<%
List<Employee> emps=(List<Employee>) request.getAttribute(""emps"");
for(int i=0;i<emps.size();i++){
Employee emp=emps.get(i);
%>
<tr class=""row<%=i%2+1 %>"">
<td><%=emp.getId() %></td>
<td><%=emp.getName() %></td>
<td><%=emp.getSalary() %></td>
<td><%=emp.getAge() %></td>
<td>
<a href=""delete.do?id=<%=emp.getId()%>""
onclick=""return confirm('是否确认删除<%=emp.getName()%>信息?');""
>删除</a>
<a href=""load.do?id=<%=emp.getId() %>"">修改</a>
</td>
</tr>
<%
}
%>
</table>
<p>
<input type=""button"" class=""button"" value=""Add Employee"" onclick=""location='addEmp.jsp'""/>
</p>
</div>
</div>
<div id=""footer"">
<div id=""footer_bg"">
ABC@126.com
</div>
</div>
</div>
</body>
</html>
转发和重定向都用来解决2个WEB组件(Servlet/JSP)之间的跳转问题;
1.两个组件存在依赖关系,则用转发
2.一般情况下 查询时用到转发;
3.一般情况下,增加,修改,删除后重定向到查询;