Links

1. java EE 复习

列举三种动态网页技术,并描述其特点

  • ASP
    • Active Server Pages 基于.Net实现的动态服务器页面
  • JSP
    • jAVA Server Page,基于Java实现的web页面模板引擎
  • Django
    • 基于Python语言实现的MVC设计模式的WEB框架
  • PHP
    • 主要应用于Web开发,服务端执行的脚本语言

描述你在使用某集成开发环境,进行JSP+JavaBean+Servelet编程时,遇到的一个故障,及最终的解决办法

使用IDEA 集成开发环境,在新建Servlet时会自动生成@WebServlet注解,避免了配置Web.xml的麻烦,但是启动项目后发现并没有起作用,原因是 @WebServlet("test")没有加 / 正确写法为WebServlet("/test)

编程题

Servlet接收表单传递过来的数据 假定给你提供了一个HTML文件,用户在表单中输入某些信息(可能含有中文),用户点提交按钮的时候,向Servlet提交。 你的Servlet的功能:对数据的合法性进行基本检验,如果有问题则给出错误消息。如果满足要求,则直接输出html到客户端,回显用户输入的每一项信息。要求:中文不能有乱码的情况。
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置回调字符编码和文本格式
response.setCharacterEncoding("utf-8");
response.setContentType("text/html");
PrintWriter writer=response.getWriter();
​
//获取表单传递的参数
String username=request.getParameter("username");
String password=request.getParameter("password");
​
//数据校验
if(username==null||username.equals("")){
writer.println("用户名不能为空");
return;
}
if (password.length()<6||password.length()>12){
writer.println("密码长度不符合要求");
return;
}
​
//成功回调
writer.println("账号:"+username);
writer.println("密码:"+password);
​
}
JSP输出基本信息创建一个Welcome.jsp,在页面上显示: 当前日期时间是2019-12-15 19:20:30, 欢迎你,来自210.41.240.254的朋友。 其中的日期时间和IP都是动态获取的,当前页面显示3秒后, 跳转到:https://www.swpu.edu.cn/scs/​
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>欢迎</title>
</head>
<body>
<%
DateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date now =new Date();
String nowTime=df.format(now);
String ip=request.getRemoteAddr();
%>
​
当前日期时间是<%=nowTime %> ,欢迎你,来自 <%=ip%> 的朋友。
​
<%
response.setHeader("refresh","3;url=https://www.swpu.edu.cn/scs/");
%>
</body>
</html>
会话处理能力 用JSP或Servlet实现登录的表单界面。当用户成功登录后,将用户名存储在Cookie中,下一次打开此页面时,用户名可以自动显示在用户名文本框内。
  • servlet
    //获取表单传递的参数
    String username=request.getParameter("username");
    String password=request.getParameter("password");
    PrintWriter writer=response.getWriter();
    //成功回调
    writer.println("账号:"+username);
    writer.println("密码:"+password);
    //存储cookie
    response.addCookie(new Cookie("username",username));
    response.addCookie(new Cookie("password",password));
  • jsp
    ```jsp <% Cookie[]cookies =request.getCookies(); String username=""; String password=""; for (Cookie k:cookies){ if(k.getName().equals("username")){ username=k.getValue(); } if(k.getName().equals("password"){ password=k.getValue(); } } %>
用户名:
<input type="text" name="username" value="<%=username%>" />
密码:
<input type="password" name="password" value="<%=password%>"/>
<input type="submit" value="提交">
</form>
---
>Java类封装数据库访问
编写一个名为DbHelper的类,此类能连接到SQL Server数据库中指定的数据库,并提供一个checkUser的方法,接收用户名和密码,到tblUser表中,检查此用户是否存在。方法返回int类型,返回1表示用户名和密码正确,返回-1表示不能成功登录。
​
```java
public class DbHelper {
​
private Connection connection=null;
​
/**
构造方法,尝试创建连接对象
*/
public DbHelper() throws Exception
{
String sJdbcURL="jdbc:sqlserver://localhost:1433;databaseName=sugar";
String sUser="sa";
String sPwd="123456";
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
connection= DriverManager.getConnection(sJdbcURL,sUser,sPwd);
}
​
public int checkUser(String username,String password)
{
try
{
CallableStatement call=connection.prepareCall("{call prjCheckUser(?,?)}");
call.setString(1,username);
call.setString(2,password);
ResultSet rs=call.executeQuery();
rs.next();
return rs.getString(1).equals("Y")?1:-1;
}
catch(Exception err)
{
return -1;
}
}
​
}